CMU Common Lisp - CMU Common Lisp

CMUCL
Оригинальный автор (ы) Университет Карнеги Меллон
Разработчики) Разные
изначальный выпуск Начало 1980 г . ; 41 год назад  ( 1980 )
Стабильный выпуск
21д / 8 декабря 2018 г . ; 2 года назад  ( 2018-12-08 )
Репозиторий Отредактируйте это в Викиданных
Операционная система Несколько операционных систем, совместимых с POSIX
Платформа Кроссплатформенность
Доступно в Common Lisp
Тип Компилятор и среда выполнения
Лицензия Всеобщее достояние
Интернет сайт www .cons .org / cmucl /

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

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

Функции

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

Рекомендации

внешняя ссылка