MacLisp

MACLISP (также Maclisp) — диалект языка программирования Lisp, разработанный в лаборатории искусственного интеллекта MIT, которая в то время (поздние 60-е) называлась Project MAC (откуда собственно и получился префикс в названии языка, никакой связи с компьютерами Macintosh фирмы Apple здесь нет; такой же префикс в названии и по той же причине имеет, например, система компьютерной алгебры Macsyma)

Хотя язык очень примечателен, в частности тем, что повлиял на множество более поздних лиспов, таких, как Zeta Lisp и Common Lisp, использовался для первых реализаций Macsyma, SHRDLU и Multics Emacs, в настоящее время он практически нигде не используется.

Создание

С начала 1960-х годов в MIT был запущен проект MAC, в рамках которого велись исследования использования вычислительных машин в интерактивном режиме и разработка подходящих для такой работы языков программирования и операционных систем. MacLisp (далее Маклисп) был разработан в рамках этого проекта, основой для него стала система Lisp 1.5. В 1964 году была создана первая реализация Маклиспа для PDP-6, в 1968 — для PDP-10, причём последняя работала как под управлением операционной системы ITS, разработанной в лаборатории искусственного интеллекта MIT, так и под ОС TOPS-10/20 — стандартной ОС для PDP-10/20 фирмы DEC. Также была создана реализация для компьютера GE-600, работавшая под управлением ОС Multics.

Возможности

Маклисп был чрезвычайно мощной для своего времени системой. На её облике отразилось всё многообразие задач, которые решались в проекте MAC и вообще в исследованиях по искусственному интеллекту в MIT. Помимо традиционных задач символьной обработки, Маклисп использовался для разработок в самых разных областях. Так, работы в области робототехники и обработки речи и изображений потребовали от системы высокой чисто вычислительной эффективности, а также привели к реализации широкого набора математических типов данных, в том числе векторов, матриц и битовых полей. В систему были включены арифметические типы и операции с неограниченной точностью (базирующиеся на алгоритмах, разработанных Д. Кнутом), позволяющие в ряде случаев существенно упростить решение некоторых математических задач, пусть и за счёт значительных вычислительных затрат. Была реализована мощная библиотека математических функций.

В части вклада в развитие самого языка можно отметить появившиеся в Маклиспе макросы чтения и таблицы чтения, позволившие «достраивать» язык, расширяя его в нужном направлении новыми структурами. Также в язык были включены средства обработки исключений и средства параллельной обработки.

Маклисп стал первой лисп-системой, для которой был реализован высокоэффективный компилятор (до этого лисп-системы не могли похвастаться высокой вычислительной производительностью и отчасти по этой причине сформировалось отношение к Лиспу как к «языку для учёных, а не для промышленности»). Причём эффективность трансляции была достигнута за счёт применения специфически лисповских методов: исходная программа транслировалась в промежуточную машинно-ориентированную форму, имеющую вид лисповских списков (так называемая LAP — List Assembly Program). Машинный код в этой форме путём формальных преобразований подвергался оптимизации, в результате которой результирующая объектная программа для вычислительных задач оказывалась, как правило, более эффективна, чем аналогичная программа на Фортране, оттранслированная лучшими фортрановскими компиляторами для той же платформы.

Эксплуатация системы

Система MAC Lisp эксплуатировалась и развивалась вплоть до 1980-х годов, оказав существенное влияние на появлявшиеся в 1960—1980 годах реализации Лиспа, в том числе став одним из источников проектирования стандарта Common Lisp. Эксплуатация системы практически прекратилась в 1980-х годах вместе с прекращением использования компьютеров PDP-10/20, на которых она изначально базировалась. Намного пережили систему разработанные на Маклиспе в рамках проекта MAC система символьных вычислений Macsyma и экранный текстовый редактор Emacs.

Macsyma и Emacs

Исторически наиболее известные результаты проекта MAC — это система символьных вычислений Macsyma и экранный текстовый редактор Emacs. Macsyma — мощная система символических вычислений, по сути — пионер в этой области компьютерных систем, разработка её велась в MIT с 1968 по 1982 год. Система была целиком написана на Маклиспе и была, по всей видимости, самой большой широко известной программой в мире, целиком написанной на Лиспе. Именно перенос Macsyma на другие аппаратные и программные платформы стал тем мотивом, который вызвал появление нескольких диалектов Лиспа. После 1982 года была предпринята попытка коммерциализации разработки, но к 1999 году развитие системы было прекращено и к настоящему моменту она не используется. Имеется форк, сделанный на основе последней свободной версии 1982 года, он продолжает разрабатываться под именем Maxima и доступен под лицензией GNU GPL, современные версии компилируются с помощью Common Lisp.

Emacs — полноэкранный текстовый редактор, бывший частью среды разработки Маклиспа, но применявшийся и отдельно, зачастую для целей, не имеющих ничего общего с программированием. Отличительная особенность Emacs’а — возможность программирования поведения редактора при помощи скриптов на внутреннем языке Emacs Lisp. Ядро редактора представляет собой интерпретатор Emacs Lisp и некоторый набор системно-зависимых сервисов, а основная часть написана на самом Emacs Lisp. Изначально ядро Emacs’а было написано на Маклиспе; впоследствии, при переносе на микрокомпьютеры, оно было переписано на Си, так как на тот момент не существовало эффективных реализаций Лиспа для ПК. За годы использования редактор приобрёл множество написанных на Emacs Lisp дополнений, расширивших его функциональность до огромных размеров, что стало поводом для шутки: «Emacs — отличная операционная система, в которой не хватает только приличного текстового редактора».

Ссылки

http://maclisp.info/ — Страничка Kent Pitman, посвященная MacLisp.

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.