Реферат: Летопись языков Паскаль
В отношении языка Turbo Pascal Никлаус Вирт высказывается довольно дипломатично (1993): «Фактический стандарт для Паскаля был определен компанией Borland просто потому, что ими был создан компилятор, который распространялся широко и дешево. Borland расширяла Паскаль на протяжении ряда лет, и некоторые из этих нововведений были не столь хорошо интегрированы в язык, как мне бы того хотелось. Я был менее компромиссным в отношении собственных расширений и потому дал новому проекту иное имя (речь идет о языке Модула-2. - Прим. ред.) Например, то, что Borland назвала UNIT, мы называли MODULE. Однако UNIT - это вставки в виде исходного текста, тогда как MODULE является отдельной единицей компиляции, которая допускает полный контроль типов и компоновку на этапе загрузки». На вопрос о том, какую бы оценку Вирт поставил Модуле-2, если исходить из того, что Фортран заслужил «2», а Паскаль - «5», он ответил: «6». (В школах Швейцарии это наивысший балл.)
В тени марки Borland оказалось имя автора Turbo Pascal датчанина Андерса Хейльсберга. В 1983 г. Borland выкупила лицензию на компилятор Хейльсберга и приняла автора на работу. В ноябре того же года на рынке появился Turbo Pascal 1.0 для CP/M и компьютеров 8086. История сохранила даже данные о компактности той реализации: размер исполняемого .COM-файла компилятора составлял 33 Кбайт, а все файлы занимали 130 Кбайт. В январе 1989 г. Microsoft выпустила Quick Pascal, позиционировавшийся как конкурент Borland Pascal. Но он продержался недолго. Microsoft с Borland поделили рынок, разведя ветви Си и Паскаля еще дальше друг от друга.
Что касается Хейльсберга, то он 13 лет проработал в компании и стал руководителем проекта Delphi. В октябре 1996 г. Андерса Хейльсберга за 3 млн. долл. приобрела корпорация Microsoft, и теперь он ведущий архитектор языков .NET, а также автор языка C#. (При разработке C#, по словам Хейльсберга, рассматривались Си++, Java, Модула-2, Smalltalk.)
Его прежняя компания, вернув себе имя Borland после нескольких лет работы под вывеской Inprise, предпринимает теперь активные шаги по укреплению позиций своего Паскаля в бурно развивающейся ОС Linux. Обеспечивая простоту миграции программ, созданных для Windows на Visual Basic и Object Pascal, в среду Linux под единым инструментарием Kylix, Borland Software намерена нанести серьезный удар по, казалось, незыблемым позициям Microsoft.
Особенности Паскаля и его преемники
Язык Паскаль явился не просто ревизией Algol-W. Он создавался Виртом под воздействием идей Чарльза Энтони Хоара, опубликованных впоследствии в работе «Заметки по структуризации данных» (Hoare C.A.R. Notes on Data Structuring Academic Press, 1972). Вклад английского ученого в разработку языка был столь значителен, что его смело можно назвать крестным отцом Паскаля.
От языка Паскаль принято отсчитывать эпоху структурного программирования. А все началось с того, что известный голландский специалист Эдсгер Дейкстра опубликовал статью «Структурноепрограммирование» (Dijkstra E.W. Structured Programming // NATO Science Committee, 1969). В ней он предложил ограничить логику управления программы всего тремя формами: следованием (sequence), ветвлением (selection) и циклом (iteration). Из этого вытекало, что в языках Алгол и ПЛ/1 оператор безусловного перехода (goto) был уже попросту не нужен. Вирт, правда, не рискнул изъять его из Паскаля. Но главное было в другом: структурное программирование задавало нисходящий принцип разработки (пошаговая декомпозиция), предусматривало структурирование логики и данных, за счет простоты и математической основы повышало надежность ПО. Все это органично вписывалось в возможности лаконичного Паскаля.
«Почти все в программном обеспечении может быть реализовано, продано и даже использовано, если проявить достаточную настойчивость... Но существует одно качество, которое нельзя купить таким образом, - это надежность. Цена надежности - это погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить» - так Энтони Хоар определил для себя главный критерий, ставший доминантой и для Вирта.
Взвешенный подход, простота и лаконичность - вот залог надежности. Вирт отмечает: «Поддержание языка максимально простым и регулярным всегда было приоритетом в моей работе: описание Паскаля занимало около 50 страниц, Модулы-2 - около 40, а Оберона - и вовсе 16. И я рассматриваю эту тенденцию как прогрессивную. Истинная ценность языков программирования зависит от качества и практичности их абстракций>.
Характеризуя замысел своего языка, Вирт пишет: «Главной инновацией Паскаля было введение вариативности структур и типов данных подобно тому, как Алгол ввел вариативность управляющих структур. Алгол предлагал только три базовых типа данных: целые и вещественные числа, значения истинности, массивы; Паскаль ввел дополнительные базовые типы и дал возможность определять новые базовые типы (перечисление, диапазоны), а также новые виды структурирования: запись, множество, файл (последовательность), часть которых была представлена в Коболе. Наиболее важной стала, конечно, рекурсивность структурных описаний и вытекающая из нее возможность осуществлять комбинирование и вложение структур>.
А что же говорили противники языка? Из всех критических работ по Паскалю, пожалуй, наибольшую известность получила статья Брайана Кернигана «Почему Паскаль не является моим любимым языком программирования». В 1981 г. она появилась на свет в виде препринта AT&T Bell Laboratories. Поскольку ряд авторитетных журналов отказались ее публиковать, она стала расходиться «нелегальными» путями. Вширокойпечатиейдовелосьвыйтилишьв 1984 г. всборнике «Comparing and Assessing Programming Languages» (Prentice-Hall, 1984).
Как известно, Керниган вместе с Ритчи готовил подробное описание языка Си, а потому его мнение особенно интересно. Началось все с того, что Керниган решил адаптировать исходные тексты своей книги «Software Tools» с Си для Паскаля. К работе над примерами из книги, как пишет Керниган, он приступил весной 1980 г. и завершил ее лишь в январе 1981 г.
Среди достоинств языка Керниган отметил следующие: механизм рекурсии, тип «перечисление», тип «запись», булевы переменные. Из серьезных недостатков он выделил отсутствие поддержки массивов с открытыми границами, неудобство работы со строками, отсутствие статических переменных (по отношению к процедурам и функциям), настоятельную потребность в раздельной компиляции, ограниченные средства ввода-вывода.
Керниган пишет: «Паскаль может быть превосходным языком для обучения новичков тому, как писать программы... Он определенно оказал воздействие на проектирование новых языков, из которых Ада, пожалуй, является наиболее важным. Но в своем стандартном виде (как нынешнем, так и предлагаемом) Паскаль не подходит для написания реальных программ».
Многие конкретные претензии сделаны по существу. Однако, по всей видимости, Керниган немного лукавил, говоря о недостатках Паскаля и умалчивая о работах Вирта, направленных на их устранение. А ведь к весне 1980 г. Вирт и его коллеги не только уже завершили работы по компьютеру Лилит и языку Модула-2, но и опубликовали их результаты. К тому же в 1977 г. в известном журнале Software - Practice & Experience вышла статья Хоара, Уэлша и Снирингера с анализом проблем Паскаля.
Просчеты при создании Паскаля были устранены в последующих языках швейцарской школы (Вирта и его коллег). Все они четко следовали основным тенденциям развития технологии программирования. Программирование структурное (Паскаль), модульное (Модула-2), объектно-ориентированное (Оберон-2), компонентное (Component Pascal) - все это значительные шаги в индустрии ПО.
«Наша конечная цель, - пишет Вирт, - расширяемое программирование (extensible programming). Под этим я понимаю возможность конструирования таких иерархий модулей, когда каждый модуль добавляет новую функциональность в систему. Расширяемое программирование подразумевает, что добавление модуля возможно без необходимости вносить какие-либо изменения в существующие модули - не должно быть необходимости даже их перекомпилировать. Новые модули не только добавляют новые процедуры, но, что более важно, добавляют также новые (расширенные) типы данных. Мы продемонстрировали практичность и экономичность этого подхода при проектировании Oberon System».
Паскаль жив?!
Говоря об отстраненном и предвзятом отношении людей к «чужим» языкам, Вирт отмечает: «Многие относятся к стилям и языкам программирования, как к религиозным конфессиям: если вы принадлежите к одной из них, то не можете принадлежать к другой. Но это ложная аналогия, и она сознательно поддерживается по причинам коммерческого порядка».
В самом деле, противостояние двух лагерей - Си и Паскаля - все эти годы намеренно поощрялось. Между ними методично возводили высокую стену, а затем принялись уничтожать поодиночке. В лице UNIX язык Си нашел себе надежную защиту от чересчур агрессивных модернистов-реформаторов. У Паскаля же такого «панциря» не оказалось. Он продолжает свой путь во многом благодаря преданности своих почитателей, которая подчас просто поражает.
* * *
В заключение предоставим слово оппоненту Никлауса Вирта - Деннису Ритчи: «Паскаль - очень элегантный язык. Он по-прежнему жив. Он породил немало своих последователей и оказал глубокое воздействие на проектирование языков».
ОБ АВТОРЕ:
Руслан Богатырев - руководитель «Студии программных технологий 1024» при издательстве «Открытые системы». E-mail: [email protected].
Из биографии Н. Вирта
Профессор Никлаус Вирт (Niklaus K. Wirth), автор языка Паскаль, закончил Швейцарский федеральный технологический институт ETH (Eidgenoessische Technische Hochschule) в родном Цюрихе (1958). В Лавальском университете в Квебеке (Канада) он получил степень магистра (1960). В 1963 г. в Университете Калифорнии в Беркли (США) Вирт под руководством профессора Гарри Хаски реализовал расширение Алгола-60 (язык Euler) и защитил диссертацию. В 1963-1967 гг. Вирт преподавал в Стэнфордском университете (США). В это же время он был приглашен в международную экспертную группу IFIP Working Group 2.1, занимавшуюся проектированием языка Алгол-68.
В 1967 г. Вирт вернулся на родину и стал доцентом Университета Цюриха. В 1968 г. он перешел в ETH, где занялся разработкой языка Паскаль. В 1970 г. был завершен первый компилятор Паскаля. В период 1978-1981 гг. Вирт возглавлял проект, в результате которого был разработан язык Модула-2, ориентированный на него 16-разрядный персональный компьютер Лилит (Lilith) и ОС Medos. Все ПО, включая системное, было полностью реализовано на Модуле-2. В 1984 г. Никлаус Вирт за большой вклад в развитие языков программирования и за создание персонального компьютера Лилит был удостоен премии Алана Тьюринга - самой престижной и почетной в компьютерном мире, которая по своему значению стоит в одном ряду с Нобелевской премией.
В период 1986-1989 гг. Вирт вел проект по созданию нового языка Oberon, расширяемой объектно-ориентированной ОС Oberon и 32-разрядной рабочей станции Ceres. Многие идеи того проекта были положены сотрудниками Sun Labs в основу языка и технологии Java.
С 1990 г. Вирт руководил Институтом компьютерных систем при ETH. В 1999 г. он ушел на заслуженный отдых и стал почетным профессором родного ETH.
Наиболее важные реализации Паскаля
Система | Год | Руководитель | География | Организация |
ETH Pascal | 1970 | Никлаус Вирт | Европа | ETH |
UCSD Pascal | 1978 | Кеннет Боулес | Америка | UCSD |
Turbo Pascal | 1983 | Андерс Хейльсберг | Америка | Borland Int. |
Стандарты Паскаля
В 1977 г. во время конференции по Паскалю в Саутгемптоне Э. Эддиман попросил оказать помощь в формировании комитета по стандартизации при Британском институте стандартов BSI (British Standards Institute). В 1978 г. для обсуждения расширения Паскаля на конференции в Сан-Диего, проходившей под руководством Кеннета Боулеса, встретились представители промышленных кругов. С этого и началась стандартизация языка.
В 1982 г. Международная организация по стандартизации (ISO) выпустила стандарт ISO 7185:1983. В это же время вышел американский стандарт ANSI/IEEE 770X3.97:1983. Принято выделять три принципиально разных стандарта: Unextended Pascal (исходный), Extended Pascal (расширенный) и Object-Oriented Extensions to Pascal (объектно-ориентированный). В 1989 г. стандарт ISO 7185:1983 был подкорректирован, после чего надобность в самостоятельном ANSI-стандарте отпала и он был заменен ссылкой на ISO 7185:1990. Одним из главных отличий Extended Pascal стало введение модульности, необходимой для раздельной компиляции. Extended Pascal закреплен в международном стандарте ISO/IEC 10206 (1991) и американском ANSI/IEEE 770X3.160:1989. В 1993 г. объектно-ориентированные расширения по отношению к Extended Pascal были сформулированы в техническом отчете ANSI/X3-TR-13:1994.
Что касается самой распространенной реализации языка - Turbo Pascal, а также Object Pascal (Delphi), то ни одному из этих стандартов они не соответствуют. В свою очередь, они неявно сами задают соглашения, которым пытаются следовать некоторые реализации.
Список литературы
Руслан Богатырев. Летопись языков Паскаль