понедельник, 10 марта 2008 г.

Lisp на "Эльбрусе" (вторая предыстория)

Очень скоро после того, как я отошел от идеи реализовать на "Эльбрусе" полный Lisp, в журнале "Программирование" (очень неплохой был журнал; он жив и посейчас, но никто о нем, кажется, не знает и не вспоминает...) вышла статья А.Рейтсакаса из Таллина... ровно на ту же самую тему: Lisp на "Эльбрусе"!

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

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

Конечно, у меня нашлись объяснения. Мы находились совершенно в разных обстоятельствах: Саша работал в Академии Наук Эстонской (тогда еще) ССР, реализация Лиспа была темой его диссертации и, тем самым, основной обязанностью "по службе". Мой же "проект" был полнейшей самодеятельностью, и надеяться, что начальство позволит мне уделять рабочее время теме, хоть и интересной самой по себе, но решительно не относящейся к тематике нашего "ящика", не приходилось.

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

И - закон парности событий! - примерно в это же самое время появилась еще одна работа, тематически очень близкая: московский аспирант (как же его имя?- кажется, Володя Лихолип... Если ошибся, прошу извинить - все-таки много лет прошло) реализовал для того же "Эльбруса" язык Плэнер (Planner), довольно часто упоминавшийся тогда в литературе, а ныне, кажется, совершенно забытый. Planner предназначался для программирования ("планирования", отсюда и название) поведения роботов и содержал в себе полный Lisp как подмножество. Помимо этого, в нем, помнится, был целый ряд нетривиальных и очень интересных свойств, делающих его мощным инструментом программирования в сфере искусственного интеллекта и подобных областях.

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

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

Впоследствии мне еще несколько раз приходилось испытывать подобные чувства: и когда я познакомился с новосибирскими разработчиками PL/I и Ады, и когда В.О. Сафонов из Питера рапортовал о рекордном быстродействии своего Паскаль-компилятора, который обгонял даже "родной" для "Эльбруса" компилятор Эль-76... Я был чужим на этом празднике жизни, занимаясь системным администрированием, поддержкой и обучением пользователей, разрабатывающих для "Эльбруса" "боевые алгоритмы", смысла которых я почти не понимал...

Основной вывод, который я сделал для себя тогда... Да вру, никаких выводов я не сделал. Просто порасстраивался, и продолжал жить дальше. В конце концов, у меня еще все впереди, появится и у меня классная компиляторная работа!.. (десять лет пришлось ждать...)

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

В середине девяностых мы, уже работая в МГУ, активно занимались языком C++, делая компилятор по заказу одной европейской фирмы (см. "Редкая профессия"). Наша работа шла параллельно процессу стандартизации C++ в ISO, и от наших заказчиков мы регулярно получали текущие материалы рабочей группы, занимающейся разработкой этого стандарта - стенограммы обсуждений, принятые технические решения, планы и т.д. И вот у моего шефа, профессора В.А.Сухомлина, возникла идея более тесно и, самое главное, официально участвовать в этом процессе в качестве представителей от России. Основания были более чем весомые: наша команда работала над реализацией языка, основываясь на последних решениях рабочей группы, кроме компилятора, мы разрабатывали тесты на соответствие стандарту - так почему бы нам более активно, с учетом собственного опыта, не участвовать в работе этой группы?

До той поры контакты с рабочими группами ISO по различным языкам формально шли через какой-то отдел НИЦЭВТа - конторы, которая в советское время занималась разработкой ЭВМ Единой Серии. Несмотря на несколько ироническое отношение к характеру и качеству их разработок (все специалисты прекрасно знали и понимали степень "оригинальности" их решений), следует признать, что с чисто промышленной точки зрения эта организация делала очень важное дело, занимаясь масштабным внедрением вычислительной техники во все отрасли народного хозяйства. Да и, кроме того, за ЕС ЭВМ надо признать по крайней мере один большой плюс: унификацию периферийного оборудования, в том числе их интерфейсов. Дисковые и ленточные накопители, дисплеи, графопостроители и другая периферия на "Эльбрусе" вся была ЕСовская. Правда, со смертью обеих этих ветвей отечественной вычислительной индустрии все это потеряло всякий смысл и значение...

Но в советское время НИЦЭВТ процветал, и, конечно, вид их главного здания поражал воображение: исполинский многоэтажный комплекс из стекла и бетона, почти на километр вытянувшийся вдоль Варшавского шоссе, повторяя его изгиб...

Вот в это здание я и отправился однажды холодным зимним днем, чтобы по договоренности между начальством забрать материалы по стандартизации языков программирования: теперь контролировать этот процесс должна была наша лаборатория в МГУ.

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

(Спаведливости ради - и, так сказать, для баланса - должен заметить, что примерно в те же времена один из "конкурентов" НИЦЭВТа, институт, где проектировались, создавались и программировались "Эльбрусы" - ИТМиВТ - выглядел не лучше. Такая же пустота и запустение. Правда, ощущения сбывшегося апокалипсиса не возникало - но и то лишь из-за сравнительно скромных размеров эльбрусовского "гнезда"...)

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

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

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

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

Евгениё Александрович, вот я Вас и нашел!
Это Илхом Джалилов, ваш узбекский (а теперь американский) знакомый!
Пишите ещё, очень интересно, у Вас отличный талант журналиста/публициста ;-). Да я сейчас и сам почитываю Lisp/Scheme.
Хочу попробовать сделать небольшой скрипт язык для встраивания в C#.

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

Классно написано.
Надоест компиляторы - пиши рассказы!

Владимир Медведев комментирует...

Интереснейшие воспоминания. Можно ли надеяться на продолжение?