Оригинальный автор(ы) | Университет Карнеги-Меллона |
---|---|
Разработчик(и) | Различный |
Первоначальный выпуск | Начало 1980-х ( 1980 ) |
Стабильный релиз | 21e [1] / 14 мая 2023 г. ( 2023-05-14 ) |
Репозиторий |
|
Операционная система | Несколько 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 . Проблема нехватки регистров была решена новым консервативным сборщиком мусора. Этот новый сборщик мусора принимает любое значение любого типа в регистрах и рассматривает все, что может быть указателем, как указатель с целью не собирать или перемещать его цель.