Глаза боятся, а руки делают
Не знаю, решились бы мы на этот проект, если бы сразу представляли (так, как знаем сейчас) его истинную трудоемкость. Тогда язык Си++, судя по учебным пособиям, казался нам... да, непростым для компиляции, с корявым и неоднозначным синтаксисом, сильно усложненной семантикой традиционных конструкций, но вполне сравнимым, например, с объектной версией Паскаля фирмы Borland. Так что срок, названный шефом, поначалу не вызвал у нас протеста. Однако чтение первой же действительно серьёзной и подробной книги - перевода авторского определения языка (мы называли ее «Зелёной книгой»)[1], предложенного в качестве начальной версии для его стандартизации, повергло нас в ужас и панику. Казалось, это безумие невозможно реализовать вообще! Тогда мы поняли настоящую цену учебникам типа «Язык XXX за двадцать один день» или «YYY - это просто!». Подобные тексты (сами по себе, быть может, и неплохо написанные) оставляют за своими рамками настолько обширные области языка, избегают касаться стольких его тонкостей и особенностей, что в голове у читателя-программиста формируется зачастую усечённый и выхолощенный образ инструмента, который он собирается использовать.
Вообще, у меня вызывает некоторую настороженность, когда о сложных вещах пытаются говорить упрощённо (это касается не только программирования). Задачи, решаемые современными программными системами, очень и очень сложны. Для их создания приходится использовать адекватные инструменты, которые не могут не соответствовать сложности и ответственности задач и потому объективно не могут быть простыми. Поэтому писать о Си++ в стиле «Откройте файл myprogl. срр с компакт-диска, прилагаемого к книге, и нажмите Ctrl+F9. Поздравляем! Вы выполнили вашу первую программу на Си++!» - недопустимая профанация предмета.
С тех пор мы считаем, что настоящее пособие по сложному современному языку программирования общего назначения (уровня Си++ или Ada95) должно иметь форму, близкую упоминавшейся книге Эллис и Страуструпа, - комментированный стандарт. Только такая книга может дать читателю настоящее понимание языка. Да, читать и пытаться понять строгий, сложно построенный, местами даже занудный текст будет весьма непросто - но кто сказал, что профессия программиста проста? Мы обязательно сделаем такую книгу по Си++, когда его Стандарт, наконец, будет принят[2].
Мы подошли к делу серьёзно. Три или четыре месяца мы практически не программировали. Мы изучали Эллис и Страуструпа («Зелёную книгу») вдоль и поперек и во всех мыслимых направлениях, проПервые радости
? 91
думывали общую конфигурацию компилятора, выбирали построение основных структур данных и важнейших алгоритмов, предлагали и обсуждали проектные и технические решения и писали проект.
Прекрасно помню чувство гордости, которое мы испытали, увидев наглядное свидетельство наших трудов - увесистый том, привезённый Вальтером, красиво отформатированный, распечатанный на лазерном принтере (у нас их тогда и в помине не было) и даже, кажется, переплетённый. Сейчас, когда прошло уже около трёх лет, очень многие наши проектные решения кажутся прямолинейными, наивными и даже неверными; некоторые пришлось менять уже в процессе реализации, но, тем не менее, проект дал необходимую основу для работы.
Этот текст, кажется, произвёл достаточное впечатление на бельгийцев; они вполне убедились в уровне нашей квалификации. Тогда показалось удивительным, но некоторых простых вещей они даже не знали: например, что typedef-объявление не вводит новый тип, конструкции extern «С» могут быть вложенными и т. д. Не говоря уже о более специфических аспектах. При описании в проекте техники компиляции вызовов функций мы употребили термин «thunk» (короткий код для вычисления фактического параметра). Оказывается, они, сделавшие несколько коммерческих компиляторов, не знали, что это такое! С удовольствием и тайным злорадством я выписал из классической книги Гриса[3] и послал им большую цитату, объясняющую этот термин...
- [1] Эллис А/., Строуструп Б. Справочное руководство по языку программирования C++ с комментариями / пер. с англ. - М.: Мир, 1992. - 445 с., ил.ISBN 5-03-002868-4.
- [2] Комментарий 2001 года. Стандарт принят в 1998 году - уже почти три годаназад, а обещанных комментариев до сих пор нет... Собственно, текст Стандарта я практически полностью перевёл, надо бы засесть и за комментарии.Однако одному мне не справиться... Саша Кротов, где ты?!. Комментарий 2008 года. Скоро появится новый Стандарт языка Си++. Перевод уже готов, заканчивается работа над комментариями. Знал бы тогда,семь лет назад, за что берусь, - даже и не начинал бы... Комментарий 2011 года. Все, работа завершена, практически одновременно с принятием нового стандарта. Проблема в публикации...
- [3] ГрисД. Проектирование компиляторов для цифровых вычислительных машин / пер. с англ. - М.: Мир, 1969.