CMU Common Lisp

Бесплатная реализация Common Lisp
CMUCL
Оригинальный автор(ы)Университет Карнеги-Меллона
Разработчик(и)Различный
Первоначальный выпускНачало 1980-х ; 44 года назад ( 1980 )
Стабильный релиз
21e [1] / 14 мая 2023 г. ; 17 месяцев назад ( 2023-05-14 )
Репозиторий
  • gitlab.common-lisp.net/cmucl/cmucl
Операционная системаНесколько POSIX -совместимых ОС
ПлатформаКроссплатформенный
Доступно вОбщий Лисп
ТипКомпилятор и среда выполнения
ЛицензияОбщественное достояние
Веб-сайтcmucl.org

CMUCL — это свободная реализация Common Lisp , первоначально разработанная в Университете Карнеги — Меллона .

CMUCL работает на большинстве Unix-подобных платформ, включая Linux и BSD ; также существует экспериментальный порт для Windows . Steel Bank Common Lisp является производным от CMUCL. Scieneer Common Lisp был коммерческим производным от CMUCL.

История

Самая ранняя реализация предшествовала Common Lisp и была частью Spice Lisp около 1980 года. В 1985 году Роб Маклахлан начал переписывать компилятор в то, что впоследствии стало компилятором Python, и CMUCL был портирован на рабочие станции Unix, такие как IBM PC RT, MIPS и SPARC. Ранние выпуски CMUCL не поддерживали архитектуру Intel x86 из-за отсутствия регистров. CMUCL строго разделял типы данных с тегами и непосредственные типы данных, а сборщик мусора полагался на знание того, что одна половина регистров ЦП может содержать только тегированные типы, а другая половина — только нетегированные типы. Это не оставляло достаточно регистров для бэкэнда Python.

После того, как CMU отменил проект (в пользу реализации Dylan с использованием части базы компилятора CMUCL), сопровождение было взято на себя группой добровольцев. К 1996 году эта группа делала регулярные релизы на своей собственной инфраструктуре.

Примерно в то же время был завершен порт на архитектуру Intel x86, сначала работавший на FreeBSD , позже на Linux . Проблема нехватки регистров была решена новым консервативным сборщиком мусора. Этот новый сборщик мусора принимает любое значение любого типа в регистрах и рассматривает все, что может быть указателем, как указатель с целью не собирать или перемещать его цель.

Компилятор и другие блоки выполнения кода

  • CMUCL содержит интерпретатор, который в основном используется для REPL , но может использоваться для более быстрой загрузки файлов Lisp, не требующих компиляции.
  • Машина для интерпретации компактного байт-кода (который может быть выдан компилятором). Сейчас это используется редко, но было популярно в ранних выпусках CMUCL, поскольку размеры изображений были радикально уменьшены в то время, когда пропускная способность загрузки в Интернете была низкой.
  • Компилятор собственного кода под названием "Python" (не путать с языком программирования Python ). Если исходный код Common Lisp был написан с соответствующими объявлениями и организован с учетом скорости, компилятор Python генерирует код, который почти не содержит накладных расходов по сравнению с кодом, скомпилированным из таких языков, как C++. Некоторые недостатки, такие как интерфейсы вызова функций и отсутствие массивов без указателей пользовательских типов данных, диктуются стандартом Common Lisp и все еще требуют решения (например, путем встраивания большего количества и использования макросов для создания конструкций, которые выглядят как пользовательские структуры, но на самом деле обращаются к полям в предварительно выделенных специализированных массивах). Компилятор Python также имеет мощные функции вывода типов , помогающие программисту писать код без накладных расходов, либо автоматически выводя типы, либо выдавая подсказки об упущенных возможностях оптимизации.

Функции

Смотрите также

Ссылки

  1. ^ "Главная · Wiki · cmucl / cmucl · GitLab".
  • Домашняя страница CMUCL
Retrieved from "https://en.wikipedia.org/w/index.php?title=CMU_Common_Lisp&oldid=1254428545"