Common Lisp | это... Что такое Common Lisp? (original) (raw)
Common Lisp
Семантика: | мультипарадигмальный: объектно-ориентированный, функциональный, императивный, метаязык |
---|---|
Тип исполнения: | компилируемый |
Появился в: | 1984, стандартизирован ANSI в 1994 |
Автор(ы): | комитет X3J13 |
Типизация данных: | сильная, динамическая, с опциональными декларациями типов |
Основные реализации: | Allegro Common Lisp, ABCL, CLISP, Clozure CL, CMUCL, Corman Common Lisp, ECL, LispWorks, Scieneer CL, SBCL |
Испытал влияние: | Lisp, Lisp Machine Lisp, MacLisp, InterLisp, Scheme |
Повлиял на: | Clojure, Factor, Dylan, EuLisp, ISLisp, SKILL, Stella, SubL |
Common Lisp (сокр. CL) — диалект языка Лисп, стандартизированный ANSI[1]. Был разработан с целью объединения разрозненных на тот момент диалектов Лиспа. Доступно несколько реализаций Common Lisp, как коммерческих, так и свободно распространяемых.
Common Lisp — мультипарадигменный (то есть, поддерживающий несколько парадигм) язык программирования общего назначения. Он поддерживает комбинацию процедурного, функционального и объектно-ориентированного программирования.
Common Lisp включает в себя CLOS; систему Lisp макросов, позволяющую вводить в язык новые синтаксические конструкции, использовать техники метапрограммирования и обобщённого программирования.
Содержание
Синтаксис
Common Lisp использует S-выражения для обозначения как кода, так и данных. Вызовы функций и макросов являются списками, где первый элемент, или голова списка, является именем функции, а остальные, — «хвост» списка, — аргументами.
(+ 2 2) ; складывает 2 и 2, возвращая результат 4. (- 8 3) ; вычитает из восьми три, возвращая результат 5. (reverse "Здравствуй, мир!") ; переворачивает строку, возвращая «"!рим ,йувтсвардЗ"»
;; определения переменных и функций: (defvar x) ; Определяет переменную x, не присваивая ей какого-либо ; значения. Две звёздочки, являющиеся частью имени — принятый ; стандарт для именования динамических переменных.
(setf x 42.1) ; присваивает переменной x значение с плавающей запятой 42,1.
(defun square (x) ; Определение функции square, получающей один аргумент (* x x)) ; и возвращающей его квадрат.
(square x) ; вызывает функцию square, передавая ей значение переменной x ; и возвращает её квадрат (1772,41).
(let ((a 3)(b 4)) (+ a b)) ; Функция let создаёт локальные переменные, присваивает им значения ; (в данном случае переменной a присваивается значение 3, а b - 4), ; после чего вычисляет и возвращает результат функции ; (в данном случае 7). Переменные локальны, следовательно ; попытка посчитать значение (+ a b) вне тела let приведёт к ошибке.
Типы данных
Скалярные типы
Числовые типы включают в себя целые, дроби, числа с плавающей запятой и комплексные числа.[2] Common Lisp даёт возможность использовать большие числа для представления любых величин с большей точностью.
Литеры в Common Lisp не ограничены ASCII. Большинство современных реализаций поддерживают Юникод.
Понятие Символа довольно близко Лиспу, хотя, практически неизвестно в таком виде в других языках. В Лиспе символ — это уникальный объект из данных, включающих в себя: имя, значение, функцию, список свойств и пакет (пространство имён). Символы в Лиспе часто используются так же, как идентификаторы в других языках: для хранения значения переменной. Однако, у них есть множество других применений. Обычно, когда символу присваивается значение, оно тут же им и возвращается. Некоторые символы присваивают значение сами себе, так, например, булевы значения представлены в качестве двух самоопределяющихся символов, — T и NIL.
Есть несколько функций для округления скалярных типов разными способами. Функция round округляет аргумент до ближайшего целого числа, а если число стоит «посередине», то до ближайшего чётного. Функция truncate округляет числа по направлению к нулю. Функции floor («пол») и ceiling («потолок») округляют к ближайшему меньшему и ближайшему большему числу соответственно. Все функции возвращают дробную часть в качестве вторичного результата.
Реализации
Common Lisp отличается от таких языков, как C#, Java, Perl, Python тем, что он определяется своим стандартом и не существует его единственной или канонической реализации. Любой желающий может ознакомиться со стандартом и создать свою собственную реализацию. Common Lisp автоматически признаёт эти типы как равные.[3]
Таблица сравнения основных реализаций[4][5]
Название | Поддерживаемые платформы | Компиляция | Возможности | Лицензия |
---|---|---|---|---|
CLISP[6] | Windows, Mac, *nix | Байт-код, JIT | Маленький размер образа лисп-системы. Очень эффективная длинная целочисленная арифметика. Возможность создания исполняемых файлов. FFI(интерфейс для вызова низкоуровневых функций(функций из библиотек, написанных на Си и т. п.) и для оперирования «неуправляемой» памятью). Функции обратного вызова(интеграция с «родным» кодом платформы). | GNU GPL |
CMUCL[7] | Linux, FreeBSD, Solaris, Darwin | Байт-код, машинный код | Высококачественный компилятор в машинный код. FFI. Функции обратного вызова(интеграция с «родным» кодом платформы). | Общественное достояние с частями под BSD License |
ECL | Windows, *nix, Mac OS X | Байт-код, машинный код через C | Хорошая интеграция с программами на Си и с «родным» кодом платформы(FFI, функции обратного вызова, возможность создания «родных» для платформы динамических и статических библиотек). Возможность создания исполняемых файлов. «Родная» многопоточность на всех поддерживаемых платформах. | GNU GPL с частями под другими лицензиями |
Clozure CL (бывший OpenMCL)[8] | Linux/PPC, Linux/X86-64, Darwin/PPC, Darwin/X86-64, FreeBSD/X86-64, Windows | Машинный код | Быстрый компилятор. Мощный и удобный FFI. Функции обратного вызова(интеграция с «родным» кодом платформы). Возможность создания исполняемых файлов. «Родная» многопоточность на всех поддерживаемых платформах. | LGPL |
SBCL[9] | Linux, BSD, Solaris, Mac OS X (Darwin), Windows (экспериментально) | Машинный код | Высококачественный компилятор в машинный код. Возможность создания исполняемых файлов. FFI. Функции обратного вызова(интеграция с «родным» кодом платформы). «Родная» многопоточность на Linux, Solaris 10 и Mac OS X. | Общественное достояние с частями под MIT License и BSD License |
ABCL[10] | JVM | байт-код JVM | Интерфейс к платформе Java. Многопоточность. Платформонезависимость. | LGPL |
Allegro Common Lisp[11] | Windows, Unix, Linux, Mac OS X | Машинный код | http://franz.com/products/allegrocl/ | Коммерческая, доступна ограниченная демоверсия |
LispWorks[12] | Windows, *nix, Mac OS X | Машинный код | Высококачественная IDE. CAPI — библиотека для создания пользовательского интерфейса. Хорошая интеграция с программами на Си и с «родным» кодом платформы(FFI, функции обратного вызова, возможность создания «родных» для платформы динамических и статических библиотек). Возможность создания исполняемых файлов. «Родная» многопоточность на всех поддерживаемых платформах. Полный список возможностей: http://www.lispworks.com/products/features.html | Коммерческая, доступна ограниченная демоверсия |
Corman Common Lisp | Windows | Машинный код | http://www.cormanlisp.com/features.html | Shareware, исходный код системы (исключая IDE) доступен |
Примечания
- ↑ ANSI INCITS 226—1994 (R2004), ранее X3.226-1994 (R1999)
- ↑ Features of Common Lisp
- ↑ Lisp — программируемый язык программирования.
- ↑ Список основных реализаций Common Lisp
- ↑ Lisp Implementations
- ↑ GNU CLISP (англ.).
- ↑ CMUCL
- ↑ Clozure CL
- ↑ Steel Bank Common Lisp (англ.)
- ↑ Armed Bear Common Lisp
- ↑ Allegro CL — разработчик Franz Inc. (англ.)
- ↑ LispWorks. Разработчик — LispWorks, LLC (ранее Xanalys, Inc.)
Ссылки
Сообщества и форумы
- lisper.ru — русскоязычное сообщество Common Lisp разработчиков (рус.)
- Лисп у «Истоков» — русский LispWorks, проекты с исходным кодом, форумы (рус.)
- common-lisp.net — хостинг для размещения open source проектов (англ.)
Статьи
Документация и учебники
- Книга «Практический Common Lisp» (рус.)
- Книга «Practical Common Lisp» (англ.)
- CLiki — Common Lisp Wiki (англ.)
- Common Lisp Implementations: A Survey (англ.)
- Common Lisp HyperSpec — стандарт ANSI Common Lisp (англ.)
- Common Lisp the Language, 2nd Edition by by Guy L. Steele — классическое руководство по Common Lisp (англ.)
- The Common Lisp Cookbook (англ.)
- Paul Graham. On Lisp (англ.)
- clisp.linkfly.ru Ресурс с множеством различных материалов по Common Lisp
Common Lisp | |
---|---|
Реализации | Allegro CL • ABCL • CLforJava • CLISP • Clozure CL • CMUCL • Corman Common Lisp • ECL • GCL • LispWorks • Macintosh Common Lisp • Movitz • Poplog • Scieneer CL • SBCL • Symbolics Common Lisp |
Программное обеспечение | Библиотеки CLSQL • CL-HTTP • CL-PPCRE • CLX • Ironclad • SymbolicWeb • UnCommon Web • Weblocks • Hunchentoot • AllegroCache • ASDF • CLiki • CLIM Приложения Clfswm • Common Music • Common Lisp Music • Common Music Notation • ICAD • InspireData • PrimeTrader • Mirai • Maxima • OpenMusic • PWGL • Stumpwm • SiteGrinder • OASIS • AutoPrice Среды разработки Climacs • Hemlock • SLIME |
Публикации | Common Lisp the Language • Paradigms of AI Programming • The Art of the Metaobject Protocol • On Lisp • Practical Common Lisp • Object-Oriented Programming in Common Lisp |
Design committee | X3J13 • Гай Стил |
Другое | CLOS • Common Lisp HyperSpec • CommonLoops • Десятое правило Гринспена |