CMU Common Lisp - CMU Common Lisp

CMUCL
Pierwotni autorzy Carnegie Mellon University
Deweloper (y) Różnorodny
Pierwsze wydanie Wczesne 1980 ; 41 lat temu  ( 1980 )
Wersja stabilna
21d / 8 grudnia 2018 ; 2 lata temu  ( 08.12.2018 )
Magazyn Edytuj to w Wikidata
System operacyjny Kilka systemów operacyjnych zgodnych z POSIX
Platforma Wieloplatformowy
Dostępne w Common Lisp
Rodzaj Kompilator i środowisko uruchomieniowe
Licencja Domena publiczna
Stronie internetowej www .cons .org / cmucl /

CMUCL to darmowa implementacja Common Lisp , pierwotnie opracowana na Carnegie Mellon University .

CMUCL działa na większości platform typu Unix , w tym Linux i BSD ; istnieje również eksperymentalny port Windows . Steel Bank Common Lisp wywodzi się z CMUCL. Scieneer Common Lisp jest pochodną handlowa z CMUCL.

Historia

Najwcześniejsza implementacja poprzedza Common Lisp i była częścią Spice Lisp , około 1980 roku. W 1985 Rob MacLachlan zaczął ponownie pisać kompilator do tego, co miało stać się kompilatorem Pythona, a CMUCL został przeportowany na stacje robocze Unix, takie jak IBM PC RT, MIPS i SPARC . Wczesne wydania CMUCL nie obsługiwały architektury Intel x86 z powodu braku rejestrów. CMUCL ściśle oddziela typy danych ze znacznikami typu i bezpośrednie, a moduł odśmiecania pamięci będzie polegał na wiedzy, że jedna połowa rejestrów procesora może przechowywać tylko typy oznaczone, a druga połowa tylko typy nieoznakowane. To nie pozostawiło wystarczającej liczby rejestrów dla zaplecza Pythona.

Po anulowaniu projektu przez CMU (na korzyść implementacji Dylana przy użyciu części bazy kompilatorów CMUCL), konserwację przejęła grupa ochotników. Do 1996 roku ta grupa regularnie wydawała produkty na własnej infrastrukturze.

Mniej więcej w tym samym czasie ukończono port na architekturę Intel x86, najpierw działającą na FreeBSD , a później Linuksie . Problem braku rejestrów rozwiązał nowy konserwatywny śmieciarz. Ten nowy moduł odśmiecania pamięci akceptuje dowolną wartość dowolnego typu w rejestrach i traktuje wszystko, co może być wskaźnikiem, jako wskaźnik, aby nie zbierać ani nie przenosić celu.

Kompilator i inne jednostki wykonywania kodu

  • CMUCL zawiera interpreter, który jest używany głównie do REPL , ale może być używany do szybszego ładowania plików Lisp, które nie wymagają kompilacji.
  • Maszyna do interpretacji kompaktowego kodu bajtowego (który może być wyemitowany przez kompilator). Jest to obecnie rzadko używane, ale było popularne we wczesnych wersjach CMUCL, ponieważ rozmiary obrazów zostały drastycznie zmniejszone w czasie, gdy przepustowość pobierania w Internecie była niska.
  • Natywny kompilator kodu o nazwie „Python” (nie mylić z językiem programowania Python ). Jeśli kod źródłowy Common Lisp został napisany z odpowiednimi deklaracjami i jest zorganizowany z myślą o szybkości, kompilator Pythona generuje kod, który jest prawie wolny od narzutów w porównaniu z kodem skompilowanym z języków takich jak C ++. Niektóre nieefektywności, takie jak interfejsy wywołań funkcji i brak tablic typów danych zdefiniowanych przez użytkownika bez wskaźnika, są podyktowane standardem Common Lisp i nadal wymagają obejścia (np. Poprzez wstawianie większej liczby funkcji i używanie makr do tworzenia konstrukcji, które wyglądają jak użytkownik zdefiniowane struktury, ale w rzeczywistości uzyskują dostęp do pól we wstępnie przydzielonych wyspecjalizowanych tablicach). Kompilator Pythona oferuje również potężne możliwości wnioskowania o typach , pomagając programiście w pisaniu kodu bez narzutów poprzez automatyczne wnioskowanie o typach lub wydawanie wskazówek dotyczących utraconych możliwości optymalizacji.

funkcje

Zobacz też

Bibliografia

Zewnętrzne linki