The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Утверждён стандарт C++17

07.09.2017 23:47

Комитет ISO по стандартизации языка C++ единогласно утвердил спецификацию C++1z в качестве международного стандарта "C++17". Представленные в спецификации возможности уже полностью поддерживаются в компиляторах GCC и Clang, а также частично реализованы в Intel C++ и Visual C++. Поддерживающие C++17 стандартные библиотеки реализованы в рамках проекта Boost.

В следующие два месяца утверждённая спецификация будет находиться на стадии подготовки документа к публикации, на которой будет проведена работа по редакторской правке орфографических ошибок и опечаток. В начале ноября результирующий вариант документа будет направлен в ISO для публикации под формальным именем ISO/IEC 14882:2017. Тем временем, комитет уже начал работу над следующим стандартом C++20 (C++2a) и рассмотрел на последнем совещании возможные новшества.

Основные особенности C++17 (примеры кода):

  • Возможность инициализации переменных внутри выражений if и switch;
  • Возможность использования кодировки UTF-8 в символьных литералах;
  • Шестнадцатеричные литералы с плавающей запятой;
  • Указание текстового сообщения в static_assert теперь опционально;
  • Удалена поддержка триграфов;
  • Возможность указания typename (как альтернативы классам) в параметрах вложенного шаблона;
  • Новые правила вывода типа "auto" из списка инициализации (braced-init-list)
  • Возможность упрощённого определения вложенных параметров пространств имён: "namespace X::Y {...}" вместо "namespace X { namespace Y {...}}";
  • Возможность указания атрибутов для пространств имён и перечислений;
  • Новые стандартные атрибуты [[fallthrough]], [[maybe_unused]] и [[nodiscard]];
  • Проверка на неизменность (константность) для всех нетипизированных аргументов шаблонов;
  • Сворачивание выражений для вариативных шаблонов;
  • Раскрытие выражений "if" на стадии компиляции, если заданное внутри условие является константой;
  • Структурированные привязки, например, "auto [a, b] = getTwoReturnValues()";
  • Автоматическое определение типов конструктора шаблонов (например, теперь можно указывать std::pair(5.0, false), явно не задавая типы "double, bool");
  • Inline-переменные, которые можно определять в заголовочных файлах;
  • Добавлена библиотека для работы с ФС, основанная на boost::filesystem;
  • Из библиотеки TS I перенесены std::string_view, std::optional и std::any;
  • Добавлен std::uncaught_exceptions в качестве замены std::uncaught_exception;
  • Новые функции вставки try_emplace и insert_or_assign для std::map и std::unordered_map;
  • Унифицирован доступ к контейнерам std::size, std::empty и std::data;
  • Определены непрерывные итераторы (contiguous iterators);
  • Удалены устаревшие типы и функции, в том числе std::auto_ptr и std::random_shuffle;
  • Представлены параллельно выполняемые варианты алгоритмов STL;
  • Добавлены дополнительные математические функции, включая эллиптические интегралы и функции Бесселя;
  • Представлены std::variant и std::byte;
  • Новые свойства логического оператора: std::conjunction, std::disjunction и std::negation.


  1. Главная ссылка к новости (https://herbsutter.com/2017/09...)
  2. OpenNews: Утверждён стандарт ECMAScript 8 (2017)
  3. OpenNews: HTML 5.1 получил статус рекомендованного стандарта
  4. OpenNews: Объявлено о готовности международного стандарта C++14
  5. OpenNews: Спецификация C++0X принята в качестве международного стандарта C++11
  6. OpenNews: Опубликован новый международный стандарт для языка Си (C1X/C11)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/47153-cpp
Ключевые слова: cpp, gcc, clang
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (138) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Crazy Alex (ok), 00:31, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    Ну, ожидаемо, конечно, но всё равно радует.
     
     
  • 2.36, Аноним (-), 07:20, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +12 +/
    Радует все кроме этого:
    "Добавлены дополнительные математические функции, включая эллиптические интегралы и функции Бесселя"

    Зачем это было пихать в стандарт? Сторонних библиотек для этого разве не достаточно?
    Какое отношение это вообще имеет к C++?

     
     
  • 3.38, Rihard (?), 07:49, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –6 +/
    Геймдев? Сейчас это чуть ли не основная сфера использования cpp.
     
  • 3.52, nobody (??), 09:31, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Научные вычисления. Чем Вам оно мешает?
     
     
  • 4.58, Аноним (-), 10:26, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +10 +/
    Геймдев, научные вычисления - конечно не мешает!

    Давайте уж тогда сразу в стандарт С++ засунем любые научные теории, в реализациях которых C++ когда-либо засветился. Алгоритмы анализа цепочек ДНК, например, наверняка С++ там активно используется.

    И вообще, библиотеки не станут нужны, если в стандарте будет все, что "не мешает".

     
     
  • 5.61, nobody (??), 10:56, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Что за юношеский максимализм? Или всё или ничего? Математические функции - вполне себе фундаментальная вешь
     
     
  • 6.65, skybon (ok), 11:18, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Nope.
     
  • 6.72, Аноним (-), 11:38, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Что за юношеский максимализм? Или всё или ничего? Математические функции - вполне себе фундаментальная вешь

    Какие именно математические функции? Их так же много, как и программного кода.

    Не было сказано против математических функций вообще. И ни разу "все или ничего".
    Про конкретные

    В наше время фундаментальной математикой как раз и являются лямбды, комбинаторы, категории. Что как раз и реализовано в стандарте С++ фактически уже на уровне даже синтаксиса, не только библиотечном.

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

     
  • 6.140, Димон (??), 21:11, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Что за юношеский максимализм? Или всё или ничего? Математические функции - вполне
    > себе фундаментальная вешь

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

     
  • 5.73, Lain_13 (ok), 11:48, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Мне кажется вы не понимаете что означает добавление в стандарт С++ каких-либо новых функций. Это совершенно не означает, что они будут по-умолчанию вам доступны без подключения дополнительных библиотек. Просто компиляторы должны будут предоставлять вам стандартные библиотеки с реализациями этих функций. Так, например, для использования sin вам понадобится подключить стандартную библиотеку math. То же самое верно и для этих новых функций. В стандарт же попадает то, что повсеместно используется. Если алгоритмы анализа цепочек ДНК будут повсеместно использоваться, то их тоже можно будет стандартизировать и предоставлять в форме стандартной библиотеки, а вот подключать эту библиотеку к своему коду или нет решать уже вам.
     
     
  • 6.77, Аноним (-), 12:06, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Это понятно, что вы один из тех, кто уверен, что в стандарты языков нужно включать библиотеки на основании статистики использования. А не по назначению, идеологии и области применения самого языка. Подчеркиваю, области применения языка, а не библиотек на нем написанных.

    Вашим первым языком случайно был не PHP?

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

     
     
  • 7.78, Аноним (-), 12:15, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Спор ни о чём.

    Есть разные стратегии развития ЯП.

    Можно включать в ЯП все новинки, отказываясь от неудачных в будущих версиях. В этом случае теряется обратная совместимость.

    Можно включать в ЯП только то, что стало де-факто стандартом в программировании и "отлажено" на других ЯП. В этом случае ЯП всегда в роли отстающего.

    Можно вводить функционал сначала как бета-версию стандарта (типа -moz- и -web-kit-). Но велик риск, что временное с годами станет постоянным.

    Можно не включать в ЯП функционал, который можно запрограммировать средствами самого ЯП и т.о. вынести во внешнюю библиотеку.

    Поэтому, может, лучше вместо обсуждения деталей обсудите свой взгляд на стратегию развития?

     
     
  • 8.82, Аноним (-), 12:32, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Если вас раздражает чужое мнение, и вы не любите когда вам возражают, это никак ... большой текст свёрнут, показать
     
     
  • 9.83, Аноним (-), 12:37, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Стратегию определяю члены комитета Отсюда импотенция развития С в последние г... текст свёрнут, показать
     
     
  • 10.86, Аноним (-), 12:55, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Здесь согласен, всякие там комитеты - большая опасность для развития Только к... большой текст свёрнут, показать
     
  • 6.119, Анонимный Алкоголик (??), 18:53, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > Мне кажется вы не понимаете что означает добавление в стандарт С++ каких-либо
    > новых функций.

    деби л как он есть.

     
  • 6.141, Димон (??), 21:13, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Драйвер базы Oracle 10g тоже нужен в стандартной библиотеке C 20 ... большой текст свёрнут, показать
     
  • 5.134, Аноним (-), 14:22, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще в роадмапе C++ есть UI и Networking
     
  • 5.157, Аноним (-), 18:58, 14/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Давайте!
     
  • 3.85, nuzhny (?), 12:43, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Эллиптические интегралы и функции Бесселя в мат. моделировании физических процессов, они в этой области не менее важны, чем синусы и косинусы. Они и правда базовые, но не для школьников, конечно.
    Тут надо сказать, что тот же Майкрософт уже лет 15 назад точно ввёл функции Бесселя в свою стандартную библиотеку для С/С++. Почему? Во многом потому, что С++ изначально задумывался как язык для математического моделирования, потому что на Фортране много делать было не удобно. Введение этих функций в стандарт - это уже давно назревшая необходимость.
     
     
  • 4.89, анон (?), 13:13, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    https://stackoverflow.com/search?q=bessel+c%2B%2B

    112 запросов за всё время существования стаковерфлоу - "давно назревшая необходимость"?
    давайте без "боги праграмиравания не четают стаковерфлоу", где это вдруг давно назрело?

     
     
  • 5.100, Аноним (-), 14:51, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    >давайте без "боги праграмиравания не четают стаковерфлоу"

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

     
     
  • 6.107, Vkni (ok), 16:56, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Чтобы типичного для числодробильных инженеров уж совершенно ахтунга было поменьше.
     
  • 6.122, _ (??), 23:35, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что они обычно ... как бы это сказать ... ну не программисты они!

    По томику - я тоже считаю это клупостью. Или давайте rot13() в стандарт! А чо - необходимость давно назрела :)

     
  • 4.90, Аноним (-), 13:14, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не менее важны для кого и для чего А, ну да, вы же написали - в мат моделиров... большой текст свёрнут, показать
     
     
  • 5.127, pavlinux (ok), 00:45, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Базовые для какой области?

    Ля... ну напиши быструю сортировку на своём ковносайте с использованием ф-ции Бесселя.
    И оно будет в 100500 раз быстрее.

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

     
     
  • 6.133, Аноним (-), 10:28, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    То есть вы утверждаете, что они "базовые" для области "напиши быструю сортировку на своём ковносайте", и "оно будет в 100500 раз быстрее".

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

    А теперь перечитайте дискуссию сначала, и попытайтесь объяснить, за что (или против чего) именно вы выступаете.

     

  • 1.2, kachsheev (ok), 00:43, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    По некоторым пунктам не хватает примеров кода.

    А так проздравляю всех плюсовиков.

     
     
  • 2.16, Шурик (?), 02:21, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    По каким?
     
  • 2.23, hacenator (?), 03:22, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    https://github.com/AnthonyCalandra/modern-cpp-features?utm_content=buffer07730
     

  • 1.4, Аноним (-), 01:03, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –6 +/
    В студии std::byte конфликтует с винапишным байтом, для тех, кто "using namespace std" это может быть проблемой
     
     
  • 2.12, all_glory_to_the_hypnotoad (ok), 02:09, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +8 +/
    студия для олигофренов, она то c++14 всё ещё нормально не умеет
     
     
  • 3.19, Аноним (-), 02:51, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Что еще смешнее, там даже C99 до сих пор не полный. EpicFail Studio.
     
  • 3.34, iPony (?), 06:33, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Бось, что большинство c++ разработчиков по твоему мнению будут умственно отсталыми, ибо они еще не перешли на c++14/c++17
    Я вот как раз занимаюсь умственно отсталой деятельностью - пишу проект на c++11.
    Правда в Netbeans, и вот его парсер подсветки даже простой c++11 часто не может :(
     
     
  • 4.43, Аноним (-), 09:02, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Qt creator и Kdevelop нормально работают с с++11 с++14. Там используется для парсинга clang.
     
     
  • 5.59, CHIM (ok), 10:42, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ну мне например NetBeans удобнее показался в работе
     
     
  • 6.130, Вареник (?), 05:40, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    NetBeans классный, но у него уклон в веб-стек. Все кроме Java/HTML/CSS/js уже много лет не развивается.

    Формально языки поддерживаются, плагины остались, но развития нет и скорее всего не будет.
    Котлин и не собираются добавлять, хотя бы поверхностно, комиллировать гибридные проекты.
    Scala тоже мимо.

    А ведь это Java World - основной конек Оракла...

    Поддержку Python похоронили годы назад.

    С++ просто оставили как есть.

     
     
  • 7.160, anonymous (??), 08:02, 01/10/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Плагин для Kotlin  в Netbeans 8.2 есть. Как раз недавно завезли.
     
  • 5.68, Аноним (-), 11:29, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    QtCreator и без Шланга нормально синтксис C++11, C++14 подсвечивает.
     
  • 4.44, Аноним (-), 09:06, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не путай поддержку стандартов компилятором и реальное использование фич стандарта в коде. Частенько возникает потребность собрать новый код умеренно старым компилятором, а выясняется, что он стандартов пятилетней давности не знает. В инструментарии все новшества должны появляться как можно скорее, а вот программистам можно и обождать тащить их в свои проекты.
     
  • 4.135, Аноним (-), 15:41, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Бось, что большинство c++ разработчиков

    Из твоего круга общения? И только те, которые на венде?

     
     
  • 5.148, iPony (?), 07:30, 11/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Нет не из моего.
    Ничего не поделаешь - ынтерапайз во все дыры.
    А студенты хелло вордщики могут и на драфтовых стандартах писать - есть такое.
     
  • 3.66, Филимон Задумчивый (?), 11:20, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Студия глючновата и медленна, не до конца поддерживает стандарты, но с решарпером для C++ и с PVS Studio показывает что не так с кодом задолго до компиляции. Это время на разработку на порядок сокращает. Если вы знаете что-либо подобное ещё, то поделитесь. У неё нет сейчас альтернатив.
     
     
  • 4.131, Вареник (?), 05:44, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Студия глючновата и медленна, не до конца поддерживает стандарты, но с решарпером
    > для C++ и с PVS Studio показывает что не так с
    > кодом задолго до компиляции. Это время на разработку на порядок сокращает.
    > Если вы знаете что-либо подобное ещё, то поделитесь. У неё нет
    > сейчас альтернатив.

    Какие проблемы прогнать код и через VS-PVC тоже?
    Это же не значит что надо разрабатывать под VS и терпеть ее.

    Можно почитать статьи PVC, с какими проблемами они стокнулись, упершись в архитектурные ограничения VS и какие костыли изобретали, чтобы не тормозило, вынести в другой процесс (памяти под VS не выделить) и т.д.

     
  • 2.46, bOOster (ok), 09:14, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    вы с виндовыми примочками - идите быстро, и подальше… microsoft всегда впереди паровоза бежала с очередным га%ном… А потом изобретала костыли совместимости….
     
  • 2.49, anonymous (??), 09:20, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    >>В студии std::byte конфликтует с винапишным байтом, для тех, кто "using namespace std" это может быть проблемой

    typedef unsigned char BYTE;

    "BYTE" != "byte"

     
  • 2.53, nobody (??), 09:33, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Каким образом, если в WinAPI BYTE (верхним регистром)?
     
     
  • 3.136, Аноним (-), 15:43, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Каким образом, если в WinAPI BYTE (верхним регистром)?

    Очень удобно читать такой код. /s

     

  • 1.7, Аноним (-), 01:11, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –9 +/
    Что только не придумывают, лишь бы на Rust не переходить.
     
     
  • 2.20, Аноним (-), 02:52, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –10 +/
    > Что только не придумывают, лишь бы на Rust не переходить.

    ЯП с встроенным менеджером пакетов - это для хипстоватых поклонников карго-культа.

     
     
  • 3.25, Аноним (-), 03:33, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    >> Что только не придумывают, лишь бы на Rust не переходить.
    > ЯП с встроенным менеджером пакетов
    > ЯП с встроенным

    Что только за ценное мнение не заимеют, лишь бы в теме ни зуб ногой.

     
  • 3.152, Аноним (-), 18:31, 11/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вообще Cargo в rust хоть и хорош, но отдельным предметом культа не является.
     
  • 2.47, bOOster (ok), 09:15, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > Что только не придумывают, лишь бы на Rust не переходить.

    Очередной ремесленник не читавший Кнута? :)

     
  • 2.50, Аноним (-), 09:20, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    а старый код кто будет переписывать? зачем было придумывать новый синтаксис?
     
  • 2.71, Аноним (-), 11:34, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    В Rust какая-то уродливая объектность. Может, конечно, она и в C++ не идеал, но в Rust хуже.
     

  • 1.8, Фёдор (?), 01:13, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    За что они так с концептами?
     
     
  • 2.54, nobody (??), 09:34, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Уже включили в черновик С++2a. Ждём-с через три года...
     

  • 1.9, saahriktu (ok), 01:16, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    Слишком модно и молодёжно. Чистый Си наше всё. Тем более, что продолжает развиваться как минимум один компилятор Си на чистом Си - PCC (Portable C Compiler). Это продолжение развития того самого компилятора Си, который в середине 70-х был написан Стивеном С. Джонсоном из Bell Labs, используя наработки Алана Снидера. В начале 80-х практически каждый компилятор был основан на PCC, и только к середине 80-х появились независимые компиляторы. И вот, PCC продолжает жить и развиваться. Исходники и документацию можно качать тут: ftp://pcc.ludd.ltu.se/pub
     
     
  • 2.10, volodja (?), 01:53, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +4 +/
    да уж за такое время этот компилятор должен генерить код лучше чистого асма
     
  • 2.11, Заморашка (?), 02:06, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Поддержу. Пишу сейчас на Си+Python. Вот когда стал использовать Питон, ощутил всю ущербность плюсов, и лаконичную чистоту Си. Для Си нужно знасть только арифметику указателей и основы языка - всё остальное в твоих руах, и не надо копать в недра всяких там глубокомысленных терминов, без знания которых плюсы бесполезны. А оно надо, если то же самое можно сделать на Си, не задавая никому никаких вопросов. А для гуев и веба Питон - тоже чисты и простой - всегда в помощь.
     
     
  • 3.14, all_glory_to_the_hypnotoad (ok), 02:12, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +15 +/
    > Для Си нужно знасть только арифметику указателей и основы языка

    О какой сказочный дурачок. Тебя ещё ждёт много удивительных открытий.

     
  • 3.15, Аноним (-), 02:13, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    покажи ка, что ты там пишешь
     
  • 3.17, Kroz (ok), 02:30, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Я Си уважаю, честно.

    Но однажды, написав несложную программку (500-1000 строк), я решил, что, коль почти все функции могут вернуть ошибку, то неплохо бы ошибки таких функций корректно обрабатывать (логирование, корректный выход из вызывающей функции с ошибочным кодом возврата и т. п.). Даже если вероятность ошибки мала. Ну то есть для всех функций, даже для printf...

    После этого я предпочитаю C++, а Си использую в разве что когда работаю с чужими исходниками.

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

     
     
  • 4.18, saahriktu (ok), 02:50, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Чрезмерное отслеживание ошибок далеко не всегда нужно. Важно чтобы сохранялась нужная логика программы. А не всякая ошибка на неё влияет. Например, printf() возвращает число напечатанных символов, и в случае ошибки вывода оно отрицательное. А откуда ошибка вывода? Ну, допустим, отвалился терминал. Ну и что? Если программа не просто ведёт диалог с юзером, а выполняет какую-то работу в фоне, то она спокойно может продолжать делать то, что нужно.

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

     
     
  • 5.30, Sw00p aka Jerom (?), 04:30, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >>Чрезмерное отслеживание ошибок далеко не всегда нужно.

    простите, не соглашусь - на ошибках учатся! - Просто автор выше хотел сказать, что нет в языке "удобной" (однозначной) так называемой "обработки ошибок" (практики, методологии), а как обычно принято ? из вашего утверждения следует - не нужны лишние проверки, свалится ПО, берите корку и с лупой под отладчиком. Не ленитесь даже "нормально" работающую программу под отладчиком пропускать не говорю уже о профайлере.

    >>Важно чтобы сохранялась нужная логика программы.

    х*як, х*як и в продакшен )) стол перевернулся


     
     
  • 6.55, saahriktu (ok), 09:51, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Дебажить надо в первую очередь логику, а не вызовы библиотечных функций Ошибка ... большой текст свёрнут, показать
     
     
  • 7.88, Sw00p aka Jerom (?), 13:07, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Не можно, а нужно Как по вашему, можно ли писать код для адронного коллайдера и... большой текст свёрнут, показать
     
     
  • 8.94, saahriktu (ok), 13:37, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Кто говорил про полное отсутствие проверок Я говорю о том, что аудитории софта ... большой текст свёрнут, показать
     
     
  • 9.109, angra (ok), 17:44, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Подозреваю, что преподаватель приводил этот пример совсем не в качестве положите... большой текст свёрнут, показать
     
     
  • 10.114, Sw00p aka Jerom (?), 18:06, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    ну а вся причина в чём в том, что в среде Си программистов оч мало бест практи... большой текст свёрнут, показать
     
  • 10.118, saahriktu (ok), 18:50, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    нет, преподавателю непонравился уровень сложности моей программы, и он начал гов... большой текст свёрнут, показать
     
     
  • 11.144, Ordu (ok), 05:28, 10/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Эмм Правильно ли я понял препод посмотрел на переусложнённую программу, и на... большой текст свёрнут, показать
     
  • 5.33, Аноним (-), 06:27, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Чрезмерное отслеживание ошибок далеко не всегда нужно
    > Все символы UTF-8 далеко не всегда нужны, можно и КОИ8-Р
    > Физика далеко не всегда нужна, можно и ОБЖ ограничиться
    > Крыша над головой далеко не всегда нужна, можно и на голой земле спать
     
     
  • 6.51, EHLO (?), 09:24, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Крыша над головой далеко не всегда нужна, можно и на голой земле спать

    Ты что?! Крыша всегда нужна. Выходя из дома, обязательно возьми с собой крышу.

     
  • 5.113, Анонимный Алкоголик (??), 18:04, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > А выполнение одной и той же
    > работы в сотнях мест исходника можно сравнить с написанией сотен операторов
    > вместо использования for.

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

     
  • 5.149, Аноним (-), 11:11, 11/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А потом ругают си , что память течет и дыры
     
  • 4.45, Аноним (-), 09:09, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Но однажды, написав несложную программку (500-1000 строк), я решил, что, коль почти
    > все функции могут вернуть ошибку, то неплохо бы ошибки таких функций
    > корректно обрабатывать

    Это называется на "написал" а "слепил по-быстрому прототип".

     
  • 4.63, pripolz (?), 11:09, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Обработка ошибок нужна всегда.

    > неплохо бы ошибки таких функций корректно обрабатывать (логирование, корректный выход из вызывающей функции с ошибочным кодом возврата и т. п.).

    В макрос обернул, и всё. CHK( my_func() == ok , MY_FUNK_FAILED )
    Один макрос на все проекты.
    С++ ники такие тоже используют кстати, просто вместо goto error внутри пишут throw.

    -----------

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

     
  • 3.21, volodja (?), 02:54, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    пока другие изобретают новый язык в с просто апдейтят стандарт и все снова пиш... большой текст свёрнут, показать
     
     
  • 4.29, Онаним (?), 03:37, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    А нормальный полноценный юникодный строковый тип в С/С++ уже изобрели?
     
     
  • 5.32, volodja (?), 05:26, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > А нормальный полноценный юникодный строковый тип в С/С++ уже изобрели?

    )) да вроде давно уже std::string, std::wstring

     
     
  • 6.56, Andrey Mitrofanov (?), 10:00, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    >> А нормальный полноценный юникодный строковый тип
    > )) да вроде давно уже std::string, std::wstring

    Это же _два_ типа??

     
     
  • 7.81, Аноним (-), 12:21, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    В С++ никак не определятся с тем, что они хотят слепить.

    С одной стороны наследуют идею Си что это надстройка над асмом. С другой - пытаются внедрить функционал интерпритаторов.

    Для первых характерно явное управление типами и размерами переменных в памяти. Для вторых - свобода творчества вроде отрицательных индексов в массивах и обращения по индексу больше, чем размер массива без ошибки (массив расширяется или зацикливается).

     
     
  • 8.96, Аноним (-), 14:10, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    А вы, конечно, давно определись с тем что вы лепите см ниже В соседней нов... большой текст свёрнут, показать
     
     
  • 9.98, Аноним (-), 14:40, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Последняя фраза единственная на которую стоит ответить, потому что она объясняет... текст свёрнут, показать
     
     
  • 10.132, Аноним (-), 10:10, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А теперь перечитайте диалог с начала, и сами попытайтесь понять, что вы хотели с... текст свёрнут, показать
     
  • 10.142, Димон (??), 21:50, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален А на си и плюсах это целое длиной хз сколько байт где б... большой текст свёрнут, показать
     
  • 10.143, Аноним (-), 23:22, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Что-то не припомню я ни одного ЯП, в котором можно было работать с подобными тип... текст свёрнут, показать
     
  • 10.154, Анонйм (?), 06:27, 13/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Про строки - это да, но целые и дробные определённых длин а ещё точные дробные ... текст свёрнут, показать
     
  • 8.129, volodja (?), 05:26, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    я думаю исходят из простых практических соображений поэтому язык мультипарадигме... большой текст свёрнут, показать
     
     
  • 9.145, Аноним (-), 07:07, 10/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Посмотри путь ЯП - асм - язык Си - ускоренное программирование с простым синтак... большой текст свёрнут, показать
     
     
  • 10.146, volodja (?), 15:33, 10/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    gt оверквотинг удален посмотри современный с код удивишься, там управлен... большой текст свёрнут, показать
     
  • 3.48, bOOster (ok), 09:17, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –4 +/
    > Поддержу. Пишу сейчас на Си+Python. Вот когда стал использовать Питон, ощутил всю
    > ущербность плюсов, и лаконичную чистоту Си. Для Си нужно знасть только
    > арифметику указателей и основы языка - всё остальное в твоих руах,
    > и не надо копать в недра всяких там глубокомысленных терминов, без
    > знания которых плюсы бесполезны. А оно надо, если то же самое
    > можно сделать на Си, не задавая никому никаких вопросов. А для
    > гуев и веба Питон - тоже чисты и простой - всегда
    > в помощь.

    Ну шаблоны "узколобым" даются весьма с трудом :)

     
     
  • 4.126, pripolz (?), 00:37, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > Ну шаблоны "узколобым" даются весьма с трудом :)

    А ты сам-то, достаточно подробно знаешь "шаблоны" ?

     
     
  • 5.137, Аноним (-), 15:51, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Про шаблоны достаточно знает только Страуструп. А все остальные вообще не знают C++.
     
     
  • 6.151, bOOster (ok), 16:24, 11/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Александреску неплохо пишет про шаблоны.

    В реализациях языка Страуструпа шаблоны были весьма ущербными.

     
  • 6.155, Антонин (?), 08:12, 13/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Страус труп в гробу переворачивается со всего этого
     
  • 2.22, Какаянахренразница (ok), 03:01, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    > И вот, PCC продолжает жить и развиваться

    И сколько, говоришь, тестов из GCC TestSuite он проваливает?

     
     
  • 3.27, Аноним (-), 03:36, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >> И вот, PCC продолжает жить и развиваться
    > И на сколько, говоришь, генерированный код медленнее питона?

    Fix.

     
  • 2.41, A.Stahl (ok), 08:38, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >Слишком модно и молодёжно.

    На С++17 можно писать в стиле С89 и тебе ничего за это не будет. Язык никого ни к чему не принуждает.

     
     
  • 3.64, pripolz (?), 11:18, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    >>Слишком модно и молодёжно.
    > На С++17 можно писать в стиле С89 и тебе ничего за это
    > не будет. Язык никого ни к чему не принуждает.

    1) гугли ключевое слово restrict , есть в C99 , нет вообще в СТАНДАРТЕ С++
    2) попробуй не ловить эксепшены в С++
    3) попробуй ловить эксепшены без деструкторов ( = без классов)
    4) самое болезненное - нету инициализации структур и юнионов вида
    struct abc {int a, b, c} = {.b = 99};

     
     
  • 4.69, A.Stahl (ok), 11:31, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    А разве хоть что-то из этого есть в С89?
    Я говорю, что наш дорогой любитель КОИ-8 может писать в стиле классического Си и плюсовый компилятор возражать не будет.
     
     
  • 5.74, iPony (?), 11:50, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Есть конструкции из c89, которые не переварятся в c++
     
     
  • 6.76, A.Stahl (ok), 11:58, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Поэтому я написал "в стиле", а не "согласно стандарту С89".
     
  • 4.97, Аноним (-), 14:37, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > попробуй не ловить эксепшены в С++

    -fno-exceptions в руки и вперёд.

     
  • 4.123, KroTozeR (ok), 23:37, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > самое болезненное - нету инициализации структур и юнионов вида
    > struct abc {int a, b, c} = {.b = 99};

    struct abc {int a, b, c; abc() {b = 99}};
    Учи мат.часть.

     
     
  • 5.125, pripolz (?), 00:33, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Учи мат.часть.

    я конечно там имя инстанса структуры пропустил, надо было так.

    struct abc {int a, b, c} a1 = {.b = 99};

    а ты вспорол чушь не по теме.

    struct
    abc {int a,b,c}
    a1 = {.c = 99},
    a2 = {.b = 3};

     
  • 3.79, Джо (?), 12:18, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    auto_ptr не заюзаешь
     

     ....большая нить свёрнута, показать (50)

  • 1.35, iPony (?), 06:36, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    А gcc уже научился Emoji в именах переменных?
    Последний раз как пробовал, в clang работало, а gcc - нет.
    И по стандарту с этим что?
     
     
  • 2.57, FUser (?), 10:14, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А gcc уже научился Emoji в именах переменных?

    Ну да, куда же без этого, как жили тораньше без Emoji.

     

  • 1.42, Аноним (-), 08:58, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    все последние годы добавляют только свистелки для ленивых.
    код со всей этой ботвой только все больше замусоривается.
     
  • 1.60, Аноним (-), 10:48, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Депрекейтнутый язык без нормального юникода и поддержки платформы.
     
     
  • 2.62, Andrey Mitrofanov (?), 11:07, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > и поддержки платформы.

    ВеHдузятники должны. Страдай.

     
     
  • 3.70, Аноним (-), 11:33, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    macOS & *BSD
     
     
  • 4.102, Аномномномнимус (?), 15:21, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Просто у кого-то руки из ЖЖ, всё в BSD ок с юникодами и прочим
     
     
  • 5.103, Аноним (-), 15:23, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Golang и Rust действительно хорош!
     
  • 2.138, Аноним (-), 15:54, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    > без нормального юникода

    О каком юникоде вы все говорите? Сколько не пользуюсь C++ ни разу проблем с кодировкой не было.

     
     
  • 3.139, Аноним (-), 18:27, 09/09/2017 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Не пользуйся и дальше. Кто-то мешает?
     

  • 1.67, pripolz (?), 11:26, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > и функции Бесселя

    Обмазался. Навека. Почему именно Бесселя?

     
  • 1.75, Аноним (-), 11:53, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Не вижу особого повода для радости. То, что нужно, не реализовали, вообще ничего. Над вот этим вот списком работа велась почти 4 года. Можно поздравить плюсовиков с очередным проявлением бездарности комитета.
     
     
  • 2.93, Аноним (-), 13:32, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Так а что нужно-то? Приведи примеры для тех, кто не в теме, плз.
     
     
  • 3.111, Аноним (-), 18:00, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Самое банальное - модули. Эта тема мусолится ни один год. От C++17 ожидалось очень многое, вышло одно разочарование. Вот, можете почитать:
    https://habrahabr.ru/company/infopulse/blog/279927/
    https://stdcpp.ru/proposals
     

  • 1.87, Lolwat (?), 13:04, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Модно и молодёжно. Я сам предпочитаю Си, но развитее плюсов тоже радует.
     
     
  • 2.92, iZEN (ok), 13:24, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Да, да, "алгоритмы + структуры данных = программы" - наше всё.
     
  • 2.159, Алексей (??), 13:34, 24/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    лишь бы что сказать, c++ отнюдь не молодёжный, молодежным я бы назвал Python
     

  • 1.91, iZEN (ok), 13:21, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    > Добавлены дополнительные математические функции, включая эллиптические интегралы и функции Бесселя

    Это чё же, ещё один шаг к искусственному интеллекту в старейшем языке?

     
     
  • 2.95, Andrey Mitrofanov (?), 13:38, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +5 +/
    >> Добавлены дополнительные математические функции, включая эллиптические интегралы и функции Бесселя
    > Это чё же, ещё один шаг к искусственному интеллекту в старейшем языке?

    изя, каклькулятор -- не ИИ.

     
  • 2.99, Я. Р. Ош (?), 14:47, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    На чём там, говоришь, жабка написана?
     

  • 1.101, Аноним (-), 15:08, 08/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Модули где?
     
     
  • 2.105, Led (ok), 15:39, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > Модули где?

    В Турбо-паскале.

     
  • 2.108, Аноним (-), 17:44, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    У Сиплюсплюсников вместо модулей шаблоны используются!
     
     
  • 3.110, Аноним (-), 17:57, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Каким боком шаблоны заменили модули? И зачем уже много лет пытаются протянуть в стандарт модули если в с++ уже есть шаблоны?
     
     
  • 4.115, Аноним (-), 18:07, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Чем модули отличаются от либ со статической/динамической линковкой?
     
     
  • 5.117, Аноним (-), 18:39, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Чем модули отличаются от либ со статической/динамической линковкой?

    Ничем.


     
  • 5.156, Аноним (-), 08:44, 13/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Чем грузины.
     
  • 4.116, Аноним (-), 18:39, 08/09/2017 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Каким боком шаблоны заменили модули?

    Никаким. просто шаблон -- это единица "простыни".

    >И зачем уже много лет пытаются протянуть в стандарт модули если в с++ уже есть шаблоны?

    Наверно дураки пытаются потому-что они не знают, что модуль -- это паскалевский термин. Библиотечная функция это Чисто_Си-шный термин.


     

  • 1.150, Аноним (-), 12:08, 11/09/2017 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Это лучше php или C++ как я понял это одно и тоже
     
     
  • 2.153, Анонйм (?), 02:12, 13/09/2017 [^] [^^] [^^^] [ответить]  
  • +/
    Да.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру