OpenLisp - OpenLisp

OpenLisp
OpenLisp běží uvnitř GNU Emacs.jpg
OpenLisp běžící uvnitř Emacsu
Paradigmata Multi-paradigma : funkční , procedurální , objektově orientované , reflexní , meta
Rodina Lisp
Navrhl Christian Jullien
Vývojář Christian Jullien
Poprvé se objevil Duben 1988 ; Před 33 lety ( 1988-04 )
Stabilní uvolnění
11.2.0 / 6. srpna 2021 ; Před 0 dny ( 2021-08-06 )
Kázeň při psaní Dynamický , silný
Implementační jazyk C , OpenLisp
Plošina x86 , x86-64 , IA-64 , SPARC , PowerPC , MIPS , Alpha , PA-RISC , ARM , AArch64 , RISC-V
OS Windows , většina na bázi Unixu , Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP -UX , AIX , QNX , DOS , OS/2 , Pocket PC , OpenVMS , z/OS , Cygwin
Licence Proprietární
webová stránka www .eligis .com
Ovlivněn
Lisp , ISLISP

OpenLisp je programovací jazyk v Lisp rodině vyvinutý Christian Jullien z Eligis . To je v souladu s mezinárodním standardem pro ISLISP zveřejněné společně Mezinárodní organizace pro normalizaci (ISO) a Mezinárodní elektrotechnické komise (IEC), ISO / IEC 13816: 1997 (E), revidované normy ISO / IEC 13816: 2007 (E).

Je napsán v programovacích jazycích C a Lisp a běží na většině běžných operačních systémů . OpenLisp je označen jako implementace ISLISP , ale obsahuje také mnoho rozšíření kompatibilních s Common Lisp (hashtable, readtable, package, defstruct, sequences, racational numbers) a další knihovny ( síťová zásuvka , regulární výraz , XML , Portable Operating System Interface ( POSIX ), SQL , LDAP ( Lightweight Directory Access Protocol ).

OpenLisp zahrnuje interpreter spojené s read-eval-print smyčky (REPL), Lisp shromáždění Program (LAP) a backend kompilátor pro jazyk  C .

Cíle

Hlavním cílem této verze Lisp je implementovat plně kompatibilní systém ISLISP (při spuštění s -islisppříznakem je přísně omezen specifikací ISO/IEC 13816: 2007 (E)). Sekundárním cílem je poskytnout kompletní vestavitelný systém Lisp propojitelný s C/ C ++ nebo Java (prostřednictvím Java Native Interface (JNI)). Ke komunikaci s externím programem se používá mechanismus zpětného volání . Dalšími cíli je být použitelný jako skriptovací jazyk nebo lepicí jazyk a vytvářet samostatné spustitelné soubory programu .

Licence

Navzdory svému názvu je OpenLisp proprietární software . Jeho tlumočník je k dispozici zdarma pro jakékoli nekomerční použití.

Uživatelské rozhraní

OpenLisp běží hlavně v režimu konzoly: cmd.exev systému Microsoft Windows a emulátor terminálu v systémech založených na Unixu .

 ;; OpenLisp v11.x.y (Build: XXXX) by C. Jullien [Jan 01 20xx - 10:49:13]
 ;; Copyright (c) Eligis - 1988-20xx.
 ;; System 'sysname' (64-bit, 8 CPU) on 'hostname', ASCII.
 ;; God thank you, OpenLisp is back again!
 ? (fib 20)
 ;; elapsed time = 0.003s, (0 gc).
 = 6765
 ? _

Alternativní řešení zahrnují spuštění OpenLisp od Emacsu nastavením Emacsu inferior-lisp-modenebo použití integrovaného vývojového prostředí (IDE), které podporuje syntaxi OpenLisp . LispIDE od DaanSystems to dělá nativně.

Technika

Správce paměti

Interně OpenLisp používá virtuální paměť k automatickému přidělování a rozšiřování objektů. Malé objekty stejného typu jsou přidělovány pomocí organizace paměti Bibop (BIg Bag Of Pages). Velké objekty používají proxy, které ukazují na skutečný objekt v haldě Lisp. Konzervativní uvolňování paměti je značka a rozmítání s koalescenční hromadou (fázi rozmítání lze nakonfigurovat tak, aby používala vlákna ).

Typy dat

OpenLisp používá tagovanou architekturu ( 4bitový tag na 32bitových , 5bitový tag na 64bitových ) pro rychlou kontrolu typu (malé celé číslo, float, symbol, nevýhody, řetězec, vektor). Malá celá čísla (28 bitů na 32bitových, 59 bitů na 64bitových) jsou bez krabice , velká (32/64bitová) celá čísla jsou zabalena v rámečku. Podle požadavků ISLISP jsou implementovány také aritmetiky s libovolnou přesností (bignums). Znaky (potažmo řetězce) jsou buď 8bitové ( ANSI , EBCDIC ), nebo 16/32bitové, pokud je povolena podpora Unicode .

Vyhodnocovač a překladač

LISP jádra, nativní interpret a základní knihovny jsou ručně kódované v jazyce C , klín meziprodukt jazyk produkovaný překladač je pak převedena na C pomocí C koncovému generátoru kódů .

Dějiny

V roce 1988 bylo úplně prvním motivem OpenLisp implementace podmnožiny Lisp k rozšíření EmACT, klonu Emacsu . ISLISP se rychle stal jasnou volbou. Následoval další vývoj.

Milníky OpenLisp
Rok Verze Hlavní funkce
1988 1,0 OpenLisp začal jako jazyk hraček s názvem MLisp (Minimal Lisp) experimentovat s nápady z procesu standardů ISLISP
1993 3.3 První port na 64bitovém počítači ( DEC Alpha OSF/1 ); změna názvu z MLisp na OpenLisp
1994 4,0 První komerční použití
1995 4.5 Podpora soketových proudů
1997 5.7 OpenLisp je první Lisp, který implementuje standard ISLISP ISO/IEC 13816: 1997 (E).
1998 5.8 Volitelná podpora Unicode
2000 6.6 Překladač Lisp to LAP; LAP je interpretován virtuálním strojem vloženým do OpenLisp; rychlost se zlepšila asi 2x
2003 7.5 Lisp to C backend; schopen zkompilovat aplikaci s mnoha soubory Lisp do samostatného spustitelného souboru; rychlost vylepšena z 10x na 20x
2007 8.7 Změny tak, aby odpovídaly revizi ISO/IEC 13816: 2007 (E)
2010 9.2 Nativní celočíselná aritmetická podpora s libovolnou přesností
2021 11.2 Nejnovější verze; přidáno kompletní rozšíření formátu CLtL; zlepšit detekci haldy; 2021-04-30

Porty

OpenLisp prohlašuje, že je extrémně přenosný, běží na mnoha operačních systémech, včetně: Windows , většina Unix a POSIX ( Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP-UX , AIX , Cygwin , QNX ), DOS , OS/ 2 , Pocket PC , OpenVMS , z/OS . Sekce stahování oficiálních webových stránek obsahuje více než 50 různých verzí.

Standardní knihovny

Konektory

OpenLisp může komunikovat s moduly napsanými v jazyce C pomocí rozhraní cizí funkce (FFI), toky ISLISP jsou rozšířeny o podporu síťového soketu ( ./netadresář obsahuje vzorky pro protokol Hypertext Transfer Protocol (http), JavaScript Object Notation (JSON), Post Office Protocol 3 (POP3) „ Simple Mail Transfer Protocol (SMTP), Telnet , Rss ), zjednodušená čtečka XML (Extensible Markup Language ) dokáže převádět XML na Lisp. Základní modul SQL lze použít s MySQL , Odbc , SQLite , PostgreSQL . Hodnoty oddělené čárkou modul (CSV) umí číst a psát CSV soubory.

Nástroje

Mezi vývojářské nástroje patří protokolování dat , hezká tiskárna , profiler , návrh podle smluvního programování a testy jednotek .

Algoritmy

V ./contribadresáři je k dispozici několik dobře známých algoritmů (Dantzigův simplexový algoritmus , Dijkstraův algoritmus , Ford – Fulkersonův algoritmus ). Moduly jsou dodávány pomocí licencí BSD .

Původ jména

Předpona Otevřená odkazuje na otevřené systémy, nikoli na model s otevřeným zdrojovým kódem .

Název byl vybrán v roce 1993, aby nahradil interní kódový název MLisp, který již používal Gosling Emacs (jako nástupce Mocklispu ).

Programovací jazyk OpenLisp se liší od OpenLISP, projektu započatého v roce 1997 s cílem implementovat protokol pro oddělení lokátoru/identifikátoru .

Překladač

Tato část popisuje, jak kompilátor transformuje kód Lisp na C.

Zdrojový kód

Fibonacci číslo funkce (Tento klasický definice použít ve většině měřítek není nejúčinnější způsob, jak vypočítat fib)

(defun fib (n)
   (cond ((eq n 1) 1)
         ((eq n 2) 1)
         (t (+ (fib (- n 1)) (fib (- n 2))))))

Mezikód LAP

Kompilátor Lisp překládá zdrojový kód Lisp na následující mezikód. Následuje průchod pro optimalizaci kukátka, který používá tento přechodný formát k analýze a optimalizaci pokynů. Po optimalizaci je konečný kód LAP:

  ((fentry fib 1 0 0)
   (param 0)
   (jeq _l004 '1)
   (jneq _l003 '2)
   (move a1 '1)
   (return)
  _l003
   (gsub1 a1)
   (recurse 1)
   (move a2 a1)
   (param 0)
   (gsub a1 '2)
   (recurse 1)
   (gadd a2 a1)
  _l004
   (return)
   (end))

Překlad kódu C.

Nakonec generátor kódu C používá kód LAP k překladu pokynů v jazyce C.

static POINTER 
OLDEFCOMPILED1(olfib_00, p1) {
        POINTER a1;
        POINTER VOLATILE a2;

        ollapenter(SN_OLFIB_00);
        a1 = p1;
        if (eq(a1, olmakefix(1))) goto _l004;
        if (!eq(a1, olmakefix(2))) goto _l003;
        ollapleave(SN_OLFIB_00);
        return olmakefix(1);
_l003:
        a1 = ollapgsub(a1, olmakefix(1));
        a2 = olfib_00(a1);
        a1 = ollapgsub(p1, olmakefix(2));
        a1 = olfib_00(a1);
        a1 = ollapgadd(a2, a1);
_l004:
        ollapleave(SN_OLFIB_00);
        return a1;
}

Průvodce stylem

Délka čáry

OpenLisp přijímá linky s neomezenou délkou. Doporučený styl je, aby každý řádek textu v kódu měl maximálně 80 znaků na řádek .

Přijetí

Byl vybrán neziskovým veřejně přístupným unixovým systémem SDF Public Access Unix System na internetu jako jeden z jeho programovacích jazyků dostupných online.

Bricsys používá OpenLisp realizovat AutoLISP ve svém Bricscad designu s počítačovou podporou (CAD) systému.

MEVA je kompletně napsána s OpenLisp.

Università degli Studi di Palermo používá OpenLisp k výuce Lispu.

Reference

externí odkazy