История C++
Ранний C++
- 1979: впервые реализован C with Classes
- Новые возможности: классы, функции-члены, производные классы, раздельная компиляция, управление доступом public и private, дружественные функции, проверка типов аргументов функций, аргументы по умолчанию, встраиваемые функции, перегруженный оператор присваивания, конструкторы, деструкторы,
f(), аналогичныйf(void), call-function и return-function (средства синхронизации, отсутствующие в C++) - Библиотеки: библиотека параллельных задач (отсутствует в C++)
- 1982: опубликовано справочное руководство C with Classes
- 1984: реализован C84, опубликовано справочное руководство
- 1985: Cfront 1.0
- Новые возможности: виртуальные функции, перегрузка функций и операторов, ссылки, операторы
newиdelete, ключевое словоconst, оператор разрешения области видимости - Дополнения библиотеки: комплексные числа,
string(версия AT&T), потоки ввода-вывода
- 1985: «Язык программирования C++», 1-е издание
- 1986: статья «whatis?», в которой описаны оставшиеся цели проектирования, включая множественное наследование, обработку исключений и шаблоны.
- 1987: поддержка C++ в GCC 1.15.3
- 1989: Cfront 2.0
- Новые возможности: множественное наследование, указатели на члены, доступ protected, типобезопасная компоновка, абстрактные классы, статические и const-квалифицированные функции-члены, специфичные для класса
newиdelete - Дополнения библиотеки: манипуляторы ввода-вывода
- 1990: аннотированное справочное руководство по C++
В этой книге язык был описан в соответствии с проектом, включая некоторые ещё не реализованные возможности. Она служила фактическим стандартом до принятия стандарта ISO.
- Новые возможности: пространства имён, обработка исключений, вложенные классы, шаблоны
- 1991: Cfront 3.0
- 1991: «Язык программирования C++», 2-е издание
Стандартный C++
- 1990: создан комитет ANSI C++
- 1991: создан комитет ISO C++
- 1992: STL реализована на C++
Период C++98/03
- 1998: C++98 (ISO/IEC 14882:1998)
- Новые возможности: RTTI (
dynamic_cast,typeid), ковариантные типы возвращаемых значений, операторы преобразования,mutable,bool, объявления в условиях, инстанцирование шаблонов, шаблоны-члены, export - Дополнения библиотеки: локали,
bitset,valarray,auto_ptr, строка на основе шаблона, потоки ввода-вывода и комплексные числа. - На основе STL: контейнеры, алгоритмы, итераторы, функциональные объекты
- 1998: «Язык программирования C++», 3-е издание
- 1999: Boost основана членами комитета для разработки новых высококачественных библиотек-кандидатов для включения в стандарт.
- 2003: C++03 (ISO/IEC 14882:2003)
Это была незначительная редакция, предназначенная в основном для внесения технических исправлений. В этой редакции было введено определение инициализации значением.
- 2006: отчёт о производительности (ISO/IEC TR 18015:2006) (магазин ISO) (проект 2006 года)
В этом техническом отчёте рассмотрены затраты на различные абстракции C++, приведены рекомендации по реализации, обсуждается применение C++ во встроенных системах и представлен интерфейс <hardware> для <iohw.h> C ISO/IEC TR 18037:2008.
- 2007: технический отчёт о расширении библиотеки TR1 (ISO/IEC TR 19768:2007) (магазин ISO) (проект 2005 года).
Этот технический отчёт представляет собой расширение библиотеки C++, добавляющее в стандартную библиотеку C++ следующее:
- Из Boost:
reference_wrapper, умные указатели, функция-член,result_of,bind,function, типовые характеристики, генерация случайных чисел, специальные математические функции,tuple,array, неупорядоченные контейнеры (в том числеhash) и регулярные выражения. - Из C99: математические функции из
<math.h>, появившиеся в C99, класс символов пробела, окружение операций с плавающей точкой, манипулятор ввода-выводаhexfloat, целочисленные типы фиксированного размера, типlong long,va_copy, семейства функцийsnprintf()иvfscanf(), а также спецификаторы преобразования C99 для семейств функцийprintf()иscanf().
Все компоненты TR1, кроме специальных функций, вошли в C++11 с небольшими изменениями.
- 2010: специальные математические функции (ISO/IEC 29124:2010) (магазин ISO) (проект 2010 года)
Этот международный стандарт представляет собой расширение стандартной библиотеки C++, добавляющее специальные функции, входившие в TR1, но не включённые в C++11: эллиптические интегралы, интеграл экспоненты, многочлены Лагерра, многочлены Лежандра, многочлены Эрмита, функции Бесселя, функции Неймана, бета-функцию и дзета-функцию Римана. Этот стандарт был включён в C++17.
Период C++11
- 2011: C++11 (ISO/IEC 14882:2011) (Магазин ISO) (проект после публикации 2012 года).
Было внесено большое количество изменений, чтобы стандартизировать существующие практики и улучшить абстракции, доступные программистам на C++.
- 2011: Технический отчёт о десятичной арифметике с плавающей точкой (ISO/IEC TR 24733:2011) (Магазин ISO) (проект 2009 года)
Этот технический отчёт реализует типы десятичной арифметики с плавающей точкой из стандарта IEEE 754-2008 «Арифметика с плавающей точкой»: std::decimal::decimal32, std::decimal::decimal64 и std::decimal::decimal128.
- 2012: основан Фонд стандартного C++
- 2013: «Язык программирования C++», 4-е издание
Период C++14
- 2014: C++14 (Магазин ISO) (Магазин ANSI) (окончательный проект 2014 года)
Незначительная редакция стандарта C++
- 2015: Техническая спецификация библиотеки файловой системы (ISO/IEC TS 18822:2015) (Магазин ISO) (проект 2014 года)
Эта техническая спецификация представляет собой экспериментальное расширение библиотеки C++, определяющее библиотеку файловой системы на основе boost.filesystem V3 (с некоторыми изменениями и дополнениями). Эта спецификация вошла в C++17.
- 2015: Расширения для технической спецификации параллелизма (ISO/IEC TS 19570:2015) (Магазин ISO) (проект 2015 года)
Эта техническая спецификация стандартизирует параллельный и векторно-параллельный API для всех алгоритмов стандартной библиотеки, а также добавляет новые алгоритмы, такие как reduce, transform_reduce или exclusive_scan. Эта спецификация вошла в C++17.
- 2015: Расширения для технической спецификации транзакционной памяти (ISO/IEC TS 19841:2015) (Магазин ISO) ([проект 2015 года)
Эта техническая спецификация расширяет ядро языка C++ блоками с синхронизацией и атомарными блоками, а также функциями, безопасными для транзакций, реализующими семантику транзакционной памяти.
- 2015: Расширения для технической спецификации основ библиотеки (ISO/IEC TS 19568:2015) (Магазин ISO) (проект 2015 года)
Эта техническая спецификация добавляет в стандартную библиотеку C++ несколько новых компонентов: optional, any, string_view, sample, search, apply, полиморфные распределители памяти и переменные-шаблоны для характеристик типов. Эта спецификация вошла в C++17.
- 2015: Расширения для технической спецификации концепций (ISO/IEC TS 19217:2015) (Магазин ISO) (проект 2015 года)
Эта техническая спецификация расширяет ядро языка C++ концепциями (именованными требованиями к типам) и ограничениями (ограничениями на типы, допустимые в объявлениях шаблонов, функций и переменных), что облегчает метапрограммирование и упрощает диагностику при инстанцировании шаблонов; см. концепции. Эта спецификация вошла в C++20 с некоторыми исключениями.
- 2016: Расширения для технической спецификации параллелизма (ISO/IEC TS 19571:2016) (Магазин ISO) (проект 2015 года)
Эта техническая спецификация расширяет библиотеку C++, добавляя несколько расширений для std::future, latches и barriers, а также атомарные интеллектуальные указатели.
Период C++17
- 2017: C++17 (Магазин ISO) (Магазин ANSI) (n4659, окончательный проект от 21.03.2017)
Крупная редакция стандарта C++ после C++11
- 2017: Расширения для технической спецификации диапазонов (ISO/IEC TS 21425:2017) (Магазин ISO) (проект 2017 года)
Эта техническая спецификация расширяет библиотеку C++, добавляя диапазоны — новую, более мощную абстракцию, заменяющую пары итераторов, а также представления диапазонов, диапазоны с сентинелами, проекции для преобразований на лету, новые адаптеры итераторов и алгоритмы. Это расширение наконец позволяет сортировать вектор с помощью sort(v);
- 2017: Расширения для технической спецификации корутин (ISO/IEC TS 22277:2017) (Магазин ISO) (проект 2017 года)
Эта техническая спецификация расширяет ядро языка C++ и стандартную библиотеку, добавляя корутины без стека (возобновляемые функции). В язык добавляются ключевые слова co_await, co_yield и co_return.
- 2018: Расширения для технической спецификации сетевых возможностей (ISO/IEC TS 19216:2018) (Магазин ISO) (проект 2017 года)
Эта техническая спецификация расширяет библиотеку C++, добавляя поддержку сетевого взаимодействия по TCP/IP на основе boost.asio.
- 2018: Расширения для технической спецификации модулей (ISO/IEC TS 21544:2018) (Магазин ISO) (проект 2018 года)
Эта техническая спецификация расширяет ядро языка C++, добавляя модули. Вводятся специальные идентификаторы module, import, а также вновь вводится ключевое слово export с новым значением.
- 2018: Расширения для технической спецификации параллелизма, версия 2 (ISO/IEC TS 19570:2018) (Магазин ISO) (проект 2018 года)
Эта техническая спецификация расширяет библиотеку C++, добавляя две новые политики выполнения (unseq и vec), дополнительные параллельные алгоритмы, такие как reduction_plus или for_loop_strided, блоки задач для запуска и объединения параллельных задач, типы SIMD и операции над ними.
Период C++20
- 2020: C++20 (Магазин ISO) (окончательный проект n4860 от 31.03.2020)
Крупная редакция стандарта C++ после C++17
- 2021: Техническая спецификация рефлексии (ISO/IEC TS 23619:2021) (Магазин ISO) (проект 2020 года)
Эта техническая спецификация расширяет C++, добавляя средства для анализа сущностей программы, таких как переменные, перечисления, классы и их члены, лямбда-выражения и захваченные ими переменные и т. д.
Дальнейшее развитие
- Экспериментальные технические спецификации
- 2029: последний проект стандарта C++ n5054 (16.07.2026)
Следующая крупная редакция стандарта C++
См. также
| Документация по C о истории языка C |
Внешние ссылки
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/history