LINUX.ORG.RU

Опубликованы C++ Core Guidelines

 ,


10

8

Бьерн Страуструп и Герб Саттер опубликовали в открытом доступе объемный документ, содержащий основные принципы разработки на современном С++. Авторы надеются, что следование данным принципам позволит разработчикам эффективно использовать язык и писать безопасный и поддерживаемый код.

C++ Core Guidelines: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md/

Ответ на: комментарий от anonymous

Я с неделю назад натравил clang-modernize на старый проект, он мне override, auto, range for и пр. расставил. Это конечно больше «косметика»

Вот именно - косметика. Если будет автоматизированная замена T* на подходящий умный указатель, auto_ptr<> на unique_ptr<> - можно будет говорить о чем-то серьезном. Еще интересно, как новый анализатор лайфтаймов справится с унаследованными исходниками.

Но в любом случае - модернизацией исходников нужно специально заниматься, а будет ли кто-нибудь это делать - ХЗ.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

auto_ptr<> на unique_ptr<>

clang-modernize это умеет.

anonymous
()
Ответ на: комментарий от anonymous

А что не так? На C нужно быть очень внимательным, терпеливым программистом в C++ за тебя эти вещи уже додумали сами и сильно в дебри не приходится углублятся.

impowski
()
Ответ на: комментарий от lovesan

А это ничего, что все перечисленные вами языки являются языками с GC? И что языки с GC, как бы помягче сказать, не везде подходят?

Может напряжетесь и дадите название нормального языка, играющего на одной площадке с C++?

eao197 ★★★★★
()
Ответ на: комментарий от asaw

Ты победил. У тебя тут из всего топика более менее адекватные и логичные мысли, по сравнению с остальными.

impowski
()
Ответ на: комментарий от eao197

А какая площадка у C++? Т.е. где это GC мешает настолько, что использование рантаймов с его поддержкой невозможно, но банального Си не хватает?

lovesan ★★
()
Ответ на: комментарий от lovesan

А какая площадка у C++?

Небольшая, но практически никем не занятая: быстродействующий софт.

Т.е. где это GC мешает настолько, что использование рантаймов с его поддержкой невозможно, но банального Си не хватает?

Да практически везде. Возьмите хоть браузеры, хоть софт для обработки фото/видео/аудио, хоть сильно нагруженный Web.

Тем не менее, список нормальных языков без GC предъявите, плиз.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Я лично писал «сильно нагруженный веб» на эрланге и на C#. Нахер там C++ не нужен.

Браузеры вообще исключительно по историческим причинам на C++.

итд.

Я могу на Common Lisp, на SBCL, хотя тот в целом чуть медленнее джавы, написать код который по скорости уделает среднестатистический индусокод, писанный дебилами, коих как известно большинство, на C++. Особенно если дело касается совсем не микробенчмарков, а библиотек или целых приложений. Вот это вот банальное «скорость» это ни разу не аргумент.

lovesan ★★
()
Ответ на: комментарий от lovesan

Нахер там C++ не нужен.

Расскажите это Google и Facebook. У них явно «сильно нагруженный» несколько более нагруженный, чем у вас.

Тем не менее, хватит звиздеть, где список нормальных языков без GC?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Тем не менее, хватит звиздеть, где список нормальных языков без GC?
уделает среднестатистический индусокод, писанный дебилами, коих как известно большинство, на <lang_name>

Ты еще не понял, что имеешь дело с петухом?

Solace ★★
()
Ответ на: комментарий от lovesan

Надо же какое совпадение, а я вот буквально недавно писал на C++ сетевую библиотеку для C#, потому что у C# кишка оказалась тонка такое поддержать. А на C я бы такое даже не подумал писать - sloccount мне в итоге сообщил, что там:

Total Physical Source Lines of Code (SLOC)                = 5,745
Development Effort Estimate, Person-Years (Person-Months) = 1.25 (15.05)
 (Basic COCOMO model, Person-Months = 2.4 * (KSLOC**1.05))
Schedule Estimate, Years (Months)                         = 0.58 (7.00)
 (Basic COCOMO model, Months = 2.5 * (person-months**0.38))
Estimated Average Number of Developers (Effort/Schedule)  = 2.15
Total Estimated Cost to Develop                           = $ 169,393
 (average salary = $56,286/year, overhead = 2.40).
И это учитывая, что там кругом STL-евские контейнеры и бустовые контейнеры всех мастей. И это ещё без учета .NET-обертки, которую только на C++ и можно писать. А написал я всё это за три месяца. И там за всё время разработки и тестирования не было НИ ОДНОЙ проблемы связанной с управлением памятью. На C такое было бы просто невозможно.

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 1)

мне тут ровные раённые пасаны пояснили, что цпп это си с классами, так ли это?

anonymous
()
Ответ на: комментарий от anonymous

цпп это си с классами,

Ох, если бы!

anonymous
()
Ответ на: комментарий от eao197

ой блеать. FB вообще на PHP до поры до времени работал. А VK вон до сих пор. Причем FB компилируется в такой C++, которому далеко до будничного байтодрочерского кода плюсистов среднестатистических, лучше бы на Scala писали, на которой вон написан Twitter.

Короче ничего не меняется, смотрю. Как лет 5 назад ЛОР был полон дебилоидов-плюсистов, так и сейчас. Пора, наверное, обновить статейку про c++-говно в жежешечке, гг.

lovesan ★★
()
Ответ на: комментарий от anonymous

папаша твой петух, бггг, попрыгай мне тут еще

lovesan ★★
()
Ответ на: комментарий от lovesan

в принципе, если бы ты пользовался здесь каким-то уважением и был бы хорошо подкован в техническом плане, к тебе бы прислушивались и твои посты могли повлиять на выбор местной публики.
но ведь тебе не нужно тут ничье уважение. ты самодостаточен в своих комплексах, с которыми, как ты думаешь, ты научился жить и сублимация в посты в таких тредах твой способ выживания, сохранение шаткого внутреннего равновесия.
пойми, никто не говорит, что ты плохой и тебя за это не любят. речь о том, чтобы ты был счастлив и не доказывал никому ничего, потому что когда ты счастлив, ты самодостаточен и тебя не уязвляют чужие предпочтения.
работай над собой, парень.

anonymous
()
Ответ на: комментарий от anonymous

Вертел твою мамашу на известно чем, неуважаемый.

Пора бы перестать анонимным троллям отвечать, но ох, затягивает.

lovesan ★★
()
Ответ на: комментарий от lovesan

о том и вышенаписанный пост. в этой бессмысленной вечерней перепалке из нас и тебя о своей несдержанности в ответах анонимным троллям сожалеешь ты

anonymous
()
Ответ на: комментарий от lovesan

Эка вас, батенька, торкнуло. Хотя можно было бы обойтись перечислением хотя бы пары-тройки названий.

eao197 ★★★★★
()
Ответ на: комментарий от lovesan

статейку про c++-говно в жежешечке

обнови, с удовольствием почитаю и еще раз убежусь, что плюсы лучше обходить стороной и компаниям, нанимающим плюсистов, желать самого наилучшего

unt1tled ★★★★
()
Ответ на: комментарий от lovesan

Я лично писал «сильно нагруженный веб» на эрланге и на C#. Нахер там C++ не нужен.

Зависит от того, что именно ты там делал. Иногда C++ бывает полезен.

Я могу на

Проблема в том, что узнать это мы никак не сможем. Потому аргументом в дискуссии быть не может.

anonymous
()
Ответ на: комментарий от lovesan

FB вообще на PHP до поры до времени работал... Причем FB компилируется в такой C++, которому далеко до будничного байтодрочерского кода плюсистов среднестатистических

В FB много крестового кода. И не сгенерированного.

А VK вон до сих пор.

Зачем врать? Там тоже много C++.

anonymous
()
Ответ на: комментарий от unt1tled

C++ играет на всех чужих площадках, своей у него нет, так о чем ты?

Даже если ты и прав, и площадки действительно чужие, то значит хотелось бы видеть другой язык, способный на такие игры.

anonymous
()
Ответ на: комментарий от eao197

тоесть пернуть в тред и понаписать 100500 хуйни вы можете, а как столкнулись с «обоснуй» и «тыоткудатакойдерзкий», так сразу и уровень не тот и аргументация плохая

и хватит уже за анонимусом прятаться, он вас за это не простит

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

а как столкнулись с «обоснуй» и «тыоткудатакойдерзкий»

Попробуйте последовать своему же совету и внятно обосновать ваше собственное утверждение «C++ играет на всех чужих площадках, своей у него нет». Особенно с учетом исторической перспективы и того простого факта, что когда C++ стал мейнстримом, ни Java, ни C#, ни Python-ов с Ruby-ями, не было в дикой природе. Как и вас, судя по уровню вашего умственного развития.

eao197 ★★★★★
()
Ответ на: комментарий от unt1tled

и хватит уже за анонимусом прятаться, он вас за это не простит

О, новое слово в сливе срачей: «перевод стрелок с анонимуса на регистранта»

Pavval ★★★★★
()
Ответ на: комментарий от eao197

обосновать ваше собственное утверждение «C++ играет на всех чужих площадках, своей у него нет». Особенно с учетом исторической перспективы и того простого факта, что когда C++ стал мейнстримом, ни Java, ни C#, ни Python-ов с Ruby-ями, не было в дикой природе.

В это время, когда С++ безуспешно пытался найти свою площадку, и его тыкали в каждую бочку затычкой (что как бы намекает на отсутствие наиболее подходящей логически), пока не нашли довольно убогую нишу «движков» (геймдвижков, фреймворк-движков, шаблонного говна движков и прочих костылей) — уже существовали нормальные языки программирования, высокоуровневые и при этом более повторно используемые: Objective C, Modula-2, Oberon-2, Eiffel, Ada, Limbo, Alef, Newspeak, Ocaml и прочие.

И везде там эти языки выглядели более адекватно чем С++.

С++ — это худшее, что случилось с индус-трией разработки ПО (славься, Windows 10: индусы наконец таки пишут триальные программы с донатом) за её историю.

Но некоторые никогда не учатся на ошибках и продолжают ковырять свои «движки» — хотя их проще выкинуть и переписать заново, на более адекватных (по заложеному набору концепций, простоты и мощности) языках. Без костылей технического долга, заложенных в C++ by design.

когда C++ стал мейнстримом, ни Java, ни C#, ни Python-ов с Ruby-ями, не было в дикой природе.

А когда это оно стало мейнстримом, кстати? Вроде бы в середине 90х. Когда уже только-только родилась жаба и монтипайтону стукнуло лет пять. А сисярпа в виде msjava и J# рантаймом под стол пешком кодил.

anonymous
()
Ответ на: комментарий от eao197

Собственно, про площадку: Си так и остался макроассемблером, просто с дурацким синтаксисом ioccc-fiendly. А С++ с шаблонным говнокодом — объектно-ориентированным макроассемблером с классами.

Офигеть какое достижение софтверостроительной движкоиндустрии, ога.

anonymous
()
Ответ на: комментарий от tailgunner

цитату Саттера со словами «I did design»

Бритни Страуструп:


Yeah yeah yeah yeah yeah
Yeah yeah yeah yeah yeah yeah

I think I did it again
I made you believe we're more than just fag ends
Oh baby
It might seem like a crush
But it doesn't mean that I'm serious
'Cause to lose all my senses
That is just so typically me
Oh baby, baby


Ooops! I did it design
I did it again
I played with your brain, got lost in the game
Oh baby, baby
Oops, you think I'm in love
That I'm sent from above
I'm not that innocent

(Chorus: x2)


You see my problem is tits
I'm dreaming away
Wishing that heroes, they truly exist
I cry, watching the days
Can't you see I'm a fool in so many ways
But to lose all my senses
That is just so typically me
Oh baby, oh

(Chorus)


Yeah yeah yeah yeah yeah yeah
Yeah yeah yeah yeah yeah yeah

anonymous
()
Ответ на: комментарий от anonymous

Какой поток бреда.

Objective C, Modula-2, Oberon-2, Eiffel, Ada, Limbo, Alef, Newspeak, Ocaml и прочие.

Внезапно, они и сейчас есть. И некоторые даже неплохо развиваются. Только вот как-то не взлетают ни в геймдеве, ни науке, ни прочей области. И это несмотря на толпы восторженной школоты, которые «открывают» очередного «убийцу С/С++»

anonymous
()
Ответ на: комментарий от tailgunner

А насчет RAII - если использовать термин lifetime так свободно, то lifetime-ы появились еще в Algol 68 или там BCPL.

Вот ежели книгу Пентковского почитать с карандашиком «Программирование на Эль-76 для системы Эльбрус», то там мы увидим лайфтаймы.

ТИПы, «типовые инструментальные пакеты» := компоненты в компонентно-ориентированном ПО.

Они построены как модули в динамически типизированном автокоде Эль-76, с явным прописыванием жизненного цикла модуля.

То есть, лайфтайма.

При этом есть «глобальный» лайфтайм — не 'static = «время жизни программы», а «время жизни системы», платформы.

Понятное дело, что в Оберон-2 эта концепция была недоделанной: сборщик мусора там понадобился только для того, чтобы «компонент» можно было в любой момент выгрузить (если нет клиентов) и загрузить новую версию компонента, любого подходящего по совместимым интерфейсам (с точностью до полиморфимза «расширительного программирования»).

В отсутствие сборщика мусора подобное можно было изобразить на Modula-2 (проект Кронос, А. Недоря, «Мithril») ну или на Modula-3 (DEC SRCS labs).

Там уже какие-то зайчатки лайфтаймов появляются, но концептуально правильно было в Эльбрусе: вся модульно-компонентая система на этом строилась.

anonymous
()
Ответ на: комментарий от anonymous

не взлетают

И каков же вывод по причинам этого? Что 90% мух знает наперёд как правильно, и куда нужно следовать стаду баранов?

Следует различать нормальные, здравые технические решения и пиар. Модную шумиху в стиле рекламных компаний 90-х про Java или не приведи господи, «developers, developers, developers, developers».

Когда кто-то искусственно нагнетает моду — как раз самое время спросить, с какой целью. И где тут три барана на рынке (которого продают, который продаёт, и который покупается на свистки и перделки).

Когда винтаж пытаются сделать модой — тоже кстати, вопрос: зойчем останавливаете прогресс?

anonymous
()
Ответ на: комментарий от anonymous

Там уже какие-то зайчатки лайфтаймов появляются

Они появляются раньше.

но концептуально правильно было в Эльбрусе: вся модульно-компонентая система на этом строилась.

Концептуально правильно - это проверять лайфтаймы статически, а со статическими проверками у Эль-76 было просто никак, ф64 наше всё.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

уже существовали нормальные языки программирования, высокоуровневые и при этом более повторно используемые: Objective C, Modula-2, Oberon-2, Eiffel, Ada, Limbo, Alef, Newspeak, Ocaml и прочие.

Ну пройдем по списку.

Objective-C. Да, на момент появления C++ уже был. Хотя популярность получил в очень узкой нише NeXT-а, откуда со временем перекочевал на MacOS, где и жил мало кому известным до феноменального успеха iPhone. Т.е. 20 лет где-то глубоко в заднице, если называть вещи своими именами.

Modula-2. Отличный язык. К сожалению, процедурный. Поэтому Modula-2 нужно противопоставлять C, а не C++.

Oberon-2. Был живым трупом еще в момент своего рождения и не использовался за пределами узкого круга почитателей дела Вирта.

Eiffel. Появился после C++. Кроме того, это язык с GC, об этом выше уже говорилось.

Ada. В конце 80-х и в начале 90-х, когда C++ и стал мейнстримом, это был процедурный язык, без поддержки ООП. Так что та же история, что и с Modula-2.

Про Limbo, Alef и Newspeak ничего не скажу, т.к. никогда не слышал об их реальном использовании. Кроме того, если подразумевается вот этот Newspeak, то он появился когда C++ уже активно вытеснялся из мейнстрима не только Java/C#, но и Python-ом с Ruby.

OCaml появился в 1996, т.е. через одинадцать лет после C++. Во времена, когда на C++ была написана уже изрядная часть ядра Windows (как в NT, так и в 95-ой), не говоря уже про огромное количество прикладного софта на различных платформах.

Очень странно, что вы не помянули Object Pascal. Возможно, вы слишком молоды для этого. Поэтом на всякий случай обозначу временные рамки: С++ стал мейнстримом в конце 80-х, а в 90-е был одним из немногих языков, которые позволяли разрабатывать сложный софт, представленный на большом количестве платформ и снабженный большим количеством инструментария. Java начала составлять серьезную конкуренцию C++ только ближе к концу 90-х. И, неслучайно, совпало это по времени со стремительным ростом мощности компьютеров. В особенности на базе Intel-овских процессоров.

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

Когда кто-то искусственно нагнетает моду — как раз самое время спросить, с какой целью.

Во! Прям как сейчас наблюдаем с руст, а до этого наблюдали в руби (где он сейчас?), а до этого все орали, что хаскель - это решение всех проблем, а до этого ...

Когда винтаж пытаются сделать модой

Какой винтаж? Язык близкий к железу? Так надо начинать не с языка, а с железа, млять! Менять весь фундамент, потому что как бы очередной «убийца» не изгалялся, он будет сливать и сосать. А несмотря на «кучу гигагерцев» их иногда не хватает и приходится лезть в сишку или, не приведи Заратустра, в асм железки.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.