- это имя в России известно многим. Три с лишним десятилетия назад профессор Вирт создал в далекой Швейцарии язык программирования Паскаль. Казалось бы, одного этого было достаточно, чтобы навечно вписать его имя в летопись компьютерных наук. Но в жизни нередко бывает так, что признание и известность получают далеко не самые лучшие и не самые совершенные творения. Вот и в случае с Паскалем мы видим лишь вершину айсберга, а большая часть творчества Вирта до сих пор для многих остается неизвестной.
Никлаус Вирт родился 15 февраля 1934 г. в небольшом городке Винтертуре, в предместье Цюриха. Родился Никлаус в семье Уолтера и Хедвиг Вирт. Он жил неподалеку от школы, где преподавал его отец. В их доме была хорошая библиотека, где Вирт находил немало интересных книг про железные дороги, турбины и телеграф.
Небольшой городок Винтертур имеет многовековую историю и славится своими машиностроением: там выпускаются локомотивы и дизельные двигатели. С детских лет Вирт увлекался техником, особенно авиамоделированием. Он буквально грезил небом. Но для запуска ракет нужно было получать топливо, и потому он занялся химией. Юный Вирт оборудовал в подвале школы "секретную" лабораторию. Ничто не могло его остановить: однажды сделанная им модель отклонилась от заданной траектории и угодила под ноги директору школы. Однако Вирт все равно продолжал упорно идти к намеченной цели.
Спустя несколько десятилетий Никлаусу Вирту, как и Кену Томпсону, автору UNIX, довелось полетать на МИГе с военного аэродрома в Кубинке, что находится под Москвой. Сбылась его заветная мечта. Лучше всего мотивацию профессионального творчества Вирта раскрыл его коллега по Стэнфордскому университету (США), профессор Дональд Кнут: "Вирт всегда хотел создавать аэропланы, и ему нужен был самый лучший инструментарий. Вот почему он проектировал много компьютерных языков и микрокомпьютеров."
От строительства моделей Никлаус довольно быстро перешел к разработке их дистанционного управления. Когда ему исполнилось 18 лет, то он с еще двумя цюрихскими авиамоделистами получили из Англии желанную радиоаппаратуру. Это предопределило его дальнейшую судьбу – в 1954 г. Вирт поступил на факультет электроники в цюрихский ETH (Eidgenoessische Technische Hochschule, Швейцарский федеральный технологический институт). После четырех лет обучения Вирт получил степень бакалавра в области электротехники. А затем начинается славное десятилетнее заокеанское научное "турне" будущего "отца Паскаля" и "короля компиляторов" по маршруту Швейцария – Канада – США – Швейцария.
Свое обучение Вирт продолжил в Лавальском университете г. Квебека (Канада), где в 1960 г. получил степень магистра. Затем его пригласили в университет Калифорнии в Беркли (США) – будущую жемчужину Кремниевой долины. Там под руководством профессора Хаски в 1963 г. Никлаус Вирт защитил диссертацию, посвященную развитию Алгола средствами Лиспа (язык Euler). Эта работа в буквальном смысле дала ему путевку в жизнь: Вирта приметили мэтры программирования и пригласили в Комитет IFIP по стандартизации Алгола. Та школа не прошла даром: на всю жизнь Вирт запомнил, что доказывать свою правоту нужно делом, особенно когда тебя не хотят слышать. В разработке языков он навсегда отказался от абстрактно-научного подхода в пользу математически инженерного. По его словам, лучше сначала реализовать язык и лишь потом следует о нем писать.
С 1963 по 1967 гг. Вирт работал доцентом (assistant professor) в Стэнфордском университете и в 1967 г. вернулся в этом звании в университет Цюриха. А в 1968 г. он получил в ETH звание профессора компьютерных наук и начал возводить на родине свой "швейцарский" Стэнфорд. Двадцатилетие с 1969 по 1989 гг. было, пожалуй, самым плодотворным периодом в жизни Вирта (табл. 1). Он продолжал строить свою школу, уделяя немало времени организационной деятельности. C 1982 по 1984 гг. (а потом и с 1988 по 1990 гг.) Вирт возглавлял в ETH факультет компьютерных наук, а с 1990 г. руководил Институтом компьютерных систем (Institute of Computer Systems) при ETH. На пенсию профессор Вирт ушел 1 апреля 1999 г. по достижении 65-летнего возраста.
Три друга-единомышленника: Хоар, Дейкстра и Вирт.
Романтические 1960-е годы положили начало дружбе трех патриархов структурного программирования – голландца Эдсгера Дейкстры, англичанина Энтони Хоара и швейцарца Никлауса Вирта. Этих "нобелевских" лауреатов (премия Тьюринга, присуждаемая ассоциацией ACM, вручается раз в жизни и приравнивается в компьютерных науках к Нобелевской) сблизили не столько абстракции компьютерных наук, сколько четкая профессиональная позиция.
Эдсгер Дейкстра (Нидерланды, Эйндховенский технологический университет). Из речи при вручении премии Тьюринга (Бостон, США, 14 августа 1972 г.).
Когда компьютеров еще не было, то программирование не составляло никакой проблемы. Когда у нас появилось несколько маломощных компьютеров, то программирование стало проблемой средней сложности. Теперь же, когда мы располагаем гигантскими компьютерами, то и программирование превращается в гигантскую проблему.
Энтони Хоар (Великобритания, Оксфордский университет). Из речи при вручении премии Тьюринга (Нэшвилл, США, 27 октября 1980 г.).
Почти все в программном обеспечении может быть реализовано, продано и даже использовано, если проявить достаточную настойчивость. Но существует одно качество, которое нельзя купить, – это надежность. Цена надежности – погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Никлаус Вирт (Швейцария, Швейцарский Федеральный технологический институт). Из речи при вручении премии Тьюринга (Сан-Франциско, США, октябрь 1984 г.):
«Мы живем в сложном мире и стараемся решать сложные по своей сути проблемы, которые зачастую для своего решения требуют сложных устройств. Однако это не значит, что мы не должны найти элегантные решения, убеждающие своей ясностью и эффективностью. Простые элегантные решения более эффективны, но найти их труднее, чем сложные, и для этого требуется больше времени».
Самым известным достижением профессора Вирта считается язык Паскаль (1970). Безусловно, многие об этом языке слышали и знают его. Паскаль сыграл огромную роль в области формирования мировоззрения нескольких поколений программистов. Главное его достоинство в простоте и элегантности: он построен на четких принципах структурного программирования, сформулированных Эдсгером Дейкстрой, на красивой математической базе, заложенной Энтони Хоаром, и на блестящем архитектурном воплощении идей Algol-W, реализованных Никлаусом Виртом. С технологической точки зрения, Паскаль был интересен не только тем, что его компилятор, созданный в ETH, стал одной из первых реализаций языков высокого уровня на самом себе, примерно на два года опередив компилятор Си. В ходе работ над ним в 1973 г. была придумана абстрактная Pascal-машина (P-машина), исполняющая специальный P-код. Чтобы решить проблему переноса компилятора Паскаля на разные платформы, Вирт решил воспользоваться испытанными временем методами интерпретации. Из наиболее известных решений, предшествовавших P-коду, можно назвать реализацию языка Snobol-4 (Р. Грисуолд, 1967), где в качестве кода абстрактной машины использовался язык SIL (System Implementation Language).
Как известно, введение виртуальной (абстрактной) машины Java преподносилось ее разработчиками из Sun Labs едва ли как не фундаментальное открытие в практике языков программирования. Один из учеников Вирта, Михаэль Франц, заметил по этому поводу следующее: "Переносимость Java основана на наличии виртуальной машины, позволяющей легко имитировать большое число архитектур. Идея виртуальной машины была очень популярна уже более двадцати лет назад, хотя впоследствии о ней забыли. Тогда речь шла о Pascal-P – созданной в ETH реализации Паскаля, которая сыграла решающую роль в распространении этого языка. Интересно, что виртуальные машины для Паскаля и Java весьма схожи по архитектурe."
Идеи P-кода нашли применение не только в платформах Java и NET, не только в других языках и машинах баз данных, но и в реализации аппаратных средств. Например, для непосредственного исполнения P-кода в Western Digital в 1979 г. был разработан специальный набор WD9000 PEngine. В Стэнфордском университете в 1980 г. был создан экспериментальный процессор POMP. Появившаяся в 1978 г. коммерческая реализация Паскаля – UCSD Pascal стала еще более известной, и многие забыли, где же впервые возникли P-код и P-машина. Вот что говорит об этом Вирт: "После того как стало известно о существовании Паскаля, несколько человек попросили нас помочь в его реализации на различных машинах, подчеркивая, что они намерены использовать его для обучения и что быстродействие для них не имеет первостепенного значения. После этого мы решили создать версию компилятора, которая генерировала бы код для машины нашей собственной конструкции. Позднее этот код стал известен как P-код... Pascal- P оказался исключительно удачным языком для распространения среди большого числа пользователей. И если бы у нас хватило мудрости предвидеть масштабы такого развития событий, то мы приложили бы больше усилий и тщательности при разработке и документировании P-кода".
Язык Паскаль многими воспринимался прежде всего как язык для преподавания компьютерных наук. Но сам Вирт не согласен с таким заведомым сужением его потенциала (1984): "Утверждалось, что Паскаль был разработан в качестве языка для обучения. Хотя это утверждение справедливо, но его использование при обучении не являлось единственной целью. На самом деле я не верю в успешность применения во время обучения таких инструментов и методик, которые нельзя использовать при решении каких-то практических задач. По сегодняшним меркам Паскаль обладал явными недостатками при программировании больших систем, но 15 лет назад он представлял собой разумный компромисс между тем, что было желательно, и тем, что было эффективно".
Да, этот язык был далеко не идеальный. В свое время Брайан Керниган, известный популяризатор языка Си, соавтор классического руководства по Си (K&R), написал критическую статью "Почему Паскаль не является моим любимым языком программирования". Если с ней внимательно ознакомиться, то можно решить, что Никлаус Вирт сделал из нее правильные выводы и в языке Modula-2 (1980) под воздействием статьи устранил многие изъяны канонического Паскаля. Однако следует иметь в виду одно немаловажное обстоятельство. Наделавшая шума работа Кернигана была написана 2 апреля 1981 г., т.е. через два года после реализации группой Вирта в ETH первого компилятора Modula-2 и через год после выпуска аппаратной реализации Modula-2 – персонального компьютера Lilith. В апреле 1993 г. на Конференции ACM по истории языков программирования Вирт в ответ на вопрос одного из своих коллег поставил языку Modula-2 оценку "6 баллов" (наивысшая оценка в школах Швейцарии).