CMU Common Lisp
Оригинальный автор(ы) | Университет Карнеги-Меллон |
---|---|
Разработчик(и) | Различный |
Первоначальный выпуск | Начало 1980 года |
Стабильная версия | 21е [1] / 14 мая 2023 г |
Репозиторий | |
Операционная система | Несколько POSIX -совместимых операционных систем |
Платформа | Кросс-платформенный |
Доступно в | Общий Лисп |
Тип | Компилятор и среда выполнения |
Лицензия | Общественное достояние |
Веб-сайт | cmucl |
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.