Введение
Диалект языка программирования Lisp
Maclisp (или MACLISP, иногда называемый MacLisp или MacLISP) — это язык программирования, диалект языка Lisp. Он возник в Массачусетском технологическом институте (MIT) в конце 1960-х годов и был основан на Lisp 1.5. Ричард Гринблатт был основным разработчиком оригинальной кодовой базы для PDP 6; Maclisp отличается от Lisp 1.5 использованием ячейки значения для доступа и хранения динамических значений переменных; Lisp 1.5 использовал линейный поиск в списке ассоциаций для определения значения переменной. Вычисление значения переменной в Maclisp происходит быстрее, но имеет иную семантику переменных. Maclisp также использовал макросы для чтения, чтобы сделать ввод и вывод более читаемыми, что называлось вводом/выводом (I/O). Вместо ввода (QUOTE A) можно было ввести 'A, чтобы получить то же s-выражение. Хотя обе реализации помещают функции в список свойств, Maclisp использует другой синтаксис для их определения. Maclisp также обладает функцией загрузки по требованию. Maclisp начал работу на компьютерах Digital Equipment Corporation PDP 6 и PDP 10 под управлением операционной системы Incompatible Timesharing System (ITS); позже он был портирован на все другие операционные системы PDP 10, например, Timesharing / Total Operating System, TOPS 10 и TOPS 20. Первоначальная реализация была написана на языке ассемблера, но более поздняя реализация для Multics использовала PL/I. Maclisp значительно развивался на протяжении своего существования. Добавлялись основные функции, которые в других языковых системах обычно соответствовали бы основным номерам релизов. Maclisp использовался для реализации компьютерной алгебраической системы Macsyma (CAS) или программы символьной алгебры. Разработка Macsyma также стимулировала появление нескольких функций в Maclisp. Программа SHRDLU для работы с блочным миром была написана на Maclisp, поэтому язык широко использовался в сообществе исследователей в области искусственного интеллекта (ИИ) в начале 1980-х годов. Он также использовался для реализации других языков программирования, таких как Planner и Scheme. Multics Maclisp был использован для реализации первого Emacs, основанного на Lisp. Maclisp был влиятельной реализацией Lisp, но в настоящее время активно не поддерживается. Сейчас он работает на эмуляторах PDP 10 и может использоваться для экспериментов с ранними программами ИИ.
Характеристики
Maclisp начинался с небольшого, фиксированного набора типов данных: конс-ячейка, атом (впоследствии названный символом), целое число и число с плавающей точкой. Позже были добавлены: массивы, которые никогда не являлись типами данных первого класса; целые числа произвольной точности (бигнумы); строки и кортежи. Все объекты (за исключением inums) реализовывались как указатели, и их тип данных определялся блоком памяти, на который они указывали, с особым случаем для малых чисел (inums). Программы могли интерпретироваться или компилироваться. Компилируемое поведение было таким же, как и интерпретируемое, за исключением того, что локальные переменные по умолчанию были лексическими в компилированном коде, если только не были объявлены как SPECIAL, и проверка ошибок не выполнялась для встроенных операций, таких как CAR и CDR. Компилятор Ncomplr (середина 1970-х годов) представил быструю поддержку численных вычислений в языках Lisp, генерируя машинный код (инструкции) для арифметических операций вместо вызова интерпретативных подпрограмм, которые выполняли разветвление в зависимости от типа данных. Это сделало арифметику Lisp сопоставимой по скорости с Fortran для скалярных операций (хотя реализация массивов и циклов в Fortran оставалась значительно быстрее). Изначальная версия была ограничена 18-битным адресным пространством PDP 10, и прилагались значительные усилия для поддержания лаконичной и простой реализации. Multics Maclisp обладал гораздо большим адресным пространством, но его использование было дорогостоящим. Когда память и вычислительная мощность PDP 10 были исчерпаны, была изобретена Lisp Machine: Lisp Machine Lisp является прямым потомком Maclisp. Также использовалось несколько других диалектов Lisp, и необходимость объединить сообщество привела к созданию современного языка Common Lisp.
Имя
Maclisp был назван в честь проекта MAC и не имеет отношения к компьютеру Apple Macintosh (Mac), который появился на десятилетия позже, или к Джону Маккарти. Различные системы Lisp для Macintosh не имеют никакого особенного сходства с Maclisp.