Если кратко обозначить ключевые вехи пути Никлауса Вирта, они выглядят так:
1. 1970. Pascal — структурное программирование (structured programming).
2. 1979. Modula-2 — модульное программирование (modular programming).
3. 1988. Oberon — расширяемое программирование (extensible programming).
На каждом последующем витке эволюции происходило критическое редуцирование исходного ядра, языка-предшественника (изъятие лишнего) и привнесение ровно одной ключевой новой конструкции: это были модуль (module) в Modula-2 и расширение типа (type extension) в Oberon.
Описание языков также эволюционировало в сторону лаконичности: Pascal (50 стр.), Modula-2 (40), Oberon (16).
Самым известным достижением проф. Вирта считается язык Pascal (1970). Безусловно, многие об этом языке слышали и знают его. Pascal сыграл огромную роль в области формирования мировоззрения нескольких поколений программистов. Главное его достоинство в простоте и элегантности: он построен на чётких принципах структурного программирования, сформулированных Эдсгером Дейкстрой, на красивой математической базе, заложенной Энтони Хоаром, и на блестящем архитектурном воплощении идей Algol-W (1966), реализованных Никлаусом Виртом. С технологической точки зрения, Паскаль был интересен не только тем, что его компилятор, созданный в ETH Zurich, стал одной из первых реализаций языков высокого уровня на самом себе, примерно на два года опередив компилятор C. В ходе работ над ним в 1973 г. была придумана абстрактная Pascal-машина (P-машина), исполняющая специальный P-код. Чтобы решить проблему переноса компилятора языка Pascal на разные платформы, Вирт решил воспользоваться испытанными временем методами интерпретации. Из наиболее известных решений, предшествовавших P-коду, можно назвать реализацию языка Snobol-4 (Р. Грисуолд, 1967), где в качестве кода абстрактной машины использовался язык SIL (System Implementation Language).
Язык Modula-2 (1979) был не только компактной и эффективной альтернативой языку Ada. Он намного опережал те реализации идей модульного программирования, которые лишь спустя годы и в гораздо менее продуманном виде нашли своё отражение в Turbo Pascal и Delphi (и в так и не выпущенной на рынок системе программирования Turbo Modula-2, трансформировавшейся в JPI Modula-2). Знаменитая операционная система OS/400 для IBM AS/400 была реализована на Modula-2. Центр системных исследований корпорации Digital (DEC Systems Research Center) взял этот язык в качестве основы реализации своих внутренних проектов, создав впоследствии язык Modula-3.
Подлинной жемчужиной архитектурного творчества Никлауса Вирта стал проект Oberon (1988). Расширяемая операционная система Oberon (Oberon System), созданная одновременно с языком Oberon, играла в начале 1990-х — конце 2000-х годов примерно такую же роль, что играли в 1980-х годах проекты Alto и Xerox Star знаменитого центра Xerox PARC, откуда пошли современные персональные компьютеры и текстовые редакторы. Для таких корпораций, как IBM, Microsoft и Sun Microsystems, проект Oberon стал источником плодотворных идей, среди которых можно выделить документо-ориентированный интерфейс, браузеры, промышленные языки разработки ПО (Java и C#), машинно-независимый мобильный код (JVM и .NET CLR), аплеты, компонентное ПО, динамическую компиляцию (JIT, AOC, DAC), смарт-теги, веб-службы и др.
Проф. Вирт с гордостью сообщал, что компилятор языка Oberon для рабочей станции Ceres реализован на языке Oberon. Он состоит из 6 модулей общим размером около 4 тыс. строк исходного текста, требует менее 50 Кбайт памяти и сам себя компилирует за 15 сек. на процессоре NS32532 (25 МГц). Впечатляет.
Системе Oberon предшествовали исследования, которые проводились в ETH в 1981–1985 гг. на Lilith Юргом Гуткнехтом и его коллегами, Вернером Винигером и Шером. Сначала появился редактор Andra с поддержкой всевозможных окон, шрифтов, средств композиции страницы, а затем и редактор Lara. Примерно в тот же период проф. Вирт разработал графический редактор и завершил работы над новым однопроходным компилятором языка Modula-2.
К середине 1988 г. уже был готов компилятор для экспериментальной рабочей станции Ceres-2 (на базе NS-32532) и прошли первые публикации проф. Вирта (в апреле и июле; сначала «Type Extensions» в ACM Transactions on Programming Languages and Systems, а затем «From Modula to Oberon» в Software Practice & Experience). Вторая стадия проекта Oberon наступила летом 1991 г., когда было положено начало так называемой Oberon System 3.
«Перечислить все идеи, на основе которых сформировалось то, что сегодня называется Oberon, — писал Вирт, — просто нет возможности. Большинство этих идей родилось в ходе применения или изучения существующих языков (таких, как Modula-2, Ada, Smalltalk, Cedar), которые часто показывали нам, каких решений следует избегать».
Силы в ETH Zurich в 1990-е годы были сосредоточены на создании переносимых и перенацеливаемых компиляторов для разных платформ. Этим занимались преимущественно аспиранты Никлауса Вирта и Юрга Гуткнехта. К февралю 1990 г. был готов переносимый компилятор OP2. Кстати, именно его брали за основу при начале работ над компилятором Oberon-2 Алексей Недоря и его новосибирские коллеги по XDS. В июне 1989 г. доцент ETH Ханспетер Мёссенбок (Hanspeter Mössenböck) спроектировал Object Oberon, добавив ООП-расширения в канонический Oberon. Именно Мёссенбока, пожалуй, и следует считать автором Oberon-2, в который вылился Object Oberon. Проф. Вирт не возражал против соавторства в языке, поскольку расхождения по сравнению с Oberon были не фатальными. Хотя и не лежали в рамках того критического взгляда на ООП, который исповедовал сам Вирт. Весной 1991 г. в журнале Structured Programming (издательство Springer-Verlag, в редколлегии были Н. Вирт и Д. Кнут) в одном номере вышли две статьи, давшие публичную жизнь языку Oberon-2: «The Programming Language Oberon-2» и «Differences between Oberon and Oberon-2», под которыми стояли фамилии Мёссенбока и Вирта. К моменту появления Oberon-2 в 1991 г. информация о языке Oberon только-только стала выходить из стен ETH. Сторонние разработчики компиляторов сделали ставку именно на Oberon-2, считая, что это просто улучшенный Oberon.
В 1993 г. в ETH Zurich приехали представители Sun Microsystems во главе с Биллом Джоем. Они приобрели лицензию на систему Oberon и пригласили с ответным визитом выступить у них лучших учеников Вирта — Микаэль Франц сразу после защиты соответствующей диссертации в ETH делал доклад по динамической кодогенерации в Sun Labs в марте 1994 г., за 14 месяцев до выхода Java и за полгода до разработки браузера HotJava.
Франц так это прокомментировал (1996): «Согласно информации Sun [JavaSoft], идея переориентации Java на World Wide Web возникла в 1994 г. и принадлежала Биллу Джою, одному из основателей фирмы. Осенью 1994 г. началась работа по реализации web-браузера HotJava с возможностью выполнения аплетов. В марте 1995 г. браузер был представлен избранному кругу стратегических партнеров Sun, включая руководство корпорации Netscape Communications, чья публичная поддержка впоследствии немало способствовала успеху новой технологии. В августе 1995 г. состоялся триумфальный выпуск Java, который происходил в довольно необычной для базовых технологий форме — в виде серии пресс-конференций. Быть может, интересно то обстоятельство, что в марте 1994 г. автором был прочитан в Калифорнии ряд докладов по теме диссертации, причём один из них — в Sun Laboratories, Inc. Кроме того, упомянутый выше Билл Джой, который переориентировал проект Java на WWW, стал одним из первых обладателей лицензии на Oberon System из ETH, и в конце 1994 — начале 1995 г. он неоднократно связывался с ETH; в процессе контактов выяснилось, что он читал мою диссертацию».
В 1994 г. Микаэль Франц, разрабатывавший ранее кодогенератор Оберона для MC680×0 (Macintosh), завершил работу над кодогенератором в промежуточный код — OMI (Oberon Module Interchange). Впервые на русском языке информация об этом была опубликована в альманахе «Технология программирования» (1995, № 1). Идея Франца была проста — вместо традиционной схемы «компилятор — компоновщик — загрузчик» получить схему «компилятор — кодогенерирующий загрузчик», иными словами, совместить генерацию кода, компоновщик и загрузчик в одном флаконе.
Концепция «code-generation on-the-fly» (динамическая кодогенерация) с использованием компактного древовидного представления вместо классического байт-кода была положена в основу одноимённой диссертации М. Франца, которую он защищал в ETH Zurich в феврале 1994 г. Его научными руководителями были Никлаус Вирт и Юрг Гуткнехт. Крайне интересная диссертация. Редкий случай — в Цюрихе в марте 1994 г. она была переиздана в виде книги.
В Sun не рискнули сразу копировать всё из Oberon (идеи браузерной среды языка, аплетов и трансляции в мобильный код взяли, а вот путь реализации мобильного кода выбрали свой). В 1991 г. автор Java Джеймс Гослинг при реализации Oak (прототипа языка Java) взял старую идею P-кода Никлауса Вирта, которую хорошо знал: в 1975 г. Гослинг вместе с Недом Китлицем и Бобом Сайдботемом участвовал в построении среды программирования Pyxis/Multics Pascal, способной по быстродействию кода и удобству интеграции на равных конкурировать в Multics c родным для этой ОС языком PL/I. А начинали они с поддержки компилятора ETH Zurich Pascal, разработанного в Цюрихе группой профессора Вирта. В 1979 г. Гослинг реализовал PERQ — транслятор с P-кода в машинный код 32-разрядной DEC VAX.
В 1994 г. Sun не стали сразу включать новейшую хитроумную реализацию мобильного кода в древовидном представлении, которую предлагал в своей диссертации Франц, а сохранили готовый подход Гослинга. Для всей отрасли модель Sun на долгие годы стала эталоном. А Микаэль Франц уехал в Калифорнию (University of California, Irvine) и в настоящее время является ведущим американским экспертом по JIT-компиляции и мобильному коду.
Осенью 1997 г. Игорь Васильевич Поттосин, директор Института систем информатики Сибирского отделения РАН, сподвижник академика А. П. Ершова, переслал мне очень интересное письмо Никлауса Вирта, которое во многом повлияло на моё мировосприятие. Но сначала поясню ситуацию. В июньском номере журнала IEEE Computer (1997) вышла необычная статья под названием «The Feel of Java». Это, кстати, ведущее издание профессиональной ассоциации IEEE Computer Society. Приведу цитату.
≪ Java — это настоящий язык-трудяга. Это не результат чьей-то диссертации, это язык для работы. Java покажется очень знакомым самым разным программистам, поскольку мы предпочитаем делать проверенные вещи. Итак, что же такое Java? Java ощущаешь как игривый и гибкий язык. Вы можете создавать с его помощью такие вещи, которые сами являются гибкими. Java ощущаешь как детерминированный язык. Если вам хочется, чтобы он что-то сделал, просто попросите его об этом. В нём не видится ничего опасного: вы можете спокойно попробовать что-то сделать, и если окажетесь неправы, то быстро получите сообщение об ошибке. Java ощущаешь как очень богатый язык. Мы постарались снабдить его большой библиотекой классов. Поэтому не откладывайте дело в долгий ящик, а садитесь за компьютер и пишите свой код. ≫
Не складывается ли впечатление, что перед нами выдержка из рекламного объявления? А ведь эти слова принадлежат Джеймсу Гослингу, не только автору Java, но и человеку, который защитил диссертацию в известном университете Карнеги-Меллон, связанную с проектом Andrew Windows System, и который в те годы стал вице-президентом компании Sun Microsystems.
«Представьте себе, — не в силах сдержать возмущение, комментирует приведённую цитату проф. Вирт, — что эти слова были написаны в 1960-е годы, и замените слово «Java» на слово «Алгол». Автора сочли бы человеком психически ненормальным, слова его большей частью чужды науке и не имеют с ней ничего общего. Сегодня никто даже не возмущается. Нет никакой реакции от «научного» сообщества. Как же низко могла пасть компьютерная наука? И это делается с молчаливого одобрения такой уважаемой организации, как IEEE Computer Society?»
Руслан Богатырев из цикла "Никлаус Вирт. Заветы смиренного зодчего".
Инженерия зодчества: от железа к софту. Часть 2
Продолжение исследования эволюции инженерного подхода в архитектуре программного обеспечения.
Смирение европейской науки и диктатура американского бизнеса. Часть 1
Анализ современных тенденций в мировой науке и влияние бизнес-моделей на развитие технологий.