- PVSM.RU - https://www.pvsm.ru -

Итоги 2015-го года для C++

Итоги 2015-го года для C++ - 1Возможно, я скажу банальную вещь, но прошедший год был хорошим годом для С++!

Просто факты:

  • Вышла Visual Studio 2015 с отличной поддержкой возможностей С++14/17 и даже нескольких экспериментальных вещей
  • Вышел долгожданный GCC 5.0
  • С++ набрал серьёзную популярность. Где-то с июля — третье место в Tiobe Ranking
  • На конференции CppCon 2015 было сделано несколько важных анонсов

А теперь об этом и другом немного подробнее

Статус поддержки С++11

Компиляторы Clang, GCC и Intel Compiler имеют полную поддержку C++11.
В Visual Studio не хватает двух вещей: Expression SFINAE — N2634 [1] и C99 preprocessor — N1653 [2]

Статус поддержки С++14

Clang и GCC полностью поддерживают C++14. А в общем дела обстоят так:
Итоги 2015-го года для C++ - 2

Изменения с прошлого года отмечены звёздочкой (*)

В Visual Studio 2015 компилятор С++ стал заметно ближе к полному соответствию стандарту, были реализованы Sized deallocation, атрибут [[deprecated]] и поддержка одинарной кавычки в качестве разделителя разрядов в числах.

Хороший прогресс показал и компилятор Intel — они добавили поддержку обобщённых лямбда-функций, инициализацию членов класса (включая агрегатную), плюс всё те же аттрибут [[deprecated]] и поддержку одинарной кавычки в качестве разделителя разрядов в числах.

Статус поддержки С++17

Очевидно, большинство из нас ждёт этого грандиозного события, которое должно уже вот-вот произойти: стандартизации С++17! Да, компиляторам нужно ещё поработать над поддержкой С++11/14, но большинство фич уже реализованы или находятся на последних этапах реализации. Команды разработчиков всех основных компиляторов уже активно экспериментируют с некоторыми новыми фичами будущего стандарта С++17.

Но что включает в себя С++17?
Для полного понимания предмета лучше всего будет прочитать "Мысли по поводу С++17 [3]" от Страуструпа. Он выделил три основных приоритета:

  1. Улучшить поддержку масштабирования для больших проектов
  2. Добавить поддержку высокоуровневого параллелизма
  3. Сделать ядро языка проще, улучшить STL

Кроме того, С++17 запланирован быть мажорным релизом языка, т.е. кроме мелких апдейтов мы получим и нечто более крупное:

  • Модули — n4465 [4], n4466 [5]
  • Контракты — n4415 [6]
  • ASIO для работы с сетью — n4478 [7]
  • SIMD-векторизация — n4454 [8]
  • Улучшенные futures — n3857 [9], n3865 [10]
  • Корутины — N4402 [11], n4398 [12]
  • Транзакционная память — n4302 [13]
  • Параллельные алгоритмы — n4409 [14]
  • Концепты — n3701 [15], n4361 [16]
  • Концепты в стандартной библиотеке — n4263 [17]
  • Ranges — n4128 [18], n4382 [19]
  • Унифицированный синтаксис вызова — n4474 [20]
  • Оператор точка — n4477 [21]
  • array_view и string_view — n4480 [22]
  • Массивы в стеке — n4294 [23]
  • optional — n4480 — optional [24]
  • Свертка выражений — N4295 [25]
  • __has_include в условиях препроцессора — P0061R1 [26]
  • Файловая система — n4099 [27]
  • Множество более мелких изменений

Вот отличный обзор [28] всех потенциальных возможностей С++17.
Те фичи, которые не успеют войти в С++17, войдут в следующий стандарт С++20, который планируется как минорный. С++20 отполирует С++17, как С++14 отполировал С++11.

Core Guidelines

На конференции CppCon в ключевой презентации Бьёрн Страуструп сделал важный анонс: Core Guidelines!

Полная версия гайдлайнов находится на GitHub [29], вот выдержка из вступления:

«С++ Core Guidelines являются результатом совместной работы группы авторов под руководством Бьёрна Страуструпа, как, собственно, и сам язык С++. В разработку этих рекомендаций вложено много человеко-лет труда людей из множества организаций. Дизайн данных гайдлайнов предполагает их общее применение и широкое распространение, что однако, не исключает ваше право скопировать и изменить их под нужды вашей организации.

Целью разработки данных инструкций является помочь людям использовать современный С++ эффективно. Под „современным С++“ мы подразумеваем С++11 и С++14 (а вскоре и С++17). Мы поможем представить вам как ваш код, который вы начнёте писать сегодня, будет выглядеть через 5 (или 10) лет.»

Поскольку язык становится богаче, современнеее (но в то же время и проще) будет очень полезно иметь такой справочник. Некоторые хорошо известные правила заменены новыми подходами — например, RAII. Переход на них не так прост, особенно, если вы поддерживаете старую кодовую базу и хотите добавить что-нибудь современное в свой код. Core Guidelines разрабатываются коллективно, а значит, должны стать достаточно практичным инструментом.

Речь Бьёрна Страуструпа:

Дополнение к ней от Херба Саттера:

Стандартизация С++

В прошлом году прошли две встречи комитета по стандартизации С++: Кона в Октябре и Ленекса в Апреле.

Пару слов о весенней встрече:

И об осенней:

Намечены следующие встречи комитета по стандартизации в 2016-ом году: во Флориде в феврале и в Финляндии в июне (на этой встрече планируется голосование за стандарт С++17).

Новости мира компиляторов

Visual Studio

GCC

Clang

Intel compiler

Конференции

В прошлом году прошло две важных конференции: CppCon и MettingCpp

CppCon

MeetingCpp

Первый доклад:

и второй:

Заключение

Как мы видим, комитет по стандартизации С++ прилагает серьёзные усилия по работе над стандартом С++17. К концу года мы можем рассчитывать на принятие черновика этого стандарта. Разработчики чувствуют новую атмосферу перемен и это отражается в рейтингах популярности языка (в Tiobe Rank С++ набрал 8% [53]). Термин «ренессанс С++» уже не миф…

Что ещё лучше — у нас есть множество экспериментальных фич в компиляторах. Мы уже можем экспериментировать с модулями, концептами, корутинами… Это, конечно, пока не безопасно и не может быть применено в продакшн-коде, но в плане обучения и тестирования очень интересно. Кроме того, это даёт возможность получить некоторый фидбек, который может повлиять на финальную спецификацию всех этих вещей.

Команда разработчиков VisualStudio становится намного более открытой, это заметно начиная с VS2015. Вы не только можете создавать мультиплатформенные приложения, но и весьма оперативно получать обновления с новыми интересными фичами.

Все компиляторы поддерживают С++11/14 на достаточно хорошем уровне, так что больше нет оправданий не переходить на использование этих стандартов. С помощью Core Guidelines данная задача становится ещё проще.

Грустные новости
Буквально пару часов назад Скотт Майерс опубликовал статью-прощание [54] с миром С++. Обсуждение на reddit [55]

А что вы думаете?

  • Что вам запомнилось из события около С++ в 2015-ом году?
  • Что я пропустил?

Ну и опросничек.

Автор: Инфопульс Украина

Источник [56]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/108126

Ссылки в тексте:

[1] N2634: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html

[2] N1653: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm

[3] Мысли по поводу С++17: https://isocpp.org/files/papers/D4492.pdf

[4] n4465: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4465.pdf

[5] n4466: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4466.pdf

[6] n4415: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4415.pdf

[7] n4478: http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4478.html

[8] n4454: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4454.pdf

[9] n3857: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3857.pdf

[10] n3865: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3865.pdf

[11] N4402: https://isocpp.org/files/papers/N4402.pdf

[12] n4398: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4398.pdf

[13] n4302: http://open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4302.pdf

[14] n4409: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4409.pdf

[15] n3701: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3701.pdf

[16] n4361: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4361.pdf

[17] n4263: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4263.pdf

[18] n4128: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4128.html

[19] n4382: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4382.pdf

[20] n4474: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4474.pdf

[21] n4477: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4477.pdf

[22] n4480: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html#string.view

[23] n4294: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4294.pdf

[24] n4480 — optional: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4480.html#optional

[25] N4295: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4295.html

[26] P0061R1: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0061.html

[27] n4099: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4099.html

[28] отличный обзор: https://botondballo.wordpress.com/2015/11/09/trip-report-c-standards-meeting-in-kona-october-2015/

[29] находится на GitHub: https://github.com/isocpp/cppcoreguidelines

[30] обзорно от Херба Саттера: https://isocpp.org/blog/2015/06/trip-report-spring-iso-cpp-meeting

[31] очень детально от Botond Ballo: https://botondballo.wordpress.com/2015/06/05/trip-report-c-standards-meeting-in-lenexa-may-2015/

[32] обзорно от Херба Саттера: http://herbsutter.com/2015/10/25/2568/

[33] Поддержка С++11/14/17 в VS 2015 RTM: http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx

[34] MSDN о С++11/14/17: https://msdn.microsoft.com/en-us/library/hh567368.aspx

[35] Ссылка на последнюю версию поддерживаемого стандарта: http://blogs.msdn.com/b/vcblog/archive/2014/11/17/c-11-14-17-features-in-vs-2015-preview.aspx

[36] Омоложение компилятора С++ от Microsoft: http://blogs.msdn.com/b/vcblog/archive/2015/09/25/rejuvenating-the-microsoft-c-c-compiler.aspx

[37] модули: http://blogs.msdn.com/b/vcblog/archive/2015/12/03/c-modules-in-vs-2015-update-1.aspx

[38] проверка на соответствие Core Language Guidelines: http://blogs.msdn.com/b/vcblog/archive/2015/12/03/c-core-guidelines-checkers-available-for-vs-2015-update-1.aspx

[39] корутины : https://msdn.microsoft.com/en-us/magazine/mt573711.aspx

[40] Лайт-концепты добавлены в основную ветку GCC: https://www.reddit.com/r/cpp/comments/3g3lsy/c_concepts_support_merged_into_gcc_trunk/

[41] список изменений: https://gcc.gnu.org/gcc-5/changes.html

[42] Текущая поддержка стандартов С++1y/C++14 в GCC: https://gcc.gnu.org/projects/cxx1y.html

[43] Текущий статус поддержки новых стандартов: http://clang.llvm.org/cxx_status.html

[44] можно использовать под Windows: http://blogs.msdn.com/b/vcblog/archive/2015/05/01/bringing-clang-to-windows.aspx

[45] презентация: https://software.intel.com/sites/default/files/New-C-C%2B%2B-Language-Features-in-Intel-C-C%2B%2B-Compiler-16.0.pdf

[46] видео: http://goparallel.sourceforge.net/inside-new-intel-c-compiler-16-0/

[47] Текущий статус поддержки С++11: https://software.intel.com/en-us/articles/c0x-features-supported-by-intel-c-compiler/

[48] Текущий статус поддержки С++14: https://software.intel.com/en-us/articles/c14-features-supported-by-intel-c-compiler

[49] Официальная страница: http://cppcon.org/

[50] И все видео: https://www.youtube.com/user/CppCon/videos

[51] Лейтмотив: https://meetingcpp.com/index.php/newsreader/items/both-keynotes-from-meeting-c-2015-are-online.html

[52] Мини-доклады: https://meetingcpp.com/index.php/newsreader/items/meeting-c-2015-all-lightning-talks-are-now-online-at-youtube.html

[53] набрал 8%: http://www.infoworld.com/article/2947536/application-development/javascript-rules-the-school-but-c-climbs-in-popularity.html

[54] статью-прощание: http://scottmeyers.blogspot.com/2015/12/good-to-go.html

[55] Обсуждение на reddit: https://www.reddit.com/r/programming/comments/3yyenk/scott_meyers_to_retire_from_the_world_of_c/

[56] Источник: http://habrahabr.ru/post/274549/