OpenLisp - OpenLisp
OpenLisp работает внутри Emacs | |
Парадигмы | Мультипарадигма: функциональный, процедурный, объектно-ориентированный, отражающий, мета |
---|---|
Семья | Лисп |
Разработано | Кристиан Жульен |
Разработчик | Кристиан Жульен |
Впервые появился | Апрель 1988 г. |
Стабильный выпуск | 11.0.0 / 30 октября 2020 |
Печатная дисциплина | Динамический, сильный |
Язык реализации | C, OpenLisp |
Платформа | x86, x86-64, IA-64, SPARC, PowerPC, MIPS, Альфа, PA-RISC, РУКА, AArch64, RISC-V |
Операционные системы | Windows, наиболее Unix -основан, Linux, macOS, FreeBSD, OpenBSD, NetBSD, Солярис, HP-UX, AIX, QNX, ДОС, OS / 2, Карманные ПК, OpenVMS, z / OS, Cygwin |
Лицензия | Проприетарный |
Интернет сайт | www |
Под влиянием | |
Лисп, ISLISP |
OpenLisp это язык программирования в Лисп семья, созданная Кристиан Жульен[1] из Элигис. Это соответствует[2][3][4] к Международный стандарт за ISLISP опубликовано совместно Международная организация по стандартизации (ISO) и Международная электротехническая комиссия (МЭК), ИСО / МЭК 13816: 1997 (E),[5][6] пересмотрен в ISO / IEC 13816: 2007 (E).[7].
Написано на языках программирования C и Lisp, он работает на наиболее распространенных операционные системы. OpenLisp обозначен как ISLISP реализация, но также содержит много Common Lisp -совместимые расширения (хеш-таблица, таблица для чтения, пакет, defstruct, последовательности, рациональные числа) и другие библиотеки (сетевой разъем, регулярное выражение, XML, Портативный интерфейс операционной системы (POSIX ), SQL, Легкий протокол доступа к каталогам (LDAP)).[8]
OpenLisp включает устный переводчик связано с цикл чтения – оценки – печати (REPL), программа сборки Lisp (LAP) и серверная часть компилятор для языкаC.
Цели
Основная цель этого Лисп версия должна реализовать полностью совместимую систему ISLISP (при запуске с -islisp
flag, он строго ограничен спецификацией ISO / IEC 13816: 2007 (E)). Второстепенная цель - предоставить полную встраиваемый Система Lisp подключается к C /C ++ или же Ява (через Собственный интерфейс Java (JNI)). А Перезвоните механизм используется для связи с внешней программой. Другие цели должны использоваться как язык сценариев или же клей язык и производить автономная программа исполняемые файлы.
Лицензия
Несмотря на имя, OpenLisp - это проприетарное программное обеспечение. Его устный переводчик доступен бесплатно для любого некоммерческого использования.
Пользовательский интерфейс
OpenLisp в основном работает в консольном режиме: cmd.exe
на Майкрософт Виндоус, и эмулятор терминала на Unix -системы.
;; OpenLisp v10.x.y (сборка: XXXX), автор C. Jullien [01 января 20xx - 10:49:13] ;; Авторское право (c) Eligis - 1988-20xx. ;; Системное 'sysname' (64-битная, 8 CPU) на 'hostname', ASCII. ;; Слава богу, OpenLisp снова вернулся! ? (выдумать 20) ;; прошедшее время = 0,003 с, (0 gc). = 6765 ? _
Альтернативные решения включают запуск OpenLisp из Emacs через установку Emacs подчиненный-лисп-режим
, или используя интегрированная среда развития (IDE), которая поддерживает OpenLisp синтаксис. LispIDE от DaanSystems делает это изначально.
Технологии
Менеджер памяти
Внутри OpenLisp использует виртуальная память для автоматического выделения и расширения объектов. Небольшие объекты одного типа выделяются с помощью организации памяти Bibop (BIg Bag Of Pages). Большие объекты используют доверенное лицо которые указывают на реальный объект в куче Лиспа. Консервативный вывоз мусора это отметить и подметать с слияние куча (фаза развертки может быть настроена для использования потоки ).
Типы данных
OpenLisp использует помеченная архитектура (4-битный тег на 32-битный, Тег 5 бит включен 64-битный ) для быстрой проверки типов (маленькое целое число, число с плавающей запятой, символ, минусы, строка, вектор). Маленькие целые числа (28 бит в 32-битном, 59 бит в 64-битном) распакованный, большие (32/64-битные) целые числа помещаются в рамку. В соответствии с требованиями ISLISP, арифметика произвольной точности (bignums) также реализованы. Символы (следовательно, строки) либо 8 бит (ANSI, EBCDIC ) или 16/32 бит, если Unicode поддержка включена.
Оценщик и компилятор
Ядро Lisp, родное устный переводчик а базовые библиотеки написаны вручную на языке C, КОЛЕНИ промежуточный язык произведенный компилятор затем переводится в C сервером C генератор кода.
История
В 1988 году самым первым мотивом OpenLisp было реализовать подмножество Lisp для расширения EmACT, Emacs клон. ISLISP быстро стал очевидным выбором. Последовало дальнейшее развитие.
Год | Версия | Главная особенность |
---|---|---|
1988 | 1.0 | OpenLisp начинался как язык игрушек названный MLisp (Minimal Lisp), чтобы экспериментировать с идеями из ISLISP стандарты процесс |
1993 | 3.3 | Первый порт на 64-битный машина (DEC Alpha OSF / 1 ); изменение имени с MLisp на OpenLisp |
1994 | 4.0 | Первое коммерческое использование |
1995 | 4.5 | Поддержка Socket Streams |
1997 | 5.7 | OpenLisp - первый Lisp, реализующий стандарт ISLISP ISO / IEC 13816: 1997 (E).[10] |
1998 | 5.8 | Unicode дополнительная поддержка |
2000 | 6.6 | Компилятор Lisp to LAP; LAP интерпретируется виртуальная машина встроен в OpenLisp; скорость улучшилась примерно в 2 раза |
2003 | 7.5 | Lisp to C backend; возможность скомпилировать приложение со многими файлами Lisp в отдельный исполняемый файл; скорость увеличена с 10x до 20x |
2007 | 8.7 | Изменения для соответствия версии ISO / IEC 13816: 2007 (E)[7] |
2010 | 9.2 | Родное целое число арифметика произвольной точности поддерживать |
2020 | 11.0 | Последняя версия; добавлено полное расширение формата CLtL; 2020-10-30 |
1955 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1.5, LISP 2(заброшенный) | ||||||||||||||
Маклисп | ||||||||||||||
Интерлисп | ||||||||||||||
Лисп-машина Лисп | ||||||||||||||
Схема | R5RS | R6RS | R7RS маленький | |||||||||||
Ноль | ||||||||||||||
Ференц Лисп | ||||||||||||||
Common Lisp | ||||||||||||||
Le Lisp | ||||||||||||||
Т | ||||||||||||||
Chez Scheme | ||||||||||||||
Emacs Lisp | ||||||||||||||
AutoLISP | ||||||||||||||
ПикоЛисп | ||||||||||||||
EuLisp | ||||||||||||||
ISLISP | ||||||||||||||
OpenLisp | ||||||||||||||
Схема PLT | Ракетка | |||||||||||||
GNU Guile | ||||||||||||||
Визуальный LISP | ||||||||||||||
Clojure | ||||||||||||||
Дуга | ||||||||||||||
LFE | ||||||||||||||
Hy |
Порты
OpenLisp утверждает, что он чрезвычайно портативен, он работает на многих операционные системы включая: Windows, наиболее Unix и POSIX основан (Linux, macOS, FreeBSD, OpenBSD, NetBSD, Солярис, HP-UX, AIX, Cygwin, QNX ), ДОС, OS / 2, Карманные ПК, OpenVMS, z / OS. Раздел загрузки официального сайта содержит более 50 различных версий.
Стандартные библиотеки
Разъемы
OpenLisp может взаимодействовать с модулями, написанными на C, используя интерфейс внешней функции (FFI), потоки ISLISP расширены для поддержки сетевой разъем (./сеть
каталог включает образцы для Протокол передачи гипертекста (http), Обозначение объекта JavaScript (JSON), Почтовый протокол 3 (POP3), Простой протокол передачи почты (SMTP), Telnet, Rss ), упрощенный расширяемый язык разметки (XML ) reader может конвертировать XML в Lisp. Базовый SQL модуль можно использовать с MySQL, Odbc, SQLite, PostgreSQL. А значения, разделенные запятыми (CSV) модуль может читать и записывать файлы CSV.
Инструменты
Инструменты разработчика включают Регистрация данных, хорошенький принтер, профайлер, дизайн по контракту программирование и модульные тесты.
Алгоритмы
Некоторые известные алгоритмы доступны в ./contrib
справочник (Данциг симплексный алгоритм, Алгоритм Дейкстры, Алгоритм Форда – Фулкерсона ). Модули поставляются с использованием Лицензии BSD.
Происхождение имени
Префикс Открыть относится к открытые системы не к модель с открытым исходным кодом.[11]
Это имя было выбрано в 1993 году для замены внутреннего кодового имени MLisp, которое уже использовалось Гослинг Emacs (как преемник Моклисп ).
OpenLisp язык программирования отличается от OpenLISP, проекта, начатого в 1997 году для реализации Протокол разделения локатора / идентификатора.
Компилятор
В этом разделе описывается, как компилятор преобразует код Lisp в C.
Исходный код
В Число Фибоначчи функция (это классическое определение, используемое в большинстве тестов, не самый эффективный способ вычисления выдумать
)
(defun выдумать (п) (cond ((экв п 1) 1) ((экв п 2) 1) (т (+ (выдумать (- п 1)) (выдумать (- п 2))))))
Промежуточный код LAP
Компилятор Lisp переводит исходный код Lisp в следующий промежуточный код. За ним следует оптимизация глазка pass, который использует этот промежуточный формат для анализа и оптимизации инструкций. После оптимизации окончательный код LAP будет следующим:
((пехота выдумать 1 0 0) (парам 0) (jeq _l004 '1) (jneq _l003 '2) (двигаться а1 '1) (возвращаться) _l003 (gsub1 а1) (рекурсивный 1) (двигаться а2 а1) (парам 0) (gsub а1 '2) (рекурсивный 1) (тупица а2 а1) _l004 (возвращаться) (конец))
Перевод кода C
Наконец, генератор кода C использует код LAP для перевода инструкций в C.
статический УКАЗАТЕЛЬ OLDEFCOMPILED1(olfib_00, p1) { УКАЗАТЕЛЬ а1; УКАЗАТЕЛЬ ЛЕТУЧИЙ а2; ollapenter(SN_OLFIB_00); а1 = p1; если (экв(а1, olmakefix(1))) идти к _l004; если (!экв(а1, olmakefix(2))) идти к _l003; ollapleave(SN_OLFIB_00); возвращаться olmakefix(1);_l003: а1 = ollapgsub(а1, olmakefix(1)); а2 = olfib_00(а1); а1 = ollapgsub(p1, olmakefix(2)); а1 = olfib_00(а1); а1 = ollapgadd(а2, а1);_l004: ollapleave(SN_OLFIB_00); возвращаться а1;}
Гид по стилю
Длина линии
OpenLisp принимает строки неограниченной длины. Рекомендуемый стиль - каждая строка текста в коде должна содержать не более 80 символов в строке.
Принятие
Он был выбран SDF Public Access Unix-система некоммерческий открытый доступ Unix системы на Интернет[12][13] как один из языков программирования, доступных в Интернете.
Bricsys использует OpenLisp для реализации AutoLISP в его Bricscad системы автоматизированного проектирования (CAD) система.[14]
MEVA [15] полностью написан на OpenLisp.
Università degli Studi di Palermo использует OpenLisp для обучения Lisp.[16]
Рекомендации
- ^ Паркье, Пьер (2000). "JTC1 / SC22 N3170". ISO / IEC. Получено 11 марта 2012.[постоянная мертвая ссылка ]
- ^ Симонсен, Келд (13 марта 1999 г.). "Ислисп - часто задаваемые вопросы". ISO / IEC. Получено 11 ноября 2016.
- ^ Нобуто, Идзуми (Университет Тохоку, Град. Науки); Такаясу, Ито (Университет Тохоку, Град. Науки) (1999). "Интерпретатор и компилятор стандарта ISO Lisp ISLISP". Сделки Общества обработки информации Японии. ISSN 0387-5806. Получено 17 июн 2013.
- ^ МакДжонс, Пол (2010). "ИСЛИСП". Группа сохранения программного обеспечения. Получено 18 марта 2012.
- ^ «ISO / IEC 13816: 1997 (E)». Международная организация по стандартизации. Получено 11 ноября 2018.
- ^ Парке, Пьер (руководитель JTC1 SC22 WG16) (1996). «ISO / IEC JTC1 SC22 WG16 N177 - голосование DIS». ISO / IEC. Получено 15 марта 2012.
- ^ а б «ISO / IEC 13816: 2007 (E)». Международная организация по стандартизации. Получено 11 ноября 2018.
- ^ Жюльен, Кристиан (2011). "Справочное руководство OpenLisp v9.8.0". Элигис. Получено 14 марта 2012.
- ^ Жюльен, Кристиан (2011). "Журнал изменений OpenLisp". Элигис. Получено 15 марта 2012.
- ^ Райнхулс, Уильям (4 августа 1999 г.). "JTC1 / SC22 N2969". ISO / IEC. Получено 11 ноября 2016.
- ^ Жюльен, Кристиан (2011). "OpenLisp FAQ". Элигис. Получено 15 марта 2012.
- ^ Стовер, Джин Майкл (2005). «7.2 Языки в SDF». SDF Public Access Unix System, Inc. Получено 14 марта 2012.
- ^ «Хостинговые компании». ALU (Ассоциация пользователей Lisp). Архивировано из оригинал 9 февраля 2011 г.. Получено 18 марта 2012.
- ^ "Bricscad News". Bricscad. 2009 г.. Получено 20 марта 2012.
- ^ «Конкурентная разведка и проблемы принятия решений». Амос Дэвис. 2013. Получено 30 сентября 2014.
- ^ "Corso di Informatica Teorica". Università degli Studi di Palermo. 2013. Получено 22 марта 2013.