OpenLisp - OpenLisp

OpenLisp
OpenLisp -löpning inuti GNU Emacs.jpg
OpenLisp körs inuti Emacs
Paradigm Multiparadigm : funktionellt , procedurellt , objektorienterat , reflekterande , meta
Familj Läspa
Designad av Christian Jullien
Utvecklare Christian Jullien
Första gången dök upp April 1988 ; 33 år sedan ( 1988-04 )
Stabil frisättning
11.2.0 / 6 augusti 2021 ; 0 dagar sedan ( 2021-08-06 )
Skrivdisciplin Dynamisk , stark
Implementeringsspråk C , OpenLisp
Plattform x86 , x86-64 , IA-64 , SPARC , PowerPC , MIPS , Alpha , PA-RISC , ARM , AArch64 , RISC-V
OS Windows , de flesta Unix -baserade, Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP -UX , AIX , QNX , DOS , OS/2 , Pocket PC , OpenVMS , z/OS , Cygwin
Licens Proprietär
Hemsida www .eligis .com
Påverkad av
Lisp , ISLISP

OpenLisp är ett programmeringsspråk i familjen Lisp som utvecklats av Christian Jullien från Eligis . Den överensstämmer med den internationella standarden för ISLISP publicerad tillsammans av International Organization for Standardization (ISO) och International Electrotechnical Commission (IEC), ISO/IEC 13816: 1997 (E), reviderad till ISO/IEC 13816: 2007 (E).

Den är skriven på programmeringsspråken C och Lisp och körs på de flesta vanliga operativsystem . OpenLisp betecknas som en ISLISP -implementering , men innehåller också många Common Lisp -kompatibla tillägg (hashtable, readtable, package, defstruct, sekvenser, rationella nummer) och andra bibliotek ( nätverksuttag , reguljärt uttryck , XML , Portable Operating System Interface ( POSIX ), SQL , Lightweight Directory Access Protocol (LDAP)).

OpenLisp inkluderar en tolk som hör samman med en läs-eval-print loop (REPL), en Lisp Assembly Program (LAP) och en backend kompilator för språket  C .

Mål

Huvudmålet med denna Lisp -version är att implementera ett fullt kompatibelt ISLISP -system (när det lanseras med -islispflagga är det strikt begränsat till ISO/IEC 13816: 2007 (E) -specifikationen). Det sekundära målet är att tillhandahålla ett komplett inbyggbart Lisp -system som kan länkas till C/ C ++ eller Java (via Java Native Interface (JNI)). En återuppringningsmekanism används för att kommunicera med det externa programmet. Andra mål är att vara användbara som skriptspråk eller limspråk och att producera fristående programkörbara filer.

Licens

Trots sitt namn är OpenLisp proprietär programvara . Dess tolk är tillgänglig gratis för icke -kommersiell användning.

Användargränssnitt

OpenLisp körs huvudsakligen i konsolläge: cmd.exeMicrosoft Windows och terminalemulatorUnix -baserade system.

 ;; 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
 ? _

Alternativa lösningar inkluderar kör OpenLisp från Emacs via inrätta Emacs inferior-lisp-modeeller med hjälp av en integrerad utvecklingsmiljö (IDE) som stöder OpenLisp syntax . LispIDE by DaanSystems gör det inbyggt.

Teknologi

Minneshanterare

Internt använder OpenLisp virtuellt minne för att automatiskt tilldela och utöka objekt. Små objekt av samma typ tilldelas med hjälp av en Bibop (BIg Bag Of Pages) minnesorganisation. Stora objekt använder en proxy som pekar på det riktiga objektet i Lisp -hög. Den konservativa sopsamlingen är ett märke och svep med sammanfogande hög (svepningsfas kan konfigureras för att använda trådar ).

Datatyper

OpenLisp använder taggad arkitektur (4 bitars tagg på 32-bitars , 5 bitars tagg på 64-bitars ) för snabb typkontroll (litet heltal, float, symbol, nackdelar, sträng, vektor). Små heltal (28 bitar på 32-bitars, 59 bitar på 64-bitars) är oboxade , stora (32/64-bitars) heltal är inramade. Såsom krävs av ISLISP implementeras också godtycklig precision aritmetik (bignums). Tecken (därav strängar) är antingen 8-bitars ( ANSI , EBCDIC ) eller 16/32-bitar om Unicode- stöd är aktiverat.

Utvärderare och kompilator

Lisp Kernel, native tolk och grundbibliotek är handkodade på språket C , LAP -mellanspråk som produceras av kompilatorn översätts sedan till C av C -backend -kodgeneratorn .

Historia

1988 var det allra första motivet bakom OpenLisp att implementera en Lisp -delmängd för att förlänga EmACT, en Emacs -klon. ISLISP blev snabbt ett självklart val. Ytterligare utveckling följde.

OpenLisp -milstolpar
År Version Huvud funktion
1988 1.0 OpenLisp börjat som en leksak språk som heter MLisp (Minimal Lisp) att experimentera med idéer från ISLISP standarder process
1993 3.3 Första porten på 64-bitars maskin ( DEC Alpha OSF/1 ); namnändring från MLisp till OpenLisp
1994 4.0 Första kommersiella användningen
1995 4.5 Socket streams stöd
1997 5.7 OpenLisp är den första Lisp som implementerar standarden ISLISP ISO/IEC 13816: 1997 (E).
1998 5.8 Unicode valfritt stöd
2000 6.6 Lisp till LAP -kompilator; LAP tolkas av en virtuell maskin inbäddad i OpenLisp; hastigheten förbättrades ca 2x
2003 7.5 Lisp till C backend; kunna kompilera en applikation med många Lisp -filer till en fristående körbar; hastigheten förbättrades från 10x till 20x
2007 8.7 Ändringar för att matcha ISO/IEC 13816: 2007 (E) revision
2010 9.2 Ursprungligt heltal godtyckligt precision aritmetiskt stöd
2021 11.2 Senaste versionen; lagt till komplett tillägg i CLtL -format; förbättra högdetektering; 2021-04-30

Hamnar

OpenLisp hävdar att den är extremt bärbar, den körs på många operativsystem inklusive: Windows , de flesta Unix- och POSIX- baserade ( Linux , macOS , FreeBSD , OpenBSD , NetBSD , Solaris , HP-UX , AIX , Cygwin , QNX ), DOS , OS/ 2 , Pocket PC , OpenVMS , z/OS . Den officiella hemsidan för nedladdning innehåller över 50 olika versioner.

Standardbibliotek

Anslutningar

OpenLisp kan interagera med moduler skrivna i C med gränssnitt för främmande funktioner (FFI), ISLISP -strömmar utökas för att stödja nätverksuttag ( ./netkatalogen innehåller prover för Hypertext Transfer Protocol (http), JavaScript Object Notation (JSON), Post Office Protocol 3 (POP3) , Simple Mail Transfer Protocol (SMTP), Telnet , Rss ), en förenklad XML -läsare ( Extensible Markup Language ) kan konvertera XML till Lisp. En grundläggande SQL -modul kan användas med MySQL , Odbc , SQLite , PostgreSQL . En kommaseparerad värde (CSV) -modul kan läsa och skriva CSV-filer.

Verktyg

Utvecklarverktyg inkluderar dataloggning , snygg skrivare , profiler , design genom kontraktsprogrammering och enhetstester .

Algoritmer

Några välkända algoritmer finns tillgängliga i ./contribkatalogen (Dantzigs simplexalgoritm , Dijkstras algoritm , Ford – Fulkerson -algoritm ). Moduler levereras med BSD -licenser .

Ursprung för namn

Prefixet Öppen refererar till öppna system, inte till modellen med öppen källkod .

Namnet valdes 1993 för att ersätta MLisp interna kodnamn som redan användes av Gosling Emacs (som efterträdare av Mocklisp ).

OpenLisp programmeringsspråk är annorlunda än OpenLISP, ett projekt som startades 1997 för att implementera Locator/Identifier Separation Protocol .

Kompilator

Det här avsnittet beskriver hur en kompilator omvandlar Lisp -kod till C.

Källkod

Den Fibonacci nummer funktionen (denna klassiska definition som används i de flesta riktmärken är inte det mest effektiva sättet att beräkna fib)

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

LAP -mellanliggande kod

Lisp -kompilatorn översätter Lisp -källkoden till följande mellankod. Det följs av ett titthålsoptimeringspass som använder detta mellanliggande format för att analysera och optimera instruktioner. Efter optimering är den sista LAP -koden:

  ((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))

C -kodöversättning

Slutligen använder C -kodgenerator LAP -kod för att översätta instruktioner i 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;
}

Stil guide

Linjelängd

OpenLisp accepterar linjer med obegränsad längd. Den rekommenderade stilen är att varje textrad i koden ska ha högst 80 tecken per rad .

Adoption

Det har valts av SDF Public Access Unix System ideella offentliga Unix -system på Internet som ett av dess programmeringsspråk som är tillgängliga online.

Bricsys använder OpenLisp för att implementera AutoLISP i sitt Bricscad dator-aided design (CAD) -system.

MEVA är helt skrivet med OpenLisp.

Università degli Studi di Palermo använder OpenLisp för att lära ut Lisp.

Referenser

externa länkar