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