Держаться корней. К 80-летию Никлауса Вирта
Юбилей Никлауса Вирта – очень значимая для меня дата. Вот уже три десятка лет считаю себя его учеником, начиная с 1982 г., когда впервые взял в руки сделанную на ксероксе копию его препринта о языке Модула-2. Примерно в то же время началась работа над нашим «Кроносом».
С профессором Виртом лично познакомился позже, в 1990 г., когда он приезжал к нам в Новосибирский Академгородок. В 1991 году провел, по приглашению Вирта, две недели в его ETH Zurich и заболел Обероном. Потом пошел своим путем, но путь этот был бы невозможен без того, что внёс в мою жизнь профессор Вирт.
Я счастливый человек. Мне невероятно повезло в самом начале пути: довелось оказаться на стыке трёх блестящих школ программирования.
Первая — школа академика Андрея Петровича Ершова (1931-1988), которую постигал, в основном, у его ближайшего соратника Игоря Васильевича Поттосина (1933-2001). Вторая — школа Никлауса Вирта. Сначала в Новосибирске, затем в Цюрихе. Была и третья, которую разглядел в себе совсем недавно. Это школа НФ ИТМиВТ (Новосибирский филиал Института точной механики и вычислительной техники).
Каждая из трёх школ дала мне свою силу. Не говорю о технологиях. Технологии приходят и уходят. Я говорю о «духе» школы, и о той его части, которая была важна для меня. Не пытаюсь и не чувствую себя вправе критически оценивать любую из этих великих школ. Возможно, кто-то другой взял из тех же школ что-то совсем другое. Пишу о себе, пытаясь прямо сейчас раскрыть понимаемую мною суть.
Школа Ершова. Пожалуй, самое важное, что дала эта школа – чувство причастности к первоистокам, чувство причастности к Первопроходцам. Советская школа программирования шла своим путём и до беды с EC ЭВМ/IBM была вполне самостоятельной: в чём-то слабее, в чём-то сильнее европейских и американских школ. Чувство причастности к первоистокам давало силу и уверенность: раз наши учителя сделали оптимизирующий Альфа-транслятор на том железе, на котором они его сделали, то мы способны, по крайней мере, повторить их достижение, а потом пойти ещё дальше.
Школа Вирта дарила нам новые горизонты. Читая препринты Вирта, мы открывали мир и открывались миру. Что гораздо важнее, у Вирта мы учились простоте и искусству борьбы со сложностью. Простой пример. Первые компиляторы с языка Модула-2 были двухпроходными, того требовал язык. Так и наш первый кросс-компилятор, сделанный Дмитрием Кузнецовым (Leo) на Burroughs 6700 под руководством И.В.Поттосина, был двухпроходным. Потом была история "Кроноса". Когда у нас заработал первый "Кронос", мы в срочном порядке сделали компилятор с урезанной Модулы-2, чтобы можно было вести разработку на самом "Кроносе". Мы называли этот язык и компилятор Модула-0. Компилятор был однопроходным, для чего пришлось внести изменение в язык. А потом пришла пора делать полный компилятор Модулы-2, и мы в соответствии с описанием языка начали делать его двухпроходным. Но тут пришло известие, что Вирт подкорректировал язык (добавил forward-описания процедур), и теперь можно делать однопроходный компилятор. В итоге мы упростили себе жизнь и ускорили разработку. Главное было в том, что язык программирования, который до того был «священной коровой», принесенной откуда-то свыше, стал всего лишь рабочим инструментом, который можно подточить и подправить. Мы получили урок: разрешение творчества и понимание важности и полезности упрощений.
Школа НФ ИТМиВТ. В НФ ИТМиВТ я делал свой университетский диплом. Темой его был компилятор с языка Edison для ЭВМ "Эльбрус" (спасибо Александру Гутману, который дал такую возможность). В дипломной работе соединились две школы: европейская школа программирования (язык Edison, разработанный Пер Бринч Хансеном) и советская школа, которая дала нам "Эльбрусы" и противоракетную оборону нашей страны. Во время работы над дипломом настольными книгами у меня были «Автокод Эльбрус», ксерокс книги Пер Бринч Хансена "On Pascal Compilers", книга Дэвида Гриса «Конструирование компиляторов для цифровых вычислительных машин». И маленькая брошюрка — описание языка Edison.
Вот эту третью школу я раньше не видел. А она была очень важна для меня. С точки зрения технологии программирования это была, во многом, строгая академическая школа А.П. Ершова. Но дух там царил иной: реальная прикладная работа для решения реальных инженерных задач. Лично мне ближе настоящее осязаемое дело, хочется видеть не просто идеи и статьи, а инженерно воплощённый замысел. Мне очень важно, что мой компилятор с языка Модула-2 до сих пор используется для создания бортового программного обеспечения отечественных спутников. Я смотрю на небо и понимаю — там летает то, в чём есть частичка и моего труда. Это чувство причастности к чему-то большому и настоящему. А что может быть более настоящим, чем защита своей Родины?
Каждая школа дала своё, а вместе — ещё большее, так как школы не противоречили, а дополняли друг друга. Я не стал, да и не мог стать «фанатом» ни одной школы. От этих корней постепенно шёл к пониманию своего пути – принципиально иного программирования.
Читая новости о том, что сегодня происходит в Старом Свете, с горечью думаю: последними фундаментальными достижениями компьютерной Европы стало то, что дали нам Эдсгер Дейкстра, Тони Хоар и Никлаус Вирт.
Но не будем о грустном. Мы живём в России. И пусть «той России уж нет», но есть та, которая у нас есть, и та, которую мы можем построить.
Алексей Недоря
Рекомендуемые материалы 1. Kronos (история одного проекта): http://www.kronos.ru/ 2. Проект Oberon2005 (Большое турне Вирта по России): http://oberon2005.oberoncore.ru 3. Виртуальный компьютерный музей Эдуарда Пройдакова. "Никлаус Вирт в Академгородке"
Об авторе Алексей Недоря – кандидат физико-математических наук (1994). Родился 11 января 1962 г. (Чита). В 1979 г. поступил в Новосибирский государственный университет (НГУ). В 1982 г. стал одним из основателей Intruders Club – неформальной компьютерной группы студентов физического и механико-математического факультетов НГУ. В 1984 г. окончил НГУ (дипломная работа — компилятор с языка Edison Пер Бринч Хансена для многопроцессорного вычислительного комплекса»Эльбрус-1«). Весной 1984 г. участвовал в создании легендарной группы»Кронос«(первый советский 32-разрядный процессор), являлся основным разработчиком ОС Excelsior и нескольких компиляторов с языка Модула-2. С 1985 до 1988 гг. работал в ВНТК»Старт» (ответ СССР на японский амбициозный проект компьютеров пятого поколения). Далее до 1998 г. в Институте систем информатики им. А.П.Ершова Сибирского отделения РАН. В 1990 г. познакомился лично с Никлаусом Виртом; в 1991 г. был на стажировке у профессора Вирта в ETH Zurich (Швейцарский федеральный технологический институт, Цюрих). В 1991-1994 гг. работал над инструментальной многоцелевой системой XDS (Модула-2 и Оберон-2) и системами генерации программного кода для бортовых космических комплексов. C 1994 г. – глобальный ИТ-аутсорсинг и офшорное программирование. C 2001 г. — разработка нового инструментария программирования.