четверг, 7 января 2010 г.

Перевод Стандарта С++: финиш близок

В конце ноября появились сразу две очередные версии черновика стандарта (драфта): документы с номерами n2960 и n3000. Пришлось заново проходить весь перевод, вносить правки и переводить новые фрагменты.

С одной стороны, модификации в документах сделаны по-человечески: красным выделяются удаляемые фрагменты, зеленым - добавляемые. Удобно.

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

В чем существо модификаций:

- Разделы 14.10 и 14.11 о концептах удалены полностью. Также удалены все ссылки на него и на его подразделы, а эти ссылки были разбросаны по всему тексту.

- Раздел 5.1 (он превратился в подраздел 5.1.2) о лямбда-выражениях полностью переписан. Слава Богу, в нем появились примеры, так что самому не нужно теперь их придумывать (а уж собрался было). Однако, переводить пришлось все заново.

- Очень много мелких правок по всему тексту. Где опечатка исправлена, где уточнение сделано... Вносить их нетрудно, но все равно, занятие это на редкость занудное.

В общем, итог к настоящему моменту такой: перевод полностью готов, осталось сформировать приложения (ну, и предисловие написать :-)).

Приложения - это отдельная песня. :-) Из приложений самого драфта в дело пойдет, видимо, только сводка синтаксиса, большинство остальных не столь уж важны (с учетом того, что перевод будет только ядра языка, без стандартных библиотек).

Зато будет несколько собственных приложений, и вот их-то я сейчас и готовлю. Очень коротко, что там будет:

- Сводка основных понятий/свойств языка: название (в оригинале и в переводе), его определение, ссылка на место в стандарте и, возможно, комментарий. В общем, "Краткий курс" С++ :-)

- Синтаксис языка в виде диаграмм, похожих на "железнодорожные" диаграммы, с помощью которых Вирт в свое время представлял синтаксис своих языков. Получается гораздо нагляднее, чем обычные синтаксические правила. Удобно для изучения и полезно в качестве справочника.

- Грамматика С++ в форме входного языка YACC/Bison. Разумеется, корректная (иначе и приложение из нее делать не стоило :-)), то есть, по ней Bison и некоторые известные его аналоги в состоянии сгенерировать правильный распознаватель. В грамматике, правда, сделаны кое-какие допущения (в чистом виде грамматика С++ в "бизонной" нотации непредставима), но что удивительно и замечательно, удалось свести эти допущения к совершенному минимуму. Технические подробности будут там же в комментариях.

Похожая грамматика С++ была в свое время опубликована в виде приложения к русскому переводу книги Ахо/Ульмана ("Dragon Book") - но здесь я целиком ее переписал, учтя все новые синтаксические конструкции.

- Пакет маленьких примеров программ на С++, иллюстрирующих наиболее характерные свойства языка. Пакет сделан на основе тестового набора, который используется в Интерстроне для тестирования нашего компилятора.

- Удаленные разделы о концептах. Хотя концепты, по всей видимости, будут радикально переделаны, да и произойдет это только в будущих версиях стандарта, мы все-таки опубликуем эти удаленные разделы, пусть и в виде приложения. Определенная ценность в них есть, да и проделанной работы по переводу жалко. :-) К тому же, многие просят и советуют оставить.

Вот как-то так... :-)

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

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

А где они появились n3000?

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

Для axet:
По адресу http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/ публикуется список документов рабочей группы. Ищите там документ с нужным номером (в конце).

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

>>перевод будет только ядра языка, без стандартных библиотек

А почему? Я думал что вы весь стандарт переводите...

Кстати, когда всё же планируют принять его? Они ж собирались вроде в 2009? И когда можно ждать ваш перевод в книжных?

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

Для Alekscx
Весь стандарт? А силы у меня одного немеренные, что ли? :-)) Хорошо хоть перевод ядра до конца смог довести!..

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

Все, что известно,- на март запланирована очередная встреча рабочей группы 22. В повестке дня, вроде, ничего похожего на завершающие мероприятия...

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

> красным выделяются удаляемые фрагменты, зеленым - добавляемые
> эти модификации делаются строго относительно предыдущей версии драфта
Разве для облегчения подобного труда нельзя обработать тексты, и все изменения вывести как набор diff/path? Тем более, вы же дока в обработке "структурированного текста".

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

Круто! С нетерпением ждём результатов!

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

Очень интересная книжка вырисовывается. Надеюсь, что тираж будет большим. Успехов Вам!

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

всех с новым годом :)

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

где скачать этот перевод?

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

Для Анонимный:
Ну я же написал, что еще осталось кое-что доделать - приложения, прежде всего. Вот закончу, тогда и скажу, где и как его можно будет получить. Но сразу отмечу, что бесплатной версии, скорее всего, не будет - ни в печатном, ни в электронном виде.

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

Евгений, а что вы думаете о работе Scott Meyers "Overview of the new C++ (C++0x"?