LINUX.ORG.RU

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

 ,


10

8

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

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

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

Да даже майкрософт не так тормозят, даже свою версию модулей реализовали.

А вот это нехорошая тенденция, имхо :) Такое впечатление, что выпустив поддержку модулей в VS2015Upd-1, MS хочет свое творение сделать де-факто стандартом, после чего пропихнуть это в стандарт языка. И это касается не только модулей, но и сопрограмм.

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

Это мягко сказать, учитывая сколько вокруг него шума

В смысле? Шум - это хорошо, он показывает наличие интереса. А «востребованность» - это уже «продакшен», там несколько другие критерии, в основном.

Похоже, Rust готовится пройти путь D.

Вижу немало различий. Начать хотя бы с ниши - ГЦ не везде нужен, а где он не мешает, то там не сильно нужен С++. Как видим, промежуточная ниша не сильно большая. Ну или процесс изучения языка: для D долгое время (и то не сразу) существовала одна платная книга Александреску. Лично я покупать книгу, чтобы изучить язык и понять нужен ли он мне не готов. А для раста полно всякого разного для разных уровней. Опять же, килерфича у раста более специфическая, а не просто «улучшенный С++».

Но время покажет.

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

А вот это нехорошая тенденция, имхо :)

Зато на практике можно будет оба вариант пощупать. Хотя мне тоже не очень нравится ситуация. С другой стороны - раньше ведь только на GCC идеи обкатывались (те же концепты).

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

В смысле?

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

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

MS хочет свое творение сделать де-факто стандартом, после чего пропихнуть это в стандарт языка

Недаром Cаттер в комитете, да :D

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

для D долгое время (и то не сразу) существовала одна платная книга Александреску.

Вроде как к тому времени в Интернетах уже были пара ресурсов с описанием языка D (не считая очень толковых материалов по D на самом digitalmars.com), которые описывали реальное состояние языка. А с книгой Александреску, если не ошибаюсь, была весьма пикантная ситуация: она была написана «на вырост». Т.е. к моменту ее написания в D еще не было всех описанных в книге возможностей. А когда они появились, то оказались несколько по-другому сделанными (уж слишком динамично и хаотично D развивался). Впрочем, дело давнее, могу и ошибаться.

А для раста полно всякого разного для разных уровней. Опять же, килерфича у раста более специфическая, а не просто «улучшенный С++».

Вот если бы Rust позиционировали не как «C++ killer», а как «C killer», воспринимался бы он C++ной тусовкой гораздо спокойнее.

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

Опять же, килерфича у раста более специфическая, а не просто «улучшенный С++».

Требую улучшенный Rust++ c еще более упоротым синтаксисом!

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

Недаром Cаттер в комитете, да :D

Я не уверен, что Саттер входит в команду разработчиков компилятора VC++. И что он имеет отношение к таким фичам, как модули и сопрограммы, которые MS-овцы собираются представить миру в первом апдейте к VS2015. В том, что касается сопрограмм вообще, возможно, MS пытается привязать разработчиков к своему Concurrency Runtime.

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

Вот если бы Rust позиционировали не как «C++ killer», а как «C killer», воспринимался бы он C++ной тусовкой гораздо спокойнее.

По моим личным впечатлениям, Rust как «Си++-киллер» позиционирует только Си++-тусовка :)

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

Ну а мне, почему-то, постоянно попадаются на глаза попытки сравнивать Rust не с C, а с C++. За примерами ходить далеко не нужно: эта тема про C++ Guidelines, но и здесь, почему-то, Rust всплыл.

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

Модулями у них занимается такой веселый профессор Габриэль Дос Рейс, который раньше, вроде бы, в FSF работал. Ну и, конечно, они там друг друга знают.

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

Языку уже пять лет

Нет, (стабильному) языку гораздо меньше. Между тем когда Страуструп начал «С with classes» делать и тем когда язык получил распространение тоже некоторое время прошло.

Даже движок servo от материнской компании выглядит как жалкая поделка - глючная и тормознутая.

Пруф на тормознутость будет? Я уже не говорю о том, что серво позиционируется как прототип.

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

Вот если бы Rust позиционировали не как «C++ killer», а как «C killer», воспринимался бы он C++ной тусовкой гораздо спокойнее.

Ну да, а если бы как «Java killer», то ещё спокойнее, так что ли? По моему, это проблемы тех людей, которые не могут спокойно воспринимать появление новых языков.

Да и разве где-то официально говорится, что раст планирует «убить С++»? Лично я пишу на С++ и «убийца С» мне нафиг не нужен, а вот замена плюсам, хотя бы, для некоторых задач пригодилась бы.

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

Нет, (стабильному) языку гораздо меньше. Между тем когда Страуструп начал «С with classes» делать и тем когда язык получил распространение тоже некоторое время прошло.

У Страуструпа язык вырвали буквально из рук и стали использовать задолго до того, как ему даже имя придумали, не говоря уже о какой-то строгой формализации.

Пруф на тормознутость будет?

https://www.youtube.com/watch?v=pZGhnqtXVdc

Я уже не говорю о том, что серво позиционируется как прототип.

Это очков расту не добавляет.

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

Ну да, а если бы как «Java killer», то ещё спокойнее, так что ли?

Не нужно делать подмену понятий.

C++ники так остро реагируют потому, что когда им предлагаю посмотреть на Rust в качестве замены C++, то сразу же возникает куча вопросов, начиная от сильно странного синтаксиса и заканчивая отсутствием исключений и наследования. Соответственно, первая мысль «C++ далеко не сахар, но менять его вот на это?!!!» Да и вторая мысль такая же.

С другой стороны, если сравнивать Rust с C, где вообще ничего полезного для C++ников нет, то можно забить на тот же синтаксис в счет большей безопасности.

Вот если бы Rust изначально предоставлял кучу сравнимых с C++ фич (включая те же исключения и наследование (в том числе и множественное), продвинутые шаблоны), тогда бы можно было всерьез рассматривать Rust как альтернативу C++.

Да и разве где-то официально говорится, что раст планирует «убить С++»?

При чем здесь официально? Речи местных Rust-оманов — это не официальная позиция, но от этого не легче :)

для некоторых задач пригодилась бы.

Например?

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 1)
Ответ на: комментарий от DarkEld3r

Да и разве где-то официально говорится, что раст планирует «убить С++»?

Да и сам факт того, что Rust делает Mozilla для замены им C++ в разработке браузерного движка как бы намекает ;)

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

Это потому, что значительная часть Си++-тусовки плохо относится к Си++ и хочет заменить его Rust :)

Да и сам факт того, что Rust делает Mozilla для замены им C++ в разработке браузерного движка как бы намекает ;)

Вполне можно сказать, что Грейдон Хоар, первый автор Rust, как раз из Си++-тусовки (см. Monotone).

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Это потому, что значительная часть Си++-тусовки плохо относится к Си++ и хочет заменить его Rust :)

Да пусть попробует. Есть в мире фанаты big rewritting-а :)

Вполне можно сказать, что Грейдон Хоар, первый автор Rust, как раз из Си++-тусовки (см. Monotone).

За то время, пока Rust пилили, появился не только C++11, но и C++14. И, возможно, C++17 будет поддержан основными компиляторами еще до того, как присутствие Rust-а выйдет за рамки статистической погрешности.

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

Это потому, что значительная часть Си++-тусовки плохо относится к Си++ и хочет заменить его Rust :)

Да пусть попробует. Есть в мире фанаты big rewritting-а :)

Она и пробует. Но речь не обязательно о переписывании - просто там, где выгодно, люди хотят работать другим инструментом. Впрочем, переписывания тоже будут - проскакивала новость о MaidSafe. Но, опять же, там люди сочли, что переписывание выгодно.

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

Вообще-то я цитировал слова человека состоящего в комитете стандартизации (Eric Niebler). К нему и вопросы.

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

Возникало. Но это касалось скорее старых вещей, а не новых. В новых стандартах я не видел ничего, что бы подходило под «When the committee has to choose between two incompatible designs for a feature, it sometimes chooses both and adds a third option».

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

люди хотят работать другим инструментом

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

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

Это тебя заносит. Я тебе напомню на всякий случай, что моё исходное суждение выглядело так: «Языку уже пять лет, а на нем до сих пор не создано ничего более-менее полезного и законченного. Даже движок servo от материнской компании выглядит как жалкая поделка - глючная и тормознутая.» Если ты с чем-то не согласен, то можешь утверждать хоть что servo - лучший на свете веб-движок.

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

C++ники так остро реагируют потому...

Собственно, я тоже «C++ник», но остро не реагирую. Так что не надо обобщать.

Да, чего-то не хватает, но и есть то чего нет у С++. В чём синтаксис «довольно странный»? Ну есть лайфтаймы, а всё остальное примерно такое же.

Наследование - допустим. А вот исключения и так не все активно используют. Ну и с шаблонами что не так? Они просто другие, со своими плюсами и минусами.

При чем здесь официально? Речи местных Rust-оманов — это не официальная позиция, но от этого не легче :)

При том. Если судить о языках (да о чём угодно) по комментариям на лоре, то так далеко зайти можно.

Местные «растоманы» как раз, зачастую, сами плюсовики. Так что удивительного в том, что люди, которым язык подошёл, считают его заменой плюсам?

Например?

Да для чего угодно, где наличие существующих С++ библиотек не сильно критично.

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

Да и сам факт того, что Rust делает Mozilla для замены им C++ в разработке браузерного движка как бы намекает ;)

А тот факт, что они не бросаются переписывать все-все части браузера ни на что не намекает?

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

Но только единицы из них способны повлиять на выбор инструментария. Особенно, если речь идет не о собственной поделке.

«Собственные поделки» тоже полезны. Так появляются библиотеки, общедоступная информация о языке и т.д.

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

Ну а я тебе напомню (и расширю, если непонятно) свой ответ:

«Языку уже пять лет, а на нем до сих пор не создано ничего более-менее полезного и законченного.

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

Даже движок servo от материнской компании выглядит как жалкая поделка - глючная и тормознутая.»

Прототип. Который, как утверждается, наоборот быстро работает.

Если ты с чем-то не согласен, то можешь утверждать хоть что servo - лучший на свете веб-движок.

Нет, я могу ткнуть тебя в места, где ты соврал.

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

Прототип. Который, как утверждается, наоборот быстро работает.

Мне плевать кто там чего утверждает, когда я своими глазами вижу, что он тормозит и глючит.

Нет, я могу ткнуть тебя в места, где ты соврал.

Попробуй.

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

Требую улучшенный Rust++ c еще более упоротым синтаксисом!

было бы весело увидеть rust++ как обрезанный rust, по типу C++ -> C

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

У Страуструпа язык вырвали буквально из рук и стали использовать задолго до того, как ему даже имя придумали, не говоря уже о какой-то строгой формализации.

substandard programmers

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

Так что не надо обобщать.

Ну уж писать «отдельные С++ники» сильно в лом. Поэтому просто «С++ники».

В чём синтаксис «довольно странный»?

В синтаксисе, в чем же еще :) Так далеко уйти от привычной C-шной и C++ной нотации — это нужно было постараться.

А вот исключения и так не все активно используют.

Ну и хреново. Причем аргументы против, зачастую, из категории ниасилили «не нравится», «сильно сложно» и т.д.

Ну и с шаблонами что не так? Они просто другие, со своими плюсами и минусами.

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

Так что удивительного в том, что люди, которым язык подошёл, считают его заменой плюсам?

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

Да для чего угодно

Ну например? Для чего не нужно иметь базу из уже готовых библиотек?

А тот факт, что они не бросаются переписывать все-все части браузера ни на что не намекает?

Они еще движок не осилили, куда им все остальное переписывать...

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

Так далеко уйти от привычной C-шной и C++ной нотации — это нужно было постараться.

Ну а всё-таки? let, указания типа после имени - ты про эти мелочи или что-то более интересное? Просто я как-то и не воспринимаю это всё как «странности». Непривычно разве что разделение между данными и методами, но тоже удобным кажется.

Ну и хреново. Причем аргументы против, зачастую, из категории ниасилили «не нравится», «сильно сложно» и т.д.

Бывают и вполне объективные аргументы. Но я сам за исключения, если что. И этот момент один из немногих, который раздражает в расте.

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

Вариадиков в виде шаблонов нет. Но сейчас и специализации нет. Будет со временем, вероятно, ну а пока есть макросы.

Насчёт использования шаблонов с наследованием можешь мысль раскрыть?

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

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

Подожди-ка. Мы ведь с чего начали? С того, что «растаманы на лоре говорят...». Так вот чтобы говорить ничего из этого не требуется.

А так проекты имеются, пишут люди на расте, пусть и, в основном, «для себя». Ну и стартапы какие-то имеются. А чего ты хотел? Чтобы Линус заявил, что переписывает ядро на расте переписывает?

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

Ну и хреново. Причем аргументы против, зачастую, из категории ниасилили «не нравится», «сильно сложно» и т.д.

Интересно, что некий господин Александреску, ранее нещадно критиковавший исключения в C++, недавно засветился с таким вот спичем: http://www.youtube.com/watch?v=WjTrfoiB0MQ о том, как с их помощью писать идиоматично, декларативно и надежно.

Документ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4152.pdf я так понял, с его же подачи появился.

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

Ну а всё-таки? let, указания типа после имени - ты про эти мелочи или что-то более интересное?

fn, let, апострофы в обозначениях типов... Мне это все OCaml напоминает.

Бывают и вполне объективные аргументы.

В том-то и дело, что очень редко. И это связано с таким контролем ресурсов, что там даже динамической памятью не пользуются.

Насчёт использования шаблонов с наследованием можешь мысль раскрыть?

А что тут раскрывать: часто используется наследование от шаблонного параметра. Или же от шаблонного класса. Вот, кстати, свежий пример: немного наркоманство, но чего только не приходится делать временами :)

template <class... F>
struct overload_set : F... 
{
  overload_set(F... f) : F(f)... {}  
};
  
template <class... F>
auto overload(F... f) 
{
  return overload_set<F...>(f...);   
}

Мы ведь с чего начали? С того, что «растаманы на лоре говорят...».

Так и я о том же :) Разговоров много, толку мало.

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

моё исходное суждение выглядело так: «Языку уже пять лет, а на нем до сих пор не создано ничего более-менее полезного

Языку меньше полугода, если считать с релиза 1.0, и меньше 4-х лет, если считать с релиза 0.1.

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

А чего ты хотел? Чтобы Линус заявил, что переписывает ядро на расте переписывает?

Вообще-то, я бы хотел невозможного: чтобы в каждую тему про C++ не тянули сравнение/противопоставление с Rust-ом.

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

Вот, а «если считать с релиза 1.0», то «языку меньше полугода», но мы всё равно ретрограды потому что до сих пор используем C++. У них на всё есть по контраргументу))

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

А в википедии написано, что задуман он даже раньше Go.

Давай ты просто скажешь, с какого момента отсчитываешь существование Rust.

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

С того, с которого на нем стали что-то писать. Компилятор например. То есть где-то с 2010-го года.

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

но мы всё равно ретрограды потому что до сих пор используем C++

Вряд ли я бы сам смог до сих пор использовать C++98/03. А ведь многие вынуждены продолжать сидеть на старых проектах и компиляторах. В таких условиях хочешь-не-хочешь, а об альтернативе задумаешься. Если же смотреть с позиций C++11/14, то попытки поиска альтернатив C++ в области C/Rust выглядят очень и очень дико.

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

Давай ты просто скажешь, с какого момента отсчитываешь существование Rust.

С того, с которого на нем стали что-то писать. Компилятор например. То есть где-то с 2010-го года.

Странно, потому что тот язык даже синтаксически не был современным Rust. Впрочем, дело твое.

P.S. как маленький пример:

fn identity_fold_pat_wild[ENV](&ENV e, &span sp, ann a) -> @pat {
    ret @respan(sp, ast.pat_wild(a));
}

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

Ну и что с того? В C++17 тоже вот уберут std::auto_ptr, спецификации исключений и ещё некоторые рудименты. А в первых выпусках C++ не было ни исключений, ни шаблонов, и язык был гораздо лучше совместим с C.

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

Ну и что с того?

Что с синтаксической и семантической несовместимсти? Не, всё нормально.

в первых выпусках C++ не было ни исключений, ни шаблонов

Тем не менее, тот код пойдет на современных компиляторах при минимальной доработке напильником или вообще без нее (собственно, я не припомню несовместимых изменений, кроме изменения семантики overload и присваивания this).

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Это разговор ни о чем. Изменения были внесены в процессе работы над тем же servo. Ну и где, спрашивается, servo, который всех удивил? Где хоть какой-то проект сложнее hello world, на котором видны преимущества решений, из-за которых стоило городить целый новый язык и которые никак нельзя добавить в существующие?

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

Это разговор ни о чем.

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

Ну и где

Где хоть какой-то

Я мог бы спросить, где были такие проекты на Си++ в 1986, но не стану из жалости.

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

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

Не у меня «своеобразное понимаешь», а авторы языка считают что это один язык.

Я мог бы спросить, где были такие проекты на Си++ в 1986, но не стану из жалости.

Понятно, что по существу вопроса тебе ответить нечего.

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

Такое впечатление, что выпустив поддержку модулей в VS2015Upd-1, MS хочет свое творение сделать де-факто стандартом, после чего пропихнуть это в стандарт языка.

Ну так кто виноват, что модули не появились в стандарте ДО MS? Языку 30 лет, а до сих пор вместо модульности костыли из говна и палок. Да даже в турбопаскале конца 80-х, от которого у некоторых местных трясучка, уже была нормальная модульность как элемент языка, а не инклуды со стражами компиляции и набором весёлых ошибок. При том, что скажем, по проработанности средств ООП паскалю до крестов сильно далеко.

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

Ну так кто виноват, что модули не появились в стандарте ДО MS?

Проблема в том, что сейчас есть два конкурирующих и несовместимых между собой предложения по реализации модулей. Одно от MS, второе от Google. Тут бы коммитету сказать свое слово, чтобы никто не делал лишней работы. А так MS в VC++ сделает свое, а Google проспонсирует clang на другое. Разбирайся потом с этим зоопарком.

Кстати говоря, как раз из-за большого количества несвязанных с друг другом вендоров средств разработки на C++, язык так неспешно развивался все время.

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