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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

суббота, 8 марта 2008 г.

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

У Алены Сагалаевой увидел приглашение поучаствовать в опросе (спасибо, Алена!). Получилось довольно длинно, так как без комментариев обходиться не умею. :-)

Для начала хотел бы сравнить инструменты, которыми я пользовался в процессе разработки компилятора Си++ (десять лет назад), и теми, с которыми работаю сейчас.

                      1998                    2008
Файловый менеджер     Norton Commander        Total Commander
Компилятор            gcc                     C++/C# из VS
Отладчик              gdb                     Отладчик VS
Текстовый редактор    Multi-Edit              Редактор VS
Ведение версий        CVS                     SourceSafe
Интернет-броузер      Netscape                Internet Explorer
Почтовая программа    Netscape Communicator   Gmail
Персональный организатор                      The Journal, Onfolio


Несколько комментариев.


Файловый менеджер
Я довольно консервативен, да и просто не вижу причин менять привычную парадигму манипуляций с файлами/каталогами. Модель с двумя окнами кажется мне удобной и совершенно адекватной подавляющему большинству практических потребностей. Встроенный в винду Windows Explorer, на мое скромное имхо, безумно коряв с эстетической точки зрения и очень неудобен в работе (даже для рядовых пользователей); даже если потратить довольно много времени на его настройку, результат явно неудовлетворителен. Кстати, никакими плагинами к TC не пользуюсь, может, зря – но времени жалко их выбирать, ставить, пробовать, проверять... Единственный недостаток TC – он довольно медленно работает с большим количеством файлов (несколько сот штук) зараз. Впрочем, может быть, это не он виноват, а нижележащая ОС, но мне лень копаться в настройках самой винды...

Компилятор
Отладчик
Редактор
Ведение версий
Visual Studio, по моему мнению,- очень хорошая интегрированная среда, и я не разделяю практически ни одного из критических замечаний о ней, которые мне приходилось слышать. Inellisense и другие удобства, которые некоторые презрительно именуют "свисточками и звоночками", реально помогают мне программировать и существенно облегчают и ускоряют мою работу. К сожалению, для работы с Си++ и в особенности с ASP.NET уровень поддержки со стороны среды заметно слабее, чем для C#. Версию VS не указываю, так как использую несколько на разных компьютерах.

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

Интернет-броузер
Я ни разу не фанат ни самого Микрософта, ни его продуктов, но - опять-таки - считаю, что IE - вполне приличный инструмент, и не испытываю серьезных проблем в работе с ним. Да, иногда он тормозит и даже, бывает, слетает, но кто скажет, что другие приборы всегда быстры и супернадежны? Кроме того, мне важно, что с ним интегрирован Onfolio (см.ниже). Да и вообще, чтобы перейти на другой броузер, мне нужны - кроме простого человеческого любопытства - достаточно весомые причины...

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

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

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

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

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

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

Персональные организаторы
(Схитрил: в одну позицию запихал сразу две программы, но они того стоят): The Journal и Onfolio.

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

The Journal (http://www.davidrm.com/) – в нем я веду профессиональный дневник (только для себя), сохраняю наиболее важные письма, готовлю тексты для блога, составляю и веду различные рабочие планы и вообще, храню всю текстовую информацию, имеющую отношение к моим проектам. Очень удобная программа: то, что действительно важно, она автоматизирует (например, ведение дневника), второстепенные детали оставляет на усмотрение пользователя. Документы можно организовывать в виде древовидной структуры любой сложности. С точки зрения дизайна программа вполне традиционная и не требует много времени на освоение. Встроенный редактор сделан на движке от Ворда и предоставляет вполне адекватную моим потребностям функциональность, включая хорошую поддержку таблиц. Вполне отрабатывает свои 40 долларов :-).

Onfolio – средство для сбора информации из Интернета. Можно собирать и структурировать ссылки и делать вырезки из страниц сайтов. Есть известное количество программ, предоставляющих аналогичный сервис, но для меня эта - однозначно лучшая. Вырезает куски на редкость адекватно, с полным сохранением оформления, позволяет редактировать вырезанное (правда, редактор все-таки слабоват). Структурируется информация традиционными парадигмами – есть понятие коллекции, в которой можно создавать каталоги, а в них – записи. Коллекция – это просто файл. При вырезании запоминается дата и адрес источника, можно добавлять свои атрибуты (заголовок, описание, цветной флажок). Очень не хватает тегов, средств упорядочения каталогов и цветового выделения заголовков записей. Собранные коллекции (части коллекций) можно экспортировать в виде единого mhtm-файла, который прекрасно отображается броузером. Разумеется, в записях можно хранить не только вырезки, но и произвольные тексты, PDF-документы, фотографии и прочее... Есть фид-агрегатор, но я его не использую. Программа встраивается в IE (в панели Windows Live Toolbar появляются дополнительные кнопочки) и управляется очень просто. Кроме плагина для IE, в комплекте есть и независимый вариант: Onfolio Deskbar.

В свое время я по-честному купил Onfolio и с удовольствием юзал ее года два, но в один прекрасный день фирму-разработчика купил Микрософт, и программа стала бесплатной составной частью Windows Live :-). Ссылку не даю – потерял, а снова искать лень. Программу точно можно найти в недрах микрософтовского сайта, но придется немного покопаться: прямая ссылка из раздела Windows Live не работает, придется искать обходные пути. Но она там точно лежит! :-)

Передаю эстафету (только троим; к сожалению, не все коллеги, предпочтения которых могли бы быть интересны, ведут свои блоги):

Александр Кротов
Дмитрий Гурьев
Сергей Розовик