суббота, 11 августа 2007 г.

Перевод стандарта C++: несколько аргументов

Пришел такой комментарий:

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


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

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

Что ж, вполне разумные сомнения. Попробую высказать свои соображения.

Никто никогда не научится программировать просто прочитав Стандарт. Да что там программировать... даже просто языку никто не научится.

Разумеется. Я Вам даже больше скажу: никто никогда не научится программировать, прочитав любую книгу по программированию. И самому языку тоже нельзя научиться, прочитав какой бы то ни было текст. Чтобы чему-то научиться, надо реально программировать - другого пути нет. Но это все ведь вполне банально, и никто не собирается делать перевод стандарта, чтобы "научить" кого-то программировать. В том исходном посте ведь было ясно написано, что Стандарт - не учебник (ни по программированию, ни по языку), у него другие цели, его главная задача - представить язык в максимально строгом, недвусмысленном и, главное, полном виде. Этого не делает ни один, даже самый качественный учебник, в том числе книги, упомянутые Вами.

Именно отсюда следует основная задача задумываемой публикации: дать в распоряжение программистов (то есть, тех людей, которые уже умеют программировать!) первичный источник информации по языку. Это принципиально. Тот, кто программировать умеет, но хочет научиться делать это (еще) лучше, возьмет того же Майерса или Александреску. Но куда обращаться тому, кто хочет узнать или вспомнить точное правило вызова деструкторов для разрушения элементов не полностью построенного массива? Кроме стандарта (и именно комментированного, и снабженного адекватными примерами), этого, скорее всего, не написано нигде. Даже если в какой-то хорошей книге это правило и упоминается, то поди еще найди - и такую книгу, и место в ней... А в стандарте это все есть с гарантией. Если хотите, это своего рода энциклопедия по языку, и она может прекрасно соседствовать с учебниками по C++, ничуть их не заменяя, но давая большое количество уникальной информации.

Ну и те люди, которые не захотят останавливаться на достигнутом, могут начать читать Стандарт в оригинале.

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

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

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

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

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

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

В общем, я, признаться, не очень хотел бы дискутировать на тему знания/незнания английского языка отечественными программистами. Я просто хорошо знаю, что очень многим людям (и мне в том числе), даже прилично знающим этот язык, гораздо легче и быстрее читать по-русски. Что уж говорить о тех, кто язык не знает и, тем не менее, успешно программирует. Таких немало - оглянитесь вокруг.

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

ps. А почему 14882:1998(E), а не 14882:2003(E)?
pps. Будет ли актуален этот перевод когда выйдет 14883:2009? Очень сомневаюсь...


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

Проект С11 и компилятор C++ Интерстрона

Пришел такой вопрос:

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


Отвечаю.
С11 - довольно давний проект, который начался в конце девяностых (тогда нынешний Интерстрон еще назывался МедиаЛингва:Компиляторы). Действительно, одной из идей была поддержка русских эквивалентов служебных слов. Надо отметить, что кириллические идентификаторы по определению языка должны поддерживаться любой реализацией стандарта ISO, так что речь шла именно о служебных словах. Нам казалось, что "кириллические" программы было бы легче сопровождать - конечно, если программу не надо было переносить в другие среды. Кроме того, русские служебные слова помогли бы при начальном изучении языка - особенно для тех, кто не слишком хорошо владеет английским.

Русские эквиваленты служебных слов были и вправду достаточно тщательно продуманы; есть документ, который подробно обсуждает, почему были выбраны именно те, а не иные эквиваленты. Возможно, этот текст до сих пор лежит на сайте Интерстрона. Те, кто интересуется историей вопроса, могут найти мою статью в "Мире ПК", номер 4 за 1999 год: http://www.osp.ru/pcworld/1999/04/160292/. Там все описано (правда, довольно кратко - статью при публикации сильно обрезали).

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

Вообще-то, подобная "локализация" языка программирования - вовсе не какая-то экзотика. Первые российские компиляторы Фортрана и Алгола-60 были русскоязычными. В свое время был разработан компилятор PL/I для "Эльбруса" с двумя наборами служебных слов. В Алголе-68 была предусмотрена стандартная возможность перенастраивать язык на различные "культуры", как сейчас говорят. Есть и другие примеры. Так что мы не ощущали себя маргиналами; наоборот, нам казалось, что мы делаем как раз то новое, что на самом деле хорошо забытое старое...

Проект С11 не был доведен до коробочного продукта по причинам, не связанным с его "русскоязычностью". Тем не менее, собственно компилятор C++ полностью разработан и тщательно оттестирован. Он и сейчас вполне себе жив, развивается и распространяется на рынке софта для спецпроцессоров, в чем можно убедиться, зайдя на сайт www.interstron.ru.