CMU Common Lisp - CMU Common Lisp
Původní autoři | Univerzita Carnegie Mellon |
---|---|
Vývojáři | Rozličný |
První vydání | Počátek roku 1980 |
Stabilní uvolnění | 21d / 8. prosince 2018
|
Úložiště | |
Operační systém | Několik operačních systémů kompatibilních s POSIX |
Plošina | Cross-platform |
K dispozici v | Společný Lisp |
Typ | Kompilátor a běhové prostředí |
Licence | Veřejná doména |
webová stránka | www |
CMUCL je bezplatná implementace Common Lisp , původně vyvinutá na Carnegie Mellon University .
CMUCL běží na většině platforem podobných Unixu , včetně Linuxu a BSD ; existuje také experimentální port Windows . Steel Bank Common Lisp je odvozen od CMUCL. 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 začal Rob MacLachlan 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.
Po CMU zrušil projekt (ve prospěch Dylan implementace pomocí některé z CMUCL je překladačů základny) údržba byla převzata skupinou 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 na architektuře Intel x86, nejprve běžící na FreeBSD , později na Linuxu . 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 obsahuje tlumočník, 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á.
- Překladač nativního kódu s názvem „Python“ (nezaměňovat s programovacím jazykem Python ). Pokud byl zdrojový kód Common Lisp napsán s příslušnými prohlášeními 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 také obsahuje výkonné odvození typů , které 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
- Možnost generování uvolňování paměti a vícenásobného zpracování na portech x86.
- Cizí funkce rozhraní , které umožňuje propojení s C kód a systémových knihoven, včetně sdílených knihoven na většině platforem, a přímý přístup k Unix systémových volání .
- Podpora meziprocesové komunikace a vzdáleného volání procedur .
- Implementace CLOS , Common Lisp Object System, který zahrnuje multimetody a metaobject protokol.
- Grafický ladicí program na úrovni zdroje pomocí rozhraní Motif a profilovač kódu .
- Rozhraní k X11 Window System ( CLX ) a propracovaná knihovna grafických widgetů (Garnet).
- Programátorem rozšiřitelné vstupní a výstupní toky.
- Hemlock , editor podobný Emacsu implementovaný v Common Lisp.