Jump to content

ОпенЛисп

ОпенЛисп
OpenLisp, работающий внутри Emacs
Парадигмы Мультипарадигмальность : функциональная , процедурная , объектно-ориентированная , рефлексивная , мета.
Семья Лисп
Разработано Кристиан Жюльен
Разработчик Кристиан Жюльен
Впервые появился апрель 1988 г .; 36 лет назад ( 1988-04 )
Стабильная версия
11.7.0 / 13 декабря 2022 г .; 18 месяцев назад ( 13.12.2022 )
Дисциплина набора текста Динамичный , сильный
Язык реализации С , ОпенЛисп
Платформа x86 , x86-64 , IA-64 , SPARC , PowerPC , MIPS , Alpha , PA-RISC , ARM , AArch64 , RISC-V , Loongson
ТЫ Windows , большинство на базе Unix , Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP-UX , AIX , QNX , DOS , OS/2 , Pocket PC , OpenVMS , z/OS , Cygwin
Лицензия Собственный
Веб-сайт www .вышел
Под влиянием
Лисп , ИСЛИСП

OpenLisp язык программирования семейства Lisp, разработанный Кристианом Жюльеном. [1] от Элигиса . Это соответствует [2] [3] [4] международному стандарту ISLISP , опубликованному совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC), ISO/IEC 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. связанный

Цели [ править ]

Основная цель этой версии Lisp — реализация полностью совместимой системы ISLISP (при запуске с --islisp флаг, он строго ограничен спецификацией ISO/IEC 13816:2007(E). Вторичная цель — предоставить полную встраиваемую систему Lisp, связываемую с C/ C++ или Java (через собственный интерфейс Java (JNI)). обратного вызова Для связи с внешней программой используется механизм . Другие цели заключаются в том, чтобы его можно было использовать в качестве языка сценариев или связующего языка , а также создавать автономные исполняемые файлы программ.

Лицензия [ править ]

Несмотря на свое название , OpenLisp является проприетарным программным обеспечением . Его переводчик доступен бесплатно для любого некоммерческого использования.

Пользовательский интерфейс [ править ]

OpenLisp в основном работает в консольном режиме: cmd.exe в Microsoft Windows и эмулятор терминала в Unix системах на базе .

 ;; OpenLisp v11.x.y (Build: XXXX) by C. Jullien [Jan 01 20xx - 10:49:13]
 ;; Copyright (c) Eligis - 1988-20xx.
 ;; System 'sysname' (64-bit, 8 CPU) on 'hostname', ASCII.
 ;; God thank you, OpenLisp is back again!
 ? (fib 20)
 ;; elapsed time = 0.003s, (0 gc).
 = 6765
 ? _

Альтернативные решения включают запуск OpenLisp из Emacs через настройку Emacs. inferior-lisp-modeили с помощью интегрированной среды разработки (IDE), поддерживающей синтаксис OpenLisp . LispIDE от DaanSystems делает это изначально.

Технология [ править ]

Менеджер памяти [ править ]

Внутри OpenLisp использует виртуальную память для автоматического выделения и расширения объектов. Небольшие объекты одного типа выделяются с использованием организации памяти Bibop (BIg Bag Of Pages). Большие объекты используют прокси , который указывает на реальный объект в куче Лиспа. Консервативная сборка мусора представляет собой пометку и очистку с объединенной кучей (фазу очистки можно настроить на использование потоков ).

Типы данных [ править ]

OpenLisp использует архитектуру с тегами (4-битный тег в 32-битной версии , 5-битный тег в 64-битной версии ) для быстрой проверки типов (маленькое целое число, число с плавающей запятой, символ, минусы, строка, вектор). Маленькие целые числа (28 бит в 32-разрядной версии, 59 бит в 64-разрядной версии) распаковываются , большие (32/64-разрядные) целые числа помещаются в рамку. В соответствии с требованиями ISLISP арифметика произвольной точности также реализована (bignum). Символы (следовательно, строки) являются либо 8-битными ( ANSI , EBCDIC ), либо 16/32-битными, если Unicode включена поддержка .

Оценщик и компилятор [ править ]

Ядро Lisp, собственный интерпретатор и базовые библиотеки вручную закодированы на языке C , промежуточный язык LAP , созданный компилятором, затем транслируется на C с помощью внутреннего генератора кода C.

История [ править ]

В 1988 году самой первой целью OpenLisp была реализация подмножества Lisp для расширения EmACT, клона Emacs . ISLISP быстро стал очевидным выбором. Последовало дальнейшее развитие.

Основные этапы OpenLisp [9]
Год Версия Основная особенность
1988 1.0 OpenLisp начинался как игрушечный язык под названием MLisp (Minimal Lisp) для экспериментов с идеями ISLISP. стандартизации процесса
1993 3.3 Первый порт на 64-битной машине ( DEC Alpha OSF/1 ); изменение имени с MLisp на OpenLisp
1994 4.0 Первое коммерческое использование
1995 4.5 Поддержка потоков сокетов
1997 5.7 OpenLisp — первый Lisp, реализующий стандарт ISLISP ISO/IEC 13816:1997(E). [10]
1998 5.8 Unicode Дополнительная поддержка
2000 6.6 Компилятор Lisp в LAP; LAP интерпретируется виртуальной машиной, встроенной в OpenLisp; скорость увеличилась примерно в 2 раза
2003 7.5 Серверная часть Lisp для C; возможность скомпилировать приложение с множеством файлов Lisp в отдельный исполняемый файл; скорость увеличена с 10x до 20x
2007 8.7 Изменения в соответствии с версией ISO/IEC 13816:2007(E). [7]
2010 9.2 Встроенная целочисленной арифметики произвольной точности поддержка
2021 11.2 Добавлено полное расширение формата CLtL; улучшить обнаружение кучи
2022 11.4 Переработка блоков активации ускоряет работу интерпретатора примерно на 15%. Экспериментальный клон ASDF.
2022 11.5 Вызовы общих функций выполняются примерно в 3 раза быстрее. Улучшен внутренний модуль регулярных выражений.
2022 11.6 Добавьте тип <simple-bit-vector> и связанные с ним функции BIT, аналогичные эквиваленту CLtL.
2022 11.7 Текущая версия
1958 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
ЛИСП 1, 1.5, ЛИСП 2 (заброшенный)
 Маклисп
 Интерлисп
 леев
 Лисп-машина Лисп
 Схема Р5РС Р6РС R7RS маленький
 НОЛЬ
 ЗИЛ (язык реализации Zork)
 Франц Лисп
 Общий Лисп стандарт ANSI
 Лисп
 Схема СО
 XLISP
 Т
 На схеме
 Эмакс Лисп
 АвтоЛИСП
 ПикоЛисп
 Гамбит
 EuLisp
 ИСЛИСП
 ОпенЛисп
 Схема PLT  Ракетка
 новыйЛИСП
 GNU Коварство
 Визуальный ЛИСП
 Кложур
 Дуга
 ЛФЭ
 Он
 Хиалисп

Порты [ править ]

OpenLisp утверждает, что он чрезвычайно портативен, он работает во многих операционных системах , включая: Windows , большинство Unix и POSIX на базе ( Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP-UX , AIX , Cygwin , QNX ), DOS , OS/ 2 , Карманный ПК , OpenVMS , z/OS . Раздел загрузки официального сайта содержит более 50 различных версий.

Стандартные библиотеки [ править ]

Разъемы [ править ]

OpenLisp может взаимодействовать с модулями, написанными на C, используя интерфейс внешних функций (FFI), потоки ISLISP расширены для поддержки сетевых сокетов ( ./net Каталог включает образцы для протокола передачи гипертекста (http), нотации объектов JavaScript (JSON), протокола почтового отделения 3 (POP3), простого протокола передачи почты (SMTP), Telnet , Rss ), упрощенного средства чтения расширяемого языка разметки ( XML ), которое можно конвертировать. XML в Лисп. Базовый модуль SQL можно использовать с MySQL , Odbc , SQLite , PostgreSQL . Модуль значений, разделенных запятыми (CSV), может читать и записывать файлы CSV.

Инструменты [ править ]

Инструменты разработчика включают регистрацию данных , Pretty-принтер , профилировщик , проектирование по контракту и модульные тесты .

Алгоритмы [ править ]

Некоторые известные алгоритмы доступны в ./contrib Данцига каталог ( симплексный алгоритм , алгоритм Дейкстры , алгоритм Форда–Фалкерсона ). Модули поставляются с использованием лицензий BSD .

Происхождение имени [ править ]

Приставка Open относится к открытым системам, а не к модели с открытым исходным кодом . [11]

Имя было выбрано в 1993 году для замены внутреннего кодового имени MLisp, которое уже использовалось Гослингом Emacs (как преемником Mocklisp ).

OpenLisp Язык программирования отличается от OpenLISP, проекта, начатого в 1997 году для реализации протокола разделения локаторов и идентификаторов .

Компилятор [ править ]

В этом разделе описывается, как компилятор преобразует код Lisp в C.

Исходный код [ править ]

Числовая функция Фибоначчи (это классическое определение, используемое в большинстве тестов, не является самым эффективным способом вычисления fib)

(defun fib (n)
   (cond ((eq n 1) 1)
         ((eq n 2) 1)
         (t (+ (fib (- n 1)) (fib (- n 2))))))

Промежуточный код LAP [ править ]

Компилятор Lisp преобразует исходный код Lisp в следующий промежуточный код. За ним следует этап оптимизации «глазок» , который использует этот промежуточный формат для анализа и оптимизации инструкций. После оптимизации окончательный код LAP:

  ((fentry fib 1 0 0)
   (param 0)
   (jeq _l004 '1)
   (jneq _l003 '2)
   (move a1 '1)
   (return)
  _l003
   (gsub1 a1)
   (recurse 1)
   (move a2 a1)
   (param 0)
   (gsub a1 '2)
   (recurse 1)
   (gadd a2 a1)
  _l004
   (return)
   (end))

Перевод кода C [ править ]

Наконец, генератор кода C использует код LAP для перевода инструкций на C.

static POINTER 
OLDEFCOMPILED1(olfib_00, p1) {
        POINTER a1;
        POINTER VOLATILE a2;

        ollapenter(SN_OLFIB_00);
        a1 = p1;
        if (eq(a1, olmakefix(1))) goto _l004;
        if (!eq(a1, olmakefix(2))) goto _l003;
        ollapleave(SN_OLFIB_00);
        return olmakefix(1);
_l003:
        a1 = ollapgsub(a1, olmakefix(1));
        a2 = olfib_00(a1);
        a1 = ollapgsub(p1, olmakefix(2));
        a1 = olfib_00(a1);
        a1 = ollapgadd(a2, a1);
_l004:
        ollapleave(SN_OLFIB_00);
        return a1;
}

Руководство по стилю [ править ]

Длина строки [ править ]

OpenLisp принимает строки неограниченной длины. Рекомендуемый стиль: каждая строка текста кода должна содержать не более 80 символов .

Принятие [ править ]

Он был выбран SDF Public Access некоммерческой Unix-системой открытого доступа Unix System в Интернете. [12] [13] как один из языков программирования, доступных в Интернете.

Bricsys использует OpenLisp для реализации AutoLISP в своей (САПР) Bricscad системе автоматизированного проектирования . [14]

МОЙ [15] полностью написан на OpenLisp.

Университет Палермо использует OpenLisp для обучения Lisp. [16]

Ссылки [ править ]

  1. ^ Паркье, Пьер (2000). «JTC1/SC22 N3170» . ИСО/МЭК . Проверено 11 марта 2012 г. [ постоянная мертвая ссылка ]
  2. ^ Симонсен, Келд (13 марта 1999 г.). «Ислисп – FAQ» . ИСО/МЭК . Проверено 11 ноября 2016 г.
  3. ^ Нобуто, Идзуми (Университет Тохоку, докторская степень); Такаясу, Ито (Университет Тохоку, аспирантура) (1999). «Интерпретатор и компилятор стандарта ISO Lisp ISLISP» . Транзакции – Общество обработки информации Японии . Сделки Общества обработки информации Японии. ISSN   0387-5806 . Архивировано из оригинала 26 августа 2018 года . Проверено 17 июня 2013 г. {{cite journal}}: CS1 maint: несколько имен: список авторов ( ссылка )
  4. ^ МакДжонс, Пол (2010). «ИСЛИСП» . Группа сохранения программного обеспечения . Проверено 18 марта 2012 г.
  5. ^ «ИСО/МЭК 13816:1997(Е)» . Международная организация по стандартизации . Проверено 11 ноября 2018 г.
  6. ^ Паркье, Пьер (руководитель JTC1 SC22 WG16) (1996). «ISO/IEC JTC1 SC22 WG16 N177 – голосование DIS» . ИСО/МЭК . Проверено 15 марта 2012 . {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  7. ^ Jump up to: Перейти обратно: а б «ИСО/МЭК 13816:2007(Е)» . Международная организация по стандартизации . Проверено 11 ноября 2018 г.
  8. ^ Жюльен, Кристиан (2011). «Справочное руководство OpenLisp v9.8.0» . Элигис . Проверено 14 марта 2012 г.
  9. ^ Жюльен, Кристиан (2011). «Журнал изменений OpenLisp» . Элигис . Проверено 15 марта 2012 г.
  10. ^ Ринехулс, Уильям (4 августа 1999 г.). «JTC1/SC22 N2969» . ИСО/МЭК . Проверено 11 ноября 2016 г.
  11. ^ Жюльен, Кристиан (2011). «Часто задаваемые вопросы по OpenLisp» . Элигис . Проверено 15 марта 2012 г.
  12. ^ Стовер, Джин Майкл (2005). «7.2 Языки в SDF» . SDF Unix System открытого доступа, Inc. Проверено 14 марта 2012 г.
  13. ^ «Хостинговые компании» . ALU (Ассоциация пользователей Lisp). Архивировано из оригинала 9 февраля 2011 года . Проверено 18 марта 2012 г.
  14. ^ «Новости Брикскад» . Брискад. 2009 . Проверено 20 марта 2012 г.
  15. ^ «Конкурентная разведка и проблемы принятия решений» . Амос Дэвис. 2013 . Проверено 30 сентября 2014 г.
  16. ^ «Курс теоретической информатики» . Университет Палермо. 2013 . Проверено 22 марта 2013 г.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bd226a21caa77d4441b7e2509140a320__1708944060
URL1:https://arc.ask3.ru/arc/aa/bd/20/bd226a21caa77d4441b7e2509140a320.html
Заголовок, (Title) документа по адресу, URL1:
OpenLisp - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)