1.1 Цель

Common Lisp предназначен для достижения следующих целей:

Цели Common Lisp’а, таким образом, очень близки к Standard Lisp’у [31] и Portable Standard Lisp’у [51]. Common Lisp отличается от Standard Lisp’а преимущественно тем, что содержит больше возможностей, включая более богатую и более сложную систему типов и более сложные управляющие конструкции.

Эта книга прежде всего предназначена быть спецификацией языка, а не описанием реализации (однако, примечания для реализаций встречаются в тексте). Книга определяет набор стандартных языковых концепций и конструкций, которые могут использоваться для связи данных и алгоритмов в диалекте Common Lisp. Этот набор концепций и конструкций иногда называют «ядром языка Common Lisp», потому что он содержит концептуально необходимые или важные вещи. Это ядро не является необходимым минимумом для реализации. Несмотря на то, что многие из его конструкций могут быть определены через другие, просто написанием Lisp кода, все же кажется, что они должны быть концептуальными примитивами, чтобы было согласие между пользователями по поводу того, как ими пользоваться. (Например, bignums и рациональные числа могут быть реализованы как код, оперирующий fixnum’амами. Тем не менее, для концептуальной целостности языка важно то, что пользователи считают их примитивами, и они достаточно полезны для того, чтобы внести их в стандарт.)

По большей части данная книга описывает язык программирования, но не средства программирования. Для обращения к таким стандартным программным средствам, как компилятор, редактор, функции трассировки и отладчик, определены несколько интерфейсов, но об их природе и принципе работы сказано очень мало. Предполагается, что на основе Common Lisp’а будут построены одна или несколько обширных сред программирования, и они будут содержать отдельную документацию.

Теперь есть много реализаций Common Lisp’а. Некоторые были запрограммированы исследовательскими группами в университетах, другие — компаниями, которые продают их в коммерческих целях, и вокруг этих реализаций фактически вырос ряд полезных сред для программирования. Более того, все вышеуказанные цели были достигнуты, и прежде всего — переносимость. Перемещение большого количества Lisp-кода с одного компьютера на другой теперь является рутинной операцией.