Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Ссылки [ править ]

  1. ^ https://gitlab.common-lisp.net/cmucl/cmucl/wikis/home

Внешние ссылки [ править ]

  • Домашняя страница CMUCL