четверг, 13 января 2011 г.

Интерстрон: реализация нового стандарта Си++

С публикацией перевода нового стандарта ясность еще не наступила - но это не означает, что мы "зациклились" на этой проблеме. Реализация нового стандарта идет своим чередом. Сейчас наш компилятор Си++ уже поддерживает такие возможности "нового" Си++:

1. Спецификатор типа auto для переменных.
2. Спецификатор decltype.
3. Подряд идущие закрывающие угловые скобки >> в списках параметров шаблонов.
4. Конструкция static_assert.
5. Спецификатор extern для шаблонов: extern template.
6. Расширенное friend-объявление вида friend T, где T - параметр шаблона.
7. Предопределенная переменная __func__ для функций.
8. Обобщённые константные выражения.
9. R-ссылки и ref-квалификаторы.
10. Константа nullptr.
11. Шаблоны с переменным числом параметров (variadic templates).
12. Расширенные enum'ы.
13. Списки инициализаторов.
14. Спецификатор inline для пространств имен: inline namespace.
15. Шаблонные алиасы (template<...> using <новый тип> = ...)
16. Задание =delete и =default для функций.
17. Описатель explicit для функций преобразования типа.
18. Ослабление требований к union'ам.
19. Делегирование конструкторов.
20. Наследование конструкторов.

- ну и довольно много мелких усовершенствований.

В процессе реализации находятся такие свойства, как инициализаторы для нестатических членов класса и - конечно же!- лямбда-выражения и альтернативный синтаксис объявления функций (с типом возврата в конце после "стрелочки" ->). По нашим планам это будет ближе к концу февраля.

За такие вещи, как пользовательские литералы, циклы с range, атрибуты и конструкторы перемещения (move-конструкторы) пока не брались.

10 комментариев:

Анонимный комментирует...

А на реализацию концептов вы успели время потратить?

Кстати, планируете ли вы выкинутую главу про концепты каким-нибудь образом опубликовать? Пусть у себя на сайте.

zouev комментирует...

К счастью, концепты "отменили" до того, как мы приступили к реализации нового стандарта. :-)

А выкинутая часть (это не отдельная глава, а именно часть главы 14) полностью переведена и войдет в книгу в качестве приложения.

Nikolay Ivchenkov комментирует...

Имеется ли возможность скачать бесплатную версию компилятора?

zouev комментирует...

Для Nikolay Ivchenkov
Друзья, все вопросы насчет получения/приобретения компилятора - обращайтесь непосредственно в Интерстрон: www.interstron.ru.

Насколько я знаю, "просто так" компилятор бесплатно не дается. Другое дело, что возможны разнообразные варианты соглашений между фирмой и теми, кто заинтересован в том, чтобы поработать с нашим компилятором...

Nikolay Ivchenkov комментирует...

Сейчас наш компилятор Си++ уже поддерживает такие возможности "нового" Си++

Это, конечно, интересная информация, но я полагаю, что мало кому известно

1) о том, что вообще есть такая организация "Интерстрон", занимающаяся разработкой собственного компилятора,

2) о том, что компилятор от "Интерстрон" поддерживает некоторые возможности C++0x (известно ли вам, что в комитете по стандартизации были выдвинуты (и пока явным образом не отклонены) предложения исключить из C++0x ref-qualifiers (см. issue 1143) и inheriting constructors (см. issue 1150), мотивируя это тем, что поддержка данных вещей пока никем не реализована?),

3) насколько хорошо данный компилятор следует спецификации (в частности, касательно нововведений C++0x).

Чтобы заинтересовать широкую аудиторию, нужно нечто большее, чем просто сообщение в блоге, и, вероятно, нечто большее, чем формальные декларации. Живой интерес у общественности появляется лишь тогда, когда есть что пощупать, однако мало кому захочется покупать кота в мешке ради распробы.

Вот получить известность благодаря демонстрации пробного бесплатного компилятора (необязательно делать его полнофункциональным) с поддержкой того, чего пока не умеют другие компиляторы, IMHO, вполне реально. Кроме того, дополнительное тестирование может способствовать пополнению базы known bugs.

valexey комментирует...

Кроме того, это могло бы быть аргументом для отклонения предложений о исключении тех же inheriting constructors например.

Nikolay Ivchenkov комментирует...

Apple уже подготовила документ N3258=11-0028 "US-65: Removing Inheriting Constructors" со списком изменений в правилах. Комитету по стандартизации, похоже, осталось лишь проголосовать. Так что удаление Inheriting Constructors из C++0x может состояться очень скоро.

Ville Voutilainen комментирует...

Chances are that inheriting constructors will not be removed if there's proof of implementation experience. It would surely be nice to be able to use your compiler to play with the feature. Is there any evaluation version available?

Nikolay Ivchenkov комментирует...

For Eugene Zouev:

Внесу ясность по поводу ситуации с наследуемыми конструкторами. Сейчас в комитете по стандартизации C++ полным ходом идёт обсуждение предложения насчёт удаления наследования конструкторов из C++0x. Одним из ключевых аргументов в этом обсуждении является гипотеза (до сих пор считавшаяся фактом) о том, что в настоящий момент наследование конструкторов не реализовано ни в одном из существующих компиляторов C++. Я донёс до комитета по стандартизации ваше сообщение с перечнем реализованных нововведений C++0x, и теперь люди из комитета заинтересованы в проверке реализации наследования конструкторов в компиляторе Интерстрона. Полагаю, дело тут даже не столько в том, что вам (или мне - как переводчику вашего сообщения на английский язык) не хотят верить на слово, сколько в том, что им важно знать, как ваш компилятор будет реагировать на определённые ситуации.

В ходе проверки может выясниться, что в каких-то случаях поведение не соответствует ожидаемому, и это может свидетельствовать не только о том, что компилятор не соблюдает правила, но и том, что сами правила нуждаются в доработке (смею вас заверить, что правил C++0x, нуждающихся в доработке, сейчас довольно много).

Таким образом, будьте готовы к тому, что в связи с данным вопросом вас лично и вашу компанию будут расспрашивать (впрочем, уже начали - см. сообщение от Ville Voutilainen) лица, имеющие непосредственное отношение к стандартизации C++. Пожалуйста, не игнорируйте их сообщения и сильно не медлите с ответами.

Alexei Zakharov комментирует...

> Друзья, все вопросы насчет получения/приобретения компилятора - обращайтесь непосредственно в Интерстрон: www.interstron.ru.

Почему на ваш официальный адрес about@interstron.ru ничего не доходит? Странно как-то всё это.