CMU Common Lisp - CMU Common Lisp
Původní autoři | Univerzita Carnegie Mellon |
---|---|
Vývojáři | Rozličný |
První vydání | Počátkem roku 1980 |
Stabilní uvolnění | 21d[1] / 8. prosince 2018 |
Úložiště | ![]() |
Operační systém | Několik POSIX - kompatibilní OS |
Plošina | Cross-platform |
K dispozici v | Společný Lisp |
Typ | Překladač a runtime |
Licence | Veřejná doména |
webová stránka | www |
CMUCL je volný, uvolnit Společný Lisp implementace, původně vyvinuta na Univerzita Carnegie Mellon.
CMUCL běží na většině Unixový platformy, včetně Linux a BSD; existuje experiment Okna port také. Steel Bank Common Lisp je odvozen od CMUCL. The Scieneer Common Lisp je komerční derivát z CMUCL.
Dějiny
Nejstarší implementace předchází Common Lisp a byla součástí Spice Lisp kolem roku 1980. V roce 1985 Rob MacLachlan začal přepisovat kompilátor na kompilátor Pythonu a CMUCL byl přenesen na pracovní stanice Unix, jako jsou IBM PC RT, MIPS a SPARC. Rané verze CMUCL nepodporovaly architekturu x86 společnosti Intel kvůli nedostatku registrů. CMUCL přísně oddělené datové typy se značkami typu a okamžité a sběrač odpadků by se spoléhal na vědomí, že jedna polovina registrů CPU může obsahovat pouze označené typy a druhá polovina pouze neoznačené typy. To nezanechalo dostatek registrů pro back-end Pythonu.
Poté, co CMU zrušila projekt (ve prospěch a Dylan implementace pomocí některé z překladačových základen CMUCL) převzala údržbu skupina dobrovolníků. Do roku 1996 tato skupina vydávala pravidelná vydání na své vlastní infrastruktuře.
Přibližně ve stejné době byl dokončen port pro architekturu Intel x86, nejprve spuštěn FreeBSD, později Linux. Problém chybějících registrů vyřešil nový konzervativní sběrač odpadků. Tento nový garbage collector přijímá jakoukoli hodnotu jakéhokoli typu v registrech a zachází s čímkoli, co by mohlo být ukazatelem, jako s ukazatelem za účelem neshromáždění nebo přesunutí jeho cíle.
Kompilátor a další jednotky pro provádění kódu
- CMUCL je vybaven tlumočníkem, který se používá hlavně pro REPL, ale lze jej použít pro rychlejší načítání souborů Lisp, které nepotřebují kompilaci.
- Stroj na interpretaci kompaktního bajtkódu (který lze emitovat z kompilátoru). To se nyní používá jen zřídka, ale bylo to populární v raných verzích CMUCL, protože velikost obrazu byla drasticky snížena v době, kdy byla šířka pásma stahování na internetu nízká.
- Nativní kód překladač s názvem "Python" (nezaměňovat s programovací jazyk Python ). Pokud byl zdrojový kód Common Lisp napsán s příslušnými deklaracemi a je organizován s ohledem na rychlost, kompilátor Pythonu vygeneruje kód, který je téměř bez režie ve srovnání s kódem kompilovaným z jazyků, jako je C ++. Některé neúčinnosti, jako jsou rozhraní pro volání funkcí a nedostatek polí bez ukazatelů u uživatelem definovaných datových typů, jsou diktovány standardem Common Lisp a stále je třeba s nimi pracovat (např. Více inlinováním a používáním maker k vytváření konstrukcí, které vypadají jako uživatelské definované struktury, ale ve skutečnosti přistupují k polím v předem přidělených specializovaných polích). Kompilátor Pythonu je také výkonný závěry typu, pomáhá programátorovi při psaní kódu bez režie buď automatickým odvozováním typů, nebo vydáváním rad o zmeškaných příležitostech optimalizace.
Funkce
- Generační odvoz odpadu a možnost multiprocesoru na portech x86.
- A rozhraní cizí funkce který umožňuje propojení s kódem C a systémovými knihovnami, včetně sdílené knihovny na většině platforem a přímý přístup k Unix systémová volání.
- Podpora pro meziprocesová komunikace a vzdálená volání procedur.
- Implementace CLOS Společný objektový systém Lisp, který zahrnuje multimetody a protokol metaobjektu.
- Grafický debugger na úrovni zdroje pomocí a Motiv rozhraní a profilovač kódu.
- Rozhraní s Okenní systém X11 (CLX ) a propracovaná knihovna grafických widgetů (Garnet).
- Programátorem rozšiřitelné vstupní a výstupní toky.
- Bolehlav, an Emacs editor podobný implementaci v Common Lisp.