Схема была изобретена в середине 70-х годов.
CL был разработан с 1982 года. Первое определение было опубликовано в 1984 году: Common Lisp the Language.
Эта Схема не имеет наследства или являетсяболее современный миф.Схема была определена до Common Lisp почти десятилетием.Схема все еще имела наследие, такое как s-выражения, cons-ячейки, символы, car, cdr, cons и многое другое.То, что Схема имеет наследие, делает ее членом семейства языков Лисп, корни которого появились в первом Лиспе с 1958 года.
Первоначальной целью схемы было создание небольшого чистого языка, который ближе к лямбда-исчислению, чем традиционныйЛисп.Таким образом, лексическое связывание в качестве языка по умолчанию для языка Лисп было первым.
К сожалению, во многих других отношениях это был игрушечный язык.У него был только очень небольшой набор функций, функций, которые понадобятся вам для написания программ, например полезная форма обработки ошибок.
Цели разработки Common Lisp десятилетие спустя были другими.Он был разработан для написания коммерческого программного обеспечения, большого программного обеспечения, производительного программного обеспечения.Другая цель состояла в том, чтобы это было в традиции основной линии диалектов Lisp (здесь Maclisp), чтобы программисты, которые уже имели большие библиотеки или программы, не начинали с нуля.
Common Lisp, добавленный с первого дня aмножество функций, которые считались полезными:
- лексическое связывание по умолчанию
- записей (называемых структурами )
- базовая библиотека
- I / O
- объявления типов
- списки аргументов с ключевыми словами аргументов
- подсказки компилятора
- читатель
и многое другое.
В середине 90-х годов была опубликована версия CL.Он добавил:
- объектную систему с необязательным мета-объектным протоколом
- обширную систему обработки ошибок, систему условий
Поскольку CL начал больше какScheme, некоторые дизайнерские решения делают CL лучше в использовании, чем Scheme.Например, в Scheme есть только примитивные списки аргументов, и это само по себе затрудняет использование библиотек.
Схема имела больше пересмотров своего стандарта, но основные проектные решения остались, и сообщество боролось с основами, такими как обработка ошибок, записи, объектная система и т. Д. R6RS оказался спорным, и я согласен скритики.Я думаю, что R6RS крайне разочаровывает как по своему направлению, так и по содержанию.
Есть еще две точки зрения: полустандарты и отдельные реализации.
Сообщество Scheme произвело многоСтандартные расширения.Это следует рассматривать как успех.
Реализации OTOH сильно разошлись для Схемы.Был небольшой консенсус по ним.Существует много очень маленьких реализаций и много больших реализаций.
Реализации CL OTOH уже содержат большой язык, поэтому они не начинаются с малого.Ключевое слово аргументы только там.То же самое для объектной системы.Со временем несколько приложений убедились, что они могут работать в большинстве случаев без изменений во многих реализациях.Кроме того, отдельные реализации добавили множество функций, таких как поддержка Unicode, потоки, параллельное выполнение и т. Д. И т. Д.
Таким образом, текущие реализации Lisp могут иметь множество функций.
И Common Lisp, и Scheme shareнаследие Lisp: символы, s-выражения, car, cdr, cons, списки на основе cons-ячеек, ... и многое другое.
Common Lisp имеет некоторые части, которые не так хороши, но определены в стандарте.Одним из примеров является то, что имена символов CL являются заглавными внутри.Идея «последовательностей» не является расширяемой в стандарте.И больше.Отдельные реализации обрабатывают многие ограничения стандарта CL.Так, например, в большинстве реализаций система ввода-вывода написана с использованием CLOS, условия основаны на CLOS, существуют расширяемые последовательности для SBCL и т. Д.
CL может быть огромным языком, но это не C ++. Многие детали удивительно хорошо разработаны и просты в использовании. Многие проблемы также могут быть исправлены пользователем, так как Common Lisp является программируемым языком программирования. Вам не нравится встроенный LOOP? Используйте ITERATE, если вам это больше нравится или даже напишите свой.