Spec-Zone.ru › C++

История C++

Ранний C++

  • 1979: впервые реализован C with Classes
  1. Новые возможности: классы, функции-члены, производные классы, раздельная компиляция, управление доступом public и private, дружественные функции, проверка типов аргументов функций, аргументы по умолчанию, встраиваемые функции, перегруженный оператор присваивания, конструкторы, деструкторы, f(), аналогичный f(void), call-function и return-function (средства синхронизации, отсутствующие в C++)
  2. Библиотеки: библиотека параллельных задач (отсутствует в C++)
  • 1982: опубликовано справочное руководство C with Classes
  • 1984: реализован C84, опубликовано справочное руководство
  • 1985: Cfront 1.0
  1. Новые возможности: виртуальные функции, перегрузка функций и операторов, ссылки, операторы new и delete, ключевое слово const, оператор разрешения области видимости
  2. Дополнения библиотеки: комплексные числа, string (версия AT&T), потоки ввода-вывода
  • 1985: «Язык программирования C++», 1-е издание
  • 1986: статья «whatis?», в которой описаны оставшиеся цели проектирования, включая множественное наследование, обработку исключений и шаблоны.
  • 1987: поддержка C++ в GCC 1.15.3
  • 1989: Cfront 2.0
  1. Новые возможности: множественное наследование, указатели на члены, доступ protected, типобезопасная компоновка, абстрактные классы, статические и const-квалифицированные функции-члены, специфичные для класса new и delete
  2. Дополнения библиотеки: манипуляторы ввода-вывода
  • 1990: аннотированное справочное руководство по C++

В этой книге язык был описан в соответствии с проектом, включая некоторые ещё не реализованные возможности. Она служила фактическим стандартом до принятия стандарта ISO.

  1. Новые возможности: пространства имён, обработка исключений, вложенные классы, шаблоны
  • 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)
  1. Новые возможности: RTTI (dynamic_cast, typeid), ковариантные типы возвращаемых значений, операторы преобразования, mutable, bool, объявления в условиях, инстанцирование шаблонов, шаблоны-члены, export
  2. Дополнения библиотеки: локали, bitset, valarray, auto_ptr, строка на основе шаблона, потоки ввода-вывода и комплексные числа.
  3. На основе STL: контейнеры, алгоритмы, итераторы, функциональные объекты
  • 1998: «Язык программирования C++», 3-е издание
  • 1999: Boost основана членами комитета для разработки новых высококачественных библиотек-кандидатов для включения в стандарт.
  • 2003: C++03 (ISO/IEC 14882:2003)

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

Отчёты об ошибках, исправленные в C++03 (92 — ядро языка, 125 — библиотека)
  • CWG#1
  • CWG#20
  • CWG#21
  • CWG#22
  • CWG#24
  • CWG#25
  • CWG#30
  • CWG#32
  • CWG#33
  • CWG#35
  • CWG#38
  • CWG#40
  • CWG#41
  • CWG#43
  • CWG#48
  • CWG#49
  • CWG#51
  • CWG#52
  • CWG#53
  • CWG#56
  • CWG#59
  • CWG#64
  • CWG#65
  • CWG#67
  • CWG#68
  • CWG#69
  • CWG#73
  • CWG#74
  • CWG#75
  • CWG#76
  • CWG#80
  • CWG#83
  • CWG#84
  • CWG#85
  • CWG#89
  • CWG#90
  • CWG#93
  • CWG#94
  • CWG#98
  • CWG#100
  • CWG#101
  • CWG#103
  • CWG#105
  • CWG#108
  • CWG#116
  • CWG#120
  • CWG#121
  • CWG#123
  • CWG#126
  • CWG#127
  • CWG#128
  • CWG#131
  • CWG#134
  • CWG#135
  • CWG#137
  • CWG#142
  • CWG#145
  • CWG#147
  • CWG#148
  • CWG#149
  • CWG#151
  • CWG#152
  • CWG#153
  • CWG#159
  • CWG#161
  • CWG#163
  • CWG#164
  • CWG#166
  • CWG#171
  • CWG#173
  • CWG#176
  • CWG#178
  • CWG#179
  • CWG#181
  • CWG#183
  • CWG#185
  • CWG#187
  • CWG#188
  • CWG#190
  • CWG#193
  • CWG#194
  • CWG#202
  • CWG#206
  • CWG#210
  • CWG#213
  • CWG#217
  • CWG#227
  • CWG#235
  • CWG#241
  • CWG#249
  • CWG#250
  • CWG#304
  • LWG#1
  • LWG#3
  • LWG#5
  • LWG#7
  • LWG#8
  • LWG#9
  • LWG#11
  • LWG#13
  • LWG#14
  • LWG#15
  • LWG#16
  • LWG#17
  • LWG#18
  • LWG#19
  • LWG#20
  • LWG#21
  • LWG#22
  • LWG#24
  • LWG#25
  • LWG#26
  • LWG#27
  • LWG#28
  • LWG#29
  • LWG#30
  • LWG#31
  • LWG#32
  • LWG#33
  • LWG#34
  • LWG#35
  • LWG#36
  • LWG#37
  • LWG#38
  • LWG#39
  • LWG#40
  • LWG#41
  • LWG#42
  • LWG#46
  • LWG#47
  • LWG#48
  • LWG#50
  • LWG#51
  • LWG#52
  • LWG#53
  • LWG#54
  • LWG#55
  • LWG#56
  • LWG#57
  • LWG#59
  • LWG#60
  • LWG#61
  • LWG#62
  • LWG#63
  • LWG#64
  • LWG#66
  • LWG#68
  • LWG#69
  • LWG#70
  • LWG#71
  • LWG#74
  • LWG#75
  • LWG#78
  • LWG#79
  • LWG#80
  • LWG#83
  • LWG#86
  • LWG#90
  • LWG#106
  • LWG#108
  • LWG#110
  • LWG#112
  • LWG#114
  • LWG#115
  • LWG#119
  • LWG#122
  • LWG#124
  • LWG#125
  • LWG#126
  • LWG#127
  • LWG#129
  • LWG#132
  • LWG#133
  • LWG#134
  • LWG#137
  • LWG#139
  • LWG#141
  • LWG#142
  • LWG#144
  • LWG#146
  • LWG#147
  • LWG#148
  • LWG#150
  • LWG#151
  • LWG#152
  • LWG#154
  • LWG#155
  • LWG#156
  • LWG#158
  • LWG#159
  • LWG#160
  • LWG#161
  • LWG#164
  • LWG#168
  • LWG#169
  • LWG#170
  • LWG#172
  • LWG#173
  • LWG#174
  • LWG#175
  • LWG#176
  • LWG#181
  • LWG#189
  • LWG#193
  • LWG#195
  • LWG#199
  • LWG#208
  • LWG#209
  • LWG#210
  • LWG#211
  • LWG#212
  • LWG#217
  • LWG#220
  • LWG#222
  • LWG#223
  • LWG#224
  • LWG#227
  • 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++ следующее:

  1. Из Boost: reference_wrapper, умные указатели, функция-член, result_of, bind, function, типовые характеристики, генерация случайных чисел, специальные математические функции, tuple, array, неупорядоченные контейнеры (в том числе hash) и регулярные выражения.
  2. Из 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++11

Было внесено большое количество изменений, чтобы стандартизировать существующие практики и улучшить абстракции, доступные программистам на 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++14

Незначительная редакция стандарта 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++17

Крупная редакция стандарта 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++20

Крупная редакция стандарта C++ после C++17

  • 2021: Техническая спецификация рефлексии (ISO/IEC TS 23619:2021) (Магазин ISO) (проект 2020 года)

Эта техническая спецификация расширяет C++, добавляя средства для анализа сущностей программы, таких как переменные, перечисления, классы и их члены, лямбда-выражения и захваченные ими переменные и т. д.

Дальнейшее развитие

  • Экспериментальные технические спецификации
  • 2029: последний проект стандарта C++ n5054 (16.07.2026)

Основная статья: C++23

Следующая крупная редакция стандарта C++

См. также

Документация по C о истории языка C

Внешние ссылки

1. История C++: 1979–1991
2. Развитие языка в реальном мире и для реального мира: C++ 1991–2006
3. Успех в насыщенном и меняющемся мире: C++ 2006–2020
4. Фонд стандартного C++
5. C++ в Википедии
6. Комитет по стандартам C++

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/history

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API