CMU Common Lisp - CMU Common Lisp

CMUCL
Původní autoři Univerzita Carnegie Mellon
Vývojáři Rozličný
První vydání Počátek roku 1980 ; Před 41 lety  ( 1980 )
Stabilní uvolnění
21d / 8. prosince 2018 ; Před 2 roky  ( 08.12.2018 )
Úložiště Upravte to na Wikidata
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 .cons .org / cmucl /

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

Viz také

Reference

externí odkazy