История C++
Содержание |
[править] Ранний C++
- 1979: Впервые реализован C с Классами
- Новые возможности: классы, функции-элементы, производные классы, раздельная компиляция, public и private контроль доступа, friend, проверка типов аргументов функции, аргументы по умолчанию, inline функции, перегруженный оператор присваивания, конструкторы, деструкторы, f() то же, что и f(void), функция call и функция return (функции синхронизации, которых нет в C++)
- Библиотеки: библиотека параллельных задач (нет в C++)
- 1982: Опубликовано справочное руководство по C с Классами
- 1984: Реализован C84, опубликовано справочное руководство
- 1985: Cfront 1.0
- Новые возможности: виртуальные функции, перегрузка операторов и функций, ссылки, операторы new и delete, ключевое слово const, оператор разрешения области видимости
- Дополнения библиотеки: комплексное число, строка, потоки Ввода/Вывода
- 1985: Язык Программирования C++, 1-е издание
- 1986: Документ "что это?", документирующий оставшиеся задачи дизайна, включая множественное наследование, обработку исключений и шаблоны.
- 1987: Поддержка C++ в GCC 1.15.3
- 1989: Cfront 2.0
- Новые возможности: множественное наследование, указатели на элементы, защищённый доступ, типобезопасное связывание, абстрактные классы, статические и константные функции-элементы, специфичные для класса new и delete
- Дополнения библиотеки: манипуляторы Ввода/Вывода
- 1990: Справочное Руководство по C++ с аннотациями
В этой книге был описан дизайн языка, включая некоторые функции, которые ещё не были реализованы. Она служила стандартом де-факто до ISO.
- Новые возможности: простоанства имён, обработка исключений, вложенные классы, шаблоны
- 1991: Cfront 3.0
- 1991: Язык Программирования C++, 2-е издание
[править] Стандартизованный C++
- 1990: Основание комитета ANSI C++
- 1991: Основание комитета ISO C++
- 1992: В C++ реализована STL
[править] Период C++98/03
- 1998: C++98 (ISO/IEC 14882:1998)
- Новые возможности: RTTI (dynamic_cast, typeid), ковариантные возвращаемые типы, операторы приведения, mutable, bool, объявления в условиях, создание экземпляров шаблонов, шаблоны элементов, export
- Дополнения к библиотеке: локали, bitset, valarray, auto_ptr, шаблон string, iostream и complex.
- На основе STL: контейнеры, алгоритмы, итераторы, объекты функции
- 1998: Язык Программирования C++, 3-е издание
- 1999: Члены комитета основали Boost для создания новых высококачественных библиотек-кандидатов для стандартизации.
- 2003: C++03 (ISO/IEC 14882:2003)
Это была небольшая доработка, призванная стать не более чем техническим исправлением
- Новые возможности: инициализация значения
- 2006: TR Производительности (ISO/IEC TR 18015:2006) (Магазин ISO) (черновик 2006)
В этом ТЗ обсуждается стоимость различных абстракций C++, приводится руководство по реализации, обсуждается использование C++ во встроенных системах и представлен <hardware>
интерфейс к ISO/IEC TR 18037:2008 языка C <iohw.h>
.
- 2007: Расширение библиотеки TR1 (ISO/IEC TR 19768:2007) (Магазин ISO) (черновик 2005).
Это TR является расширением библиотеки C++, которое добавляет в стандартную библиотеку C++ следующее:
- Из Boost: Обёртка для ссылки, Умные указатели, mem_fn, result_of, bind, function, Свойства Типов, Случайность, Специальные математические функции, tuple, array, Неупорядоченные Контейнеры (включая hash) и Регулярные Выражения.
- Из C99: математические функции из math.h, которые были новыми в C99, пустой тип символов, Среда с плавающей точкой, шестнадцатеричный Манипулятор Ввода-Вывода с плавающей запятой, целочисленные типы фиксированного размера, тип 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: TR Десятичные числа с плавающей запятой (ISO/IEC TR 24733:2011) (Магазин ISO) (черновик 2009)
Это TR реализует десятичные типы с плавающей запятой из стандарта 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 ТС 18822:2015) (Магазин ISO) (черновик 2014)
Эта ТС является экспериментальным расширением библиотеки C++, которое определяет библиотеку файловой системы на основе boost.filesystem V3 (с некоторыми модификациями и расширениями). Эта ТС была объединена с C++17.
- 2015: Расширения для ТС Параллелизма (ISO/IEC ТС 19570:2015) (Магазин ISO) (черновик 2015)
Эта ТС стандартизирует параллельный и векторно-параллельный API для всех стандартных библиотечных алгоритмов, а также добавляет новые алгоритмы, такие как reduce
, transform_reduce
или exclusive_scan
. Эта ТС была объединена с C++17.
- 2015: Расширения для ТС Транзакционной Памяти (ISO/IEC ТС 19841:2015) (Магазин ISO) (черновик 2015)
Эта ТС расширяет базовый язык C++ синхронизированными и атомарными блоками, а также функциями безопасными для транзакций, которые реализуют семантику транзакционной памяти.
- 2015: Расширения для ТС Библиотеки Основ (ISO/IEC ТС 19568:2015) (Магазин ISO) (черновик 2015)
Эта ТС добавляет несколько новых компонентов в стандартную библиотеку C++: optional, any, string_view, sample, search, apply, полиморфные аллокаторы и шаблоны переменных для свойств типов. Эта ТС была объединена с C++17.
- 2015: Расширения ТС Концептов (ISO/IEC ТС 19217:2015) (Магазин ISO) (черновик 2015)
Эта ТС расширяет базовый язык C++ концептами (требования к именованным типам) и ограничениями (ограничения на типы, разрешённые в объявлениях шаблонов, функций и переменных), что помогает метапрограммированию и упрощает диагностику создания экземпляров шаблона, смотрите концепты. Эта ТС была объединена с C++20, с некоторыми ограничениями.
- 2016: Расширения для ТС Конкуренции (ISO/IEC ТС 19571:2016) (Магазин ISO) (черновик 2015)
Эта ТС расширяет библиотеку C++ и включает несколько расширений: std::future, защёлки и барьеры, а также атомарные умные указатели.
[править] Период C++17
- 2017: C++17 (Магазин ISO) (Магазин ANSI) (n4659 2017-03-21 окончательный документ)
Основная версия стандарта C++ после C++11
- 2017: Расширения для ТС Диапазонов (ISO/IEC ТС 21425:2017) (Магазин ISO) (черновик 2017)
Эта ТС расширяет библиотеку C++ и включает диапазоны, новую, более мощную абстракцию, заменяющую пары итераторов, а также представления диапазонов, ограничители диапазонов, проекции для преобразований на лету, новые адаптеры и алгоритмы итераторов. Это расширение, наконец, позволяет сортировать вектор с помощью sort(v);
- 2017: Расширения для ТС Сопрограмм (ISO/IEC ТС 22277:2017) (Магазин ISO) (черновик 2017)
Эта ТС расширяет базовый язык C++ и стандартную библиотеку за счёт включения бесстековых сопрограмм (возобновляемых функций). Она добавляет ключевые слова co_await, co_yield и co_return.
- 2018: Расширения для ТС Сети (ISO/IEC ТС 19216:2018) (Магазин ISO) (черновик 2017)
Эта ТС расширяет библиотеку C++ и включает сеть TCP/IP на основе boost.asio.
- 2018: Расширения для ТС модулей (ISO/IEC ТС 21544:2018) (Магазин ISO) (черноик 2018)
Эта ТС расширяет базовый язык C++ за счёт включения модулей. Она добавляет специальные идентификаторы module, import и повторно вводит ключевое слово export с новым смыслом.
- 2018: Расширения для ТС Параллелизма версии 2 (ISO/IEC ТС 19570:2018) (Магазин ISO) (черновик 2018)
Эта ТС расширяет библиотеку C++ и включает две новые политики выполнения (unseq и vec), дополнительные параллельные алгоритмы, такие как reduction_plus или for_loop_strided, блоки задач для разветвления и объединения параллельных задач, типы SIMD и операции над этими типами.
[править] Период C++20
- 2020: C++20 (Магазин ISO) (окончательный документ n4860 2020-03-31)
Основная редакция стандарта C++ после C++17
- 2021: ТС Рефлексии (ISO/IEC ТС 23619:2021) (Магазин ISO) (черновик 2020)
Это ТС расширяет C++ средствами для проверки программных сущностей, таких как переменные, перечисления, классы и их элементы, лямбды и их захваты и т.д.
[править] Дальнейшее развитие
- Экспериментальные технические спецификации
- 2023: C++23 окончательный документ n4910 (2022-03-17)
Следующая крупная версия стандарта C++
[править] Смотрите также
Документация C по истории C
|