Комитет по стандартизации языка C++, проводивший очередное заседание рабочей группы ISO C++ 5 марта 2016 (г. Джэксонвилл), утвердил список мажорного релиза C++17, подвергшийся широкой критике профессионального сообщества. В список вошли изменения P0263r1, P0188R1, P0189R1, P0212R1, P0170R1, p0018r3, P0138R2, p0245r1, p0143r2, p0165r1, P0024R2, P0226R1, p0220r1, P0218r1, p0005r4, P0152R1, p0185r1, P0253R1, P0154R1, P0304R0, P0272R1, P0077R2, P0206R1, p0221r1, P0141R0, PO4116 (https://isocpp.org/files/papers), которые, по заявлениям международных экспертов, направляют разработку стандарта C++17 в русло застойных решений.
Инициативная группа комитета, не согласная с принятым перечнем, объявила о разработке нового референсного стандарта C++!!, выпускаемого в пику ISO стандарта, призванного ежегодно добавлять действительно необходимые изменения языка. У нового стандарта отсутсвует нумерация версий, так как он привязан к актуальному ISO-стандарту и создан для того, чтобы показывать различия между ожидаемыми и реальными изменениями языка C++.
Какие изменения предлагает инициативная группа стандарта C++!!, чтобы сделать язык C++ красивым, мощным и востребованным средством современной разработки? Из наиболее заметных улучшений:
- Включение в стандарт концепторов, реализующих аспектно-ориентированную парадигму наследуемого кода;
- Многовекторная диспетчеризация динамического полиморфизма для трансляции полиморфного интерфейса в рантайм;
- Нативная поддержка каппа-функторов, и отображение их на множества булеан с ковариантной структурой, решающая проблему единичности метаданных;
- Рекуррентные конструкторы, реализующие перезагрузку объектов-функций для дружественных родовых классов;
- Расширенная арифметика указателей для поддержки адресации фрагментов унаследованных виртуальных структур данных в спецификаторе сборки;
- Трансформация мутабельных объектов через операторы доступа к полям класса посредством лаяй-генераторов.
Так же комитет указывает на синтаксические особенности языка C++, которые необходимо в ближайшее время доработать в режиме препроцессора либо стандартными библиотеками:
- Произвольные типы для конструкции case ... switch (в настоящий момент возможны только int или enum);
- Постфиксная запись типов в определениях, исключающая последующую нотацию вычисления конечного типа «по спирали»;
- Парсинг кода вперед, снимающий проблему прописывания прототипов функций в не-классовой части языка;
- Объединение констант нулевых значений NULL, nullptr, std::nullptr_t, (void*)0, etc. под одним именем REALLYNULL;
- Новые бинарные операторы <<< и >>> для поддержки инструкций циклического сдвига ROR и ROL, реализованные в большинстве микропроцессоров;
- Замена контекстно-зависимых ключевых слов const, static, etc. на термины, соответствующие выполняемым функциям (см. список на сайте комитета);
- Добавление строкового класса CoreString с поддержкой ASCII и UNICODE, вобравшего в себя лучшие черты wchar и Trolltech Qt QString;
- Долгожданная поддержка модулей с рекомендованным отступление от заголовочных *.h-файлов в пользу файлов интерфейса *.i;
Члены инициативной группы подчеркивают, что стандарт C++!! не может быть принят в том же режиме, что используемый ранее стандарт C++0x, так как он, возможно, не будет точно соответствовать конечному варианту стандарта, исключающему проблемы совместимости с уже существующим кодом. Однако, если релиз C++17 будет провальным, возможности C++!! будут иметь дополнительный коэффициент в будущем голосовании по стандарту C++18.
>>> Подробности
|