Common Lisp
Common Lisp | |
---|---|
Семантика | мультипарадигмальный: объектно-ориентированный, функциональный, императивный, метаязык |
Класс языка | язык программирования, процедурный язык программирования, объектно-ориентированный, язык функционального программирования и мультипарадигмальный |
Тип исполнения | компилируемый |
Появился в | 1984, стандартизирован ANSI в 1994 |
Автор | комитет X3J13 |
Разработчик | 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.net (англ.) |
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]
Название | Поддерживаемые платформы | Компиляция | Возможности | Лицензия |
---|---|---|---|---|
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
Это заготовка статьи о компьютерных языках. Помогите Википедии, дополнив её. |