CMU Common Lisp - CMU Common Lisp
Оригинальный автор (ы) | Университет Карнеги Меллон |
---|---|
Разработчики) | Разные |
изначальный выпуск | Начало 1980 г . |
Стабильный выпуск | 21д / 8 декабря 2018 г .
|
Репозиторий | |
Операционная система | Несколько операционных систем, совместимых с POSIX |
Платформа | Кроссплатформенность |
Доступно в | Common Lisp |
Тип | Компилятор и среда выполнения |
Лицензия | Всеобщее достояние |
Интернет сайт | www |
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 также имеет мощные возможности вывода типов , помогая программисту писать код без накладных расходов путем автоматического вывода типов или подсказок об упущенных возможностях оптимизации.
Функции
- Сборка мусора поколений и возможность многопроцессорной обработки на портах x86.
- Внешней функции интерфейса , который позволяет взаимодействовать с кодом и системных библиотек C, в том числе совместно используемых библиотек на большинстве платформ, а также прямой доступ к Unix системных вызовов .
- Поддержка межпроцессного взаимодействия и удаленных вызовов процедур .
- Реализация CLOS , объектной системы Common Lisp, которая включает в себя мультиметоды и протокол метаобъектов.
- Графический отладчик исходного уровня с использованием интерфейса Motif и профилировщик кода .
- Интерфейс к оконной системе X11 ( CLX ) и сложная библиотека графических виджетов (Garnet).
- Расширяемые программистом потоки ввода и вывода.
- Hemlock , редактор, похожий на Emacs, реализованный на Common Lisp.