OpenLisp - OpenLisp
![]() OpenLisp běží uvnitř Emacs | |
Paradigmata | Multi-paradigma: funkční, procesní, objektově orientovaný, reflexní, meta |
---|---|
Rodina | Lisp |
Navrhl | Christian Jullien |
Vývojář | Christian Jullien |
Poprvé se objevil | Duben 1988 |
Stabilní uvolnění | 11.0.0 / 30. října 2020 |
Psací disciplína | Dynamický, silný |
Jazyk implementace | C, OpenLisp |
Plošina | x86, x86-64, IA-64, SPARC, PowerPC, MIPS, Alfa, PA-RISC, PAŽE, AArch64, RISC-V |
OS | Okna, většina Unix -na základě, Linux, Operační Systém Mac, FreeBSD, OpenBSD, NetBSD, Solaris, HP-UX, AIX, QNX, DOS, OS / 2, Kapesní PC, OpenVMS, z / OS, Cygwin |
Licence | Proprietární |
webová stránka | www |
Ovlivněno | |
Lisp, ISLISP |
OpenLisp je programovací jazyk v Lisp rodina vyvinutá Christian Jullien[1] z Eligis. Vyhovuje[2][3][4] do mezinárodní standard pro ISLISP společně zveřejněno Mezinárodní organizace pro normalizaci (ISO) a Mezinárodní elektrotechnická komise (IEC), ISO / IEC 13816: 1997 (E),[5][6] revidováno podle ISO / IEC 13816: 2007 (E).[7].
Napsáno v programovacích jazycích C a Lisp, běží na nejběžnějších operační systémy. OpenLisp je označen jako ISLISP implementace, ale také obsahuje mnoho Společný Lisp -kompatibilní rozšíření (hashtable, readtable, balíček, defstruct, sekvence, racionální čísla) a další knihovny (síťová zásuvka, regulární výraz, XML, Přenosné rozhraní operačního systému (POSIX ), SQL, Lightweight Directory Access Protocol (LDAP)).[8]
OpenLisp obsahuje tlumočník spojené s a read – eval – tisková smyčka (REPL), program Lisp Assembly (LAP) a backend překladač pro jazykC.
Cíle
Hlavním cílem tohoto Lisp verzí je implementace plně kompatibilního systému ISLISP (při spuštění s -islisp
vlajka, je přísně omezena na specifikaci ISO / IEC 13816: 2007 (E)). Sekundárním cílem je poskytnout kompletní zabudovatelný Lisp systém propojitelný s C /C ++ nebo Jáva (přes Nativní rozhraní Java (JNI)). A zpětné volání mechanismus se používá ke komunikaci s externím programem. Další cíle mají být použitelné jako skriptovací jazyk nebo lepidlo jazyk a vyrábět samostatný program spustitelné soubory.
Licence
Přes jeho název, OpenLisp je proprietární software. Své tlumočník je k dispozici zdarma pro jakékoli nekomerční použití.
Uživatelské rozhraní
OpenLisp běží hlavně v konzolovém režimu: cmd.exe
na Microsoft Windows, a emulátor terminálu na Unix -založené systémy.
;; OpenLisp v10.x.y (build: XXXX) od C. Julliena [1. ledna 20xx - 10:49:13] ;; Copyright (c) Eligis - 1988-20xx. ;; Systém 'sysname' (64bitový, 8 CPU) na 'hostname', ASCII. ;; Bože děkuji, OpenLisp je zpět! ? (fib 20) ;; uplynulý čas = 0,003 s (0 gc). = 6765 ? _
Alternativní řešení zahrnují spuštění OpenLispu z Emacs prostřednictvím nastavení Emacsu režim inferior-lisp
, nebo pomocí integrované vývojové prostředí (IDE), který podporuje OpenLisp syntax. LispIDE od společnosti DaanSystems tak činí nativně.
Technologie
Správce paměti
Interně používá OpenLisp virtuální paměť automaticky přidělit a rozšířit objekty. Malé objekty stejného typu jsou přidělovány pomocí organizace paměti Bibop (BIg Bag Of Pages). Velké objekty používají a proxy které ukazují na skutečný objekt v haldě Lisp. Konzervativní odvoz odpadu je označit a zamést s splynutí halda (fázi rozmítání lze nakonfigurovat pro použití vlákna ).
Typy dat
OpenLisp používá označená architektura (4 bity tag na 32-bit, 5 bitová značka zapnuta 64-bit ) pro rychlou kontrolu typu (malé celé číslo, plovák, symbol, zápory, řetězec, vektor). Malá celá čísla (28 bitů na 32bitových, 59 bitů na 64bitových) jsou nezařazeno, velká (32 / 64bitová) celá čísla jsou orámovaná. Jak požaduje ISLISP, aritmetika s libovolnou přesností (bignum) jsou také implementovány. Znaky (tedy řetězce) jsou buď 8-bit (ANSI, EBCDIC ) nebo 16/32 bitů, pokud Unicode podpora je povolena.
Hodnotitel a překladač
Lispové jádro, nativní tlumočník a základní knihovny jsou ručně kódovány v jazyce C, KLÍN střední jazyk produkoval překladač je pak přeložen do C backendem C. generátor kódů.
Dějiny
V roce 1988 bylo úplně prvním motivem OpenLispu implementace podmnožiny Lisp k rozšíření EmACT, an Emacs klon. ISLISP se rychle stal jasnou volbou. Následoval další vývoj.
Rok | Verze | Hlavní rys |
---|---|---|
1988 | 1.0 | OpenLisp začal jako jazyk hraček s názvem MLisp (Minimal Lisp) experimentovat s nápady z ISLISP standardy proces |
1993 | 3.3 | První port zapnutý 64-bit stroj (DEC Alpha OSF / 1 ); změna názvu z MLisp na OpenLisp |
1994 | 4.0 | První komerční použití |
1995 | 4.5 | Podpora streamů zásuvek |
1997 | 5.7 | OpenLisp je první Lisp, který implementuje standard ISLISP ISO / IEC 13816: 1997 (E).[10] |
1998 | 5.8 | Unicode volitelná podpora |
2000 | 6.6 | Překladač Lisp to LAP; LAP je interpretován a virtuální stroj vložený do OpenLisp; rychlost se zlepšila asi 2x |
2003 | 7.5 | Back-end Lisp do C; schopen sestavit aplikaci s mnoha soubory Lisp do samostatného spustitelného souboru; rychlost zlepšena z 10x na 20x |
2007 | 8.7 | Změny, které odpovídají revizi ISO / IEC 13816: 2007 (E)[7] |
2010 | 9.2 | Nativní celé číslo aritmetika s libovolnou přesností Podpěra, podpora |
2020 | 11.0 | Nejnovější verze; přidáno kompletní rozšíření formátu CLtL; 2020-10-30 |
1955 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1,5, LISP 2(opuštěný) | ||||||||||||||
Maclisp | ||||||||||||||
Interlisp | ||||||||||||||
Lisp stroj Lisp | ||||||||||||||
Systém | R5RS | R6RS | R7RS malý | |||||||||||
NULA | ||||||||||||||
Franz Lisp | ||||||||||||||
Společný Lisp | ||||||||||||||
Le Lisp | ||||||||||||||
T | ||||||||||||||
Chez Scheme | ||||||||||||||
Emacs Lisp | ||||||||||||||
AutoLISP | ||||||||||||||
PicoLisp | ||||||||||||||
EuLisp | ||||||||||||||
ISLISP | ||||||||||||||
OpenLisp | ||||||||||||||
Schéma PLT | Raketa | |||||||||||||
GNU Guile | ||||||||||||||
Vizuální LISP | ||||||||||||||
Clojure | ||||||||||||||
Oblouk | ||||||||||||||
LFE | ||||||||||||||
Hy |
Přístavy
OpenLisp tvrdí, že je extrémně přenosný, funguje na mnoha zařízeních operační systémy počítaje v to: Okna, většina Unix a POSIX na základě (Linux, Operační Systém Mac, FreeBSD, OpenBSD, NetBSD, Solaris, HP-UX, AIX, Cygwin, QNX ), DOS, OS / 2, Kapesní PC, OpenVMS, z / OS. Sekce pro 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 C pomocí rozhraní cizí funkce (FFI) jsou toky ISLISP rozšířeny o podporu síťová zásuvka (./síť
adresář obsahuje ukázky pro Hypertext Transfer Protocol (http), JavaScript Object Notation (JSON), Post Office Protocol 3 (POP3), Protokol jednoduchého přenosu pošty (SMTP), Telnet, Rss ), zjednodušený rozšiřitelný značkovací jazyk (XML ) čtečka dokáže převést XML na Lisp. Základní SQL modul lze použít s MySQL, Odbc, SQLite, PostgreSQL. A hodnoty oddělené čárkami (CSV) modul umí číst a zapisovat soubory CSV.
Nástroje
Nástroje pro vývojáře zahrnují protokolování dat, hezká tiskárna, profiler, design podle smlouvy programování a jednotkové testy.
Algoritmy
Některé dobře známé algoritmy jsou k dispozici v ./contrib
adresář (Dantzig simplexní algoritmus, Dijkstrův algoritmus, Algoritmus Ford-Fulkerson ). Moduly se dodávají pomocí Licence BSD.
Původ jména
Předpona Otevřeno odkazuje na otevřené systémy ne do open-source model.[11]
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 Mocklisp ).
OpenLisp programovací jazyk se liší od projektu OpenLISP, jehož realizace byla zahájena v roce 1997 Protokol o oddělení lokátoru / identifikátoru.
Překladač
Tato část popisuje, jak kompilátor transformuje kód Lisp na C.
Zdrojový kód
The Fibonacciho číslo funkce (tato klasická definice používaná ve většině měřítek není nejúčinnějším způsobem výpočtu fib
)
(defun fib (n) (kond ((ekv n 1) 1) ((ekv n 2) 1) (t (+ (fib (- n 1)) (fib (- n 2))))))
Mezilehlý kód LAP
Kompilátor Lisp překládá zdrojový kód Lisp do následujícího mezikódu. Za ním následuje a optimalizace kukátka pass, 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) (hýbat se a1 '1) (vrátit se) _l003 (gsub1 a1) (opakovat 1) (hýbat se a2 a1) (param 0) (gsub a1 '2) (opakovat 1) (gadd a2 a1) _l004 (vrátit se) (konec))
Překlad kódu C.
Nakonec generátor kódu C používá kód LAP k překladu pokynů v jazyce C.
statický UKAZATEL OLDEFCOMPILED1(olfib_00, p1) { UKAZATEL a1; UKAZATEL NESTÁLÝ a2; ollapenter(SN_OLFIB_00); a1 = p1; -li (ekv(a1, olmakefix(1))) jít do _l004; -li (!ekv(a1, olmakefix(2))) jít do _l003; ollapleave(SN_OLFIB_00); vrátit se 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); vrátit se a1;}
Průvodce styly
Délka řádku
OpenLisp přijímá linky s neomezenou délkou. Doporučený styl je, aby každý řádek textu v kódu měl mít maximálně 80 znaků na řádek.
Přijetí
Byl vybrán uživatelem SDF Public Access Unix System neziskový veřejný přístup Unix systémy na Internet[12][13] jako jeden ze svých programovacích jazyků dostupný online.
Bricsys používá k implementaci OpenLisp AutoLISP v jeho Bricscad počítačem podporovaný design (CAD) systém.[14]
MEVA [15] je zcela napsán s OpenLisp.
Università degli Studi di Palermo používá OpenLisp k výuce Lisp.[16]
Reference
- ^ Parquier, Pierre (2000). „JTC1 / SC22 N3170“. ISO / IEC. Citováno 11. března 2012.[trvalý mrtvý odkaz ]
- ^ Simonsen, Keld (13. března 1999). "Islisp - nejčastější dotazy". ISO / IEC. Citováno 11. listopadu 2016.
- ^ Nobuto, Izumi (Tohoku Univ., Grad. Sch.); Takayasu, Ito (Tohoku Univ., Grad. Sch.) (1999). „Tlumočník a překladač standardu ISO Lisp ISLISP“. Transakce Japonské společnosti pro zpracování informací. ISSN 0387-5806. Citováno 17. června 2013.
- ^ McJones, Paul (2010). „ISLISP“. Software Preservation Group. Citováno 18. března 2012.
- ^ „ISO / IEC 13816: 1997 (E)“. Mezinárodní organizace pro normalizaci. Citováno 11. listopadu 2018.
- ^ Parquier, Pierre (JTC1 SC22 WG16 Convenor) (1996). „ISO / IEC JTC1 SC22 WG16 N177 - DIS hlasování“. ISO / IEC. Citováno 15. března 2012.
- ^ A b „ISO / IEC 13816: 2007 (E)“. Mezinárodní organizace pro normalizaci. Citováno 11. listopadu 2018.
- ^ Jullien, Christian (2011). „Referenční příručka OpenLisp v9.8.0“. Eligis. Citováno 14. března 2012.
- ^ Jullien, Christian (2011). "OpenLisp ChangeLog". Eligis. Citováno 15. března 2012.
- ^ Rinehuls, William (4. srpna 1999). „JTC1 / SC22 N2969“. ISO / IEC. Citováno 11. listopadu 2016.
- ^ Jullien, Christian (2011). "OpenLisp FAQ". Eligis. Citováno 15. března 2012.
- ^ Stover, Gene Michael (2005). "7.2 Jazyky na SDF". SDF Public Access Unix System, Inc.. Citováno 14. března 2012.
- ^ „Hostingové společnosti“. ALU (Asociace uživatelů Lisp). Archivovány od originál dne 9. února 2011. Citováno 18. března 2012.
- ^ „Bricscad News“. Bricscad. 2009. Citováno 20. března 2012.
- ^ „Konkurenční inteligence a problémy s rozhodováním“. Amos Davis. 2013. Citováno 30. září 2014.
- ^ „Corso di Informatica Teorica“. Università degli Studi di Palermo. 2013. Citováno 22. března 2013.