CMU Common Lisp - CMU Common Lisp
Pierwotni autorzy | Carnegie Mellon University |
---|---|
Deweloper (y) | Różnorodny |
Pierwsze wydanie | Wczesne 1980 |
Wersja stabilna | 21d / 8 grudnia 2018
|
Magazyn | |
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 |
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
- Generacyjne wyrzucanie elementów bezużytecznych i możliwość przetwarzania wieloprocesowego na portach x86.
- Interfejs funkcja zagraniczny , który umożliwia łączenie z kod C i bibliotek systemowych, w tym bibliotek dzielonych na większości platform, a także bezpośredni dostęp do Unix wywołań systemowych .
- Obsługa komunikacji międzyprocesowej i zdalnych wywołań procedur .
- Implementacja CLOS , Common Lisp Object System, który zawiera multimetody i protokół metaobiektów.
- Graficzny debugger na poziomie źródła korzystający z interfejsu Motif i profilera kodu .
- Interfejs do X11 Window System ( CLX ) i wyrafinowana biblioteka graficznych widżetów (Garnet).
- Strumienie wejściowe i wyjściowe rozszerzalne programatorem.
- Hemlock , edytor podobny do Emacsa zaimplementowany w Common Lisp.