вторник, 10 июля 2007 г.

Стандарт языка C++ с комментариями (предложение по публикации)

Уже довольно давно я вынашиваю идею выпуска комментированного перевода Стандарта C++. Писал и говорил об этом я настолько часто (начиная с "Редкой профессии"), что уже и неловко отвечать на вопросы, которые до сих пор иногда возникают: "Где перевод?", "Когда будет перевод?" и т.п.

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

Собираюсь в скором времени начинать выкладывать кое-какие материалы, относящиеся к своей работе над переводом Стандарта и комментариями к нему. Любые конструктивные замечания категорически приветствуются. А пока для начала - собственно постановка задачи и кое-какие обоснования (выраженные несколько официальным языком). Критиковать тоже можно. :-)

Язык программирования C++ [1] является в настоящее время наиболее распространенным и популярным инструментальным средством для профессиональной разработки больших и сложных программных систем. Несмотря на активное продвижение альтернативных языковых средств и платформ (прежде всего, Java и C#) и на полное отсутствие пропаганды C++, этот язык остается уверенным лидером в области средств разработки. Анализ [2] показывает, что этот язык используется при создании как широко распространенных программ, ориентированных на максимально широкий круг пользователей, так и систем весьма специального назначения, зачастую с повышенными требованиями к надежности и производительности.

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

Тем не менее, положение дел в этом плане нельзя назвать благополучным. Основной причиной, по мнению автора, является то обстоятельство, что язык C++ представляет собой весьма и весьма сложный для изучения объект. В одной отдельной книге и даже в серии книг крайне трудно охватить все аспекты этого языка, и практически все известные публикации ограничиваются описанием его более или менее представительного подмножества. Положение усугубляется тем, что многие книги посвящены описанию нестандартных версий этого языка, которые зачастую не вполне совместимы между собой.

По моему мнению, лучшим вариантом книги по языку C++ является текст Международного Стандарта C++, который строго и недвусмысленно представляет весь язык. Чтение текста Стандарта - лучший путь изучения языка (это относится не только к C++, но в случае с этим языком это особенно ясно). В то же время, оригинальный текст стандарта на английском языке - не самое легкое чтение, потому необходим адекватный и качественный перевод. В то же время, имеет очень большой смысл предоставить читателю и оригинальный текст. Кстати, в свое время именно в такой форме (как двуязычный текст) был опубликован стандарт языка Алгол-68.

Таким образом, моя основная идея - выпустить перевод Международного Стандарта C++ в виде двуязычного параллельного текста: в левой части разворота - оригинальный текст, в правой - соответствующий перевод.

Далее. Очень важная часть идеи - сделать не простой, а комментированный перевод. Дело в том, что помимо объективной сложности языка, текст Стандарта построен не в виде обычного учебника (по принципу "от простого к сложному"), а как свод правил, структурированных согласно природе самого языка. Это очень строгое, точное и полное описание, и этим он выгодно отличается от любого учебника. Однако, чтобы сделать перевод более удобным для изучения, совершенно необходимы содержательные комментарии и дополнительные примеры, проясняющие суть многочисленных трудных и неочевидных мест языка.

Следующая часть предложения - дополнительный справочный аппарат. Объем и сложность текста стандарта приводят к необходимости введния в перевод некоторых дополнительных компонент. Прежде всего, это глоссарий терминов, по существу - краткий толковый словарь, в котором были бы собраны сжатые объяснения фундаментальных понятий языка. Такой словарь будет написан только на основе текста самого стандарта; это своего рода выжимка из него. Я уверен, что такой словарь будет очень полезен всем категориям читателей.

Далее, совершенно необходим развернутый словарь, который содержал бы объяснение основных идей и методов перевода, а также обоснование конкретных вариантов переводов терминов. Тот, мягко говоря, беспорядок, который существует сейчас в выборе русских эквивалентов для программистских терминов, та небрежность и зачастую вопиющая безграмотность иных переводчиков настоятельно требуют обосновать и, если угодно, защитить правильные эквиваленты английских технических терминов.

Структурно текст стандарта (тем более, параллельного перевода) весьма сложен, и очень хотелось бы преодолеть или уменьшить эту сложность введением специальных средств. Я имею в виду цветную печать. Различные фрагменты текста имело бы смысл выделять не только различными шрифтами, но и различным цветов. Опыт показывает, что это существенно помогает в чтении подобных текстов.

Вот еще несколько весьма существенных моментов, связанных с моим предложением. Стандарт C++ - собственность международного комитета ISO. Его официальный перевод, стало быть, должен быть соответствующим образом легализован с точки зрения существующих юридических правил. Каков в точности механизм этой легализации, мне не известно. Возможно, имеет смысл сделать так, чтобы выпуск предлагаемой книги был не просто частной инициативой одной компании или издательства, а был как-то согласован с Госстандартом России. Я знаю, что в Госстандарте интересуются процессом стандартизации C++ и с интересом воспримут сам факт появления такого перевода. Я предполагаю, что у них есть интерес к выпуску российского стандарта C++ (на основе Стандарта ISO). Поэтому какое-то (хотя бы вполне нейтральное) согласование и/или одобрение Госстандарта получить, мне кажется, будет вполне реально.

В заключение хотел бы заметить, что этот проект, в том виде, как он описан выше, является в своем роде уникальным не только в России, но и в мире. Попросту говоря, изданий, аналогичных предлагаемому, я не знаю. В начале 90-х годов автор языка C++ Б. Страуструп выпустил подобную книгу, трактующую предварительную версию языка C++, которая предлагалась в качестве исходной для начинавшегося процесса стандартизации языка. Эта книга в русском переводе [3] мгновенно стала библиографической редкостью и, по моему мнению, по настоящее время остается одним из лучших описаний C++ (даже несмотря на то, что она представляет сильно устаревшую версию языка). Недавно Б. Страуструп в одном из интервью высказал идею написания подобной книги по итоговой («стандартной») версии, однако он специально отметил, что ни сроков начала такой работы, ни ее возможную длительность обсуждать не готов.

Несколько технических подробностей.
Полный объем Стандарта – 748 печатных страниц формата A4. Объем описания первой части Стандарта (ядра языка, то есть без учета описания стандартных библиотек) – 310 печатных страниц. Представляется целесообразным ограничиться (по крайней мере, вначале) выпуском комментированного перевода именно ядра языка. Мной к настоящему времени уже выполнен перевод примерно 95 процентов текста, а также подготовлена значительная часть справочного аппарата, о котором шла речь выше. Таким образом, основное время будет посвящено написанию комментариев. К этой работе хотелось бы привлечь ряд авторитетных отечественных специалистов по языку C++, а также использовать наиболее интересные и глубокие работы зарубежных авторов.

Ссылки:

1. ISO/IEC International Standard – C++ ISO/IEC 14882, 1998(E)
2. Руслан Богатырев. Летопись языков: Си++. Мир ПК, #01/2003
3. М.Эллис, Б.Строуструп. Справочное руководство по языку программирования Си++ с комментариями. Москва, «Мир», 1992.


4 комментария:

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

Конструктивно могу предложить только одно: вогнать стандарт в wiki, и предоставить его для комментирования вам + "старой гвардии" (Диме, Жене,.. ) если они к этому проявят интерес.

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

Гхм... А какой смысл этого перевода? Пусть даже с комментариями... Никто никогда не научится программировать просто прочитав Стандарт. Да что там программировать... даже просто языку никто не научится.
Сначала изучают синтаксис. Потом начинают что-то делать на С++. Потом, если интерес не пропал, начинают читать Саттера, Александреску, Мейрса(возможно и Страуструпа). Вот они научат программировать на С++. И приоткроют большую часть лазеек и тонкостей Стандарта. Ну и те люди, которые не захотят останавливаться на достигнутом, могут начать читать Стандарт в оригинале.

ps. А почему 14882:1998(E), а не 14882:2003(E)?

pps. Будет ли актуален этот перевод когда выйдет 14883:2009? Очень сомневаюсь...

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

Мечтаю о подобном издании.

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

дизайн квартир веб дизайн , студия web дизайна, разработка веб сайтов , создание веб дизайн сайта, создание web сайта, сайт на заказ, вэб дизайн, дизайн сайта, цена на сайт, сайт визитка http://www.weblait.ru/ дизайн квартир