openlisp | |
---|---|
Emacs környezetben futó OpenLisp | |
Típusú | Fordító , tolmács |
Szerző | Christian Julien |
Beírva | C és OpenLisp |
Operációs rendszer | Windows, Linux, MacOS, Solaris, HP-UX, AIX, OpenBSD, FreeBSD, NetBSD, PocketPC, QNX, VMS, Z/OS, Cygwin |
Első kiadás | 1988. április |
Hardver platform | x86, x86_64, ia64, sparc, sparcv9, PowerPC, mips, alfa, parisc, ARM, AArch64 |
legújabb verzió | 10.3.0 (2017. március 5. ) |
Engedély | Saját szoftver |
Weboldal | eligis.com |
Az OpenLisp egy programozási nyelv a Lisp nyelvcsaládból, amelyet Christian Julien fejlesztett ki. [1] Megfelel [2] [3] [4] az ISO ISLISP szabványnak ( ISO/IEC 13816:1997(E) Archiválva : 2016. április 10. a Wayback Machine -nél [5] , felülvizsgálva az ISO/IEC 13816:2007(E) ) Archiválva : 2016. július 30. a Wayback Machine -nél , kiadó: ISO ).
A kernel C és Lisp nyelven íródott, és a legtöbb operációs rendszeren fut. Az OpenLisp az ISLISP szabvány megvalósítása, de számos Common Lisp kompatibilis kiterjesztést (hash táblák, olvasott táblák, csomagok, struktúrák, szekvenciák, racionalitások) és számos könyvtárat ( socket , reguláris kifejezések , XML , Posix , SQL ) is tartalmaz. , LDAP ) . [6]
Az OpenLisp tartalmaz egy interpretátort az interaktív fejlesztéshez ( REPL ), egy fordítót Lisp Assembly Programba (LAP), és egy kódgenerátort, amely a LAP-t C kóddá alakítja.
A lisp dialektus létrehozásának céljai a következők voltak:
Kezdetben a nyelv belső neve MLisp volt. 1993-ban ezt a nevet OpenLisp-re változtatták, mivel kiderült, hogy az MLisp már használatban volt a Gosling Emacs -ben .
Az 1990-es évek elején az információtechnológiai alkalmazásokban a "nyitott" ("nyitott") szót gyakrabban használták olyan rendszerekre, amelyek nyílt specifikációkat valósítanak meg az interfészekre, szolgáltatásokra és adatformátumokra, ami lehetővé teszi ezen rendszerek mesterséges használatát. korlátozásokat, interoperábilis és/vagy azokkal kölcsönhatásba lépő szoftvereket hozzanak létre (ebben az értelemben használják a kifejezést a „ nyílt számítógépes rendszer ” definíciójában). A „nyitottság” fogalma összhangban van az OpenLisp tervezési céljaival (lásd fent), csakúgy, mint az a tény, hogy megvalósítja az ISLISP szabványt. [7]
Így a nyelv neve a használat nyitottságát hivatott szimbolizálni, de semmi köze a nyílt forráskódú kezdeményezéshez vagy általában a szabad szoftverekhez . Az OpenLisp környezet mindig is szabadalmaztatott licenc alatt volt és a jövőben is megjelenik . A forrásszövegek egy része le van zárva.
Az OpenLisp nyelvet nem szabad összetéveszteni az OpenLISP projekttel, amely 1997-ben indult a Locator/Identifier Separation Protocol megvalósítására .
Az OpenLisp szabadalmaztatott szoftver . A tolmács nem kereskedelmi használatra ingyenes.
A rendszer forráskódjának egy része ingyenes licencekkel (GNU GPL, BSD) érhető el, vagy nyilvánosan elérhető . Az OpenLisp C/C++ nyelven írt rendszerekbe való beágyazásához szükséges forráskód külön licencelt és térítés ellenében biztosított.
Az OpenLisp interpreter kezdetben konzol módban fut ( Microsoft Windows rendszeren Cmd - ben , Unix -szerű rendszereken pedig terminálemulátorból ).
;; OpenLisp v9.xy (Build: XXXX), készítette: C. Jullien [január 1. 20xx - 10:49:13] ;; Copyright (c) Eligis - 1988-20xx. ;; Rendszer 'sysname' (64 bites, 8 CPU) a 'hostname'-n, ASCII. ;; Isten hála, az OpenLisp újra visszatért! ? ( fib 20 ) ;; eltelt idő = 0,003 s, (0gc). = 6765 ? _Lehetőség van a REPL futtatására is Emacs alatt (a változót inicializálni kell inferior-lisp-modeaz OpenLisp interpreter bináris fájljának elérési útjával). A DaanSystems LispIDE-je beépített támogatja az OpenLisp szintaxist.
Az OpenLisp egy virtuális memória mechanizmust használ az objektumok memóriájának automatikus lefoglalására és módosítására. Az azonos típusú kisméretű objektumok a BIBOP (BIg Bag Of Pages) technológiával kerülnek elhelyezésre. A nagy objektumok kiosztásához proxy objektumokat használnak , amelyek a Lisp kupac valódi objektumára mutatnak. A konzervatív szemétgyűjtő mark and sweep technikát használ, és konfigurálható a többszálú feldolgozás támogatására .
Az OpenLisp címkearchitektúrát használ (4 bites címke 32 bitesen, 5 bites címke 64 bites szón) a gyors típusellenőrzéshez (kis egész szám, float, szimbólum, hátrányok, karakterlánc, vektor). A rövid egész számokat (28 bit egy 32 bites szón, 59 bit egy 64 bites szón) csomagolatlanul, a hosszú egészeket (32 bit / 64 bit) csomagolva tárolja. Az ISLISP követelményeinek megfelelően a bignumok is megvalósulnak . A karakterek (és így a karakterláncok) 8 bitesek ( ANSI , EBCDIC ) vagy 16/32 bitesek lehetnek, ha az Unicode - támogatás engedélyezve van .
A kernel, az interpreter és az alapvető könyvtárak kézzel írottak C nyelven . A fordító a forrásszöveget egy köztes nyelvű LAP-ra alakítja, amelyet a kódgenerátor C -re fordít, amelyet viszont a célplatform bármely C-fordítója lefordíthat.
Év | Változat | Nagy változások |
---|---|---|
1988 | 1.0 | A projekt az MLisp (Minimal Lisp) nevű kutatási nyelvként indult, hogy kísérletezzen a készülő ISLISP szabvány ötleteivel . 1988-ban a fő indíték a Lisp bevezetése volt az EmACT , az Emacs klónjának kiterjesztésére . Az ISLISP bizonyult a legalkalmasabb választásnak. |
1993 | 3.3 | Első port 64 bites architektúrára ( DEC Alpha OSF/1). Névváltoztatás OpenLisp-re. |
1994 | 4.0 | Első kereskedelmi használat. |
1995 | 4.5 | Megvalósított támogatás az aljzatokhoz. |
1997 | 5.7 | Az OpenLisp volt az ISLISP ISO/IEC 13816:1997(E) szabvány első implementációja. [9] |
1998 | 5.8 | Megvalósított Unicode támogatás . |
2000 | 6.6 | Fordító a LAP-ban. A LAP-okat a rendszer részét képező virtuális gép értelmezi. A teljesítmény megduplázódott. |
2003 | 7.5 | Megvalósított "Lisp to C" háttérprogram. Elérhetővé vált a több fájlból álló Lisp programok futtatható modullá való fordítása. A sebesség 10-20-szorosára nőtt. |
2007 | 8.7 | Frissítve az új ISO/IEC 13816:2007(E) szabvány miatt. Archiválva : 2016. július 30. a Wayback Machine -nél . |
2010 | 9.2 | Egész aritmetika megvalósítása korlátlan pontossággal. |
2017 | 10.3 | Aktuális verzió (2017-03-05). |
Az OpenLisp rendkívül hordozható, és számos operációs rendszeren futhat: Microsoft Windows , a legtöbb Unix - alapú rendszer , QNX , MS-DOS , OS/2 , Pocket PC , OpenVMS , z/OS . Több mint 50 különböző verzió letölthető a hivatalos webhelyről.
Az OpenLisp a C nyelven írt modulokkal tud kommunikálni FFI segítségével , az ISLISP I/O folyamok kibővülnek a hálózati aljzatok támogatására. A telepített rendszer könyvtára ./netpéldákat tartalmaz a Http , Json , Pop3 , Smtp , Telnet , Rss fájlok használatára . Egy egyszerű XML -olvasó képes az XML-t Lisp listákká konvertálni. Az alapul szolgáló SQL modul használható a MySQL , Odbc , SQLite , PostgreSQL eléréséhez . A CSV modul CSV formátumú fájlok olvasását és írását biztosítja.
A fejlesztői eszközök közé tartozik a naplózás, a kód formázása, a profilkészítő , a szerződéses programozás támogatása és az egységteszt .
./contribNéhány jól ismert algoritmus implementációja elérhető a katalógusban ( szimplex algoritmus , Dijkstra algoritmusa , Ford-Fulkerson algoritmus és mások). A modulok a BSD licenc alatt állnak rendelkezésre .
Ez a rész leírja, hogyan alakíthatja át a Lisp-kódot C-kóddá az OpenLisp-ben.
Példaként egy rekurzív függvényt használunk , amely az n-edik Fibonacci-számfib kiszámítását végzi (ez a klasszikus definíció, amelyet sok benchmarkban használnak, és nem a leghatékonyabb valós számításokhoz).
( defun fib ( n ) ( cond ( ( eq n 1 ) 1 ) ( ( eq n 2 ) 1 ) ( t ( + ( fib ( - n 1 )) ( fib ( - n 2 ))))))A fordító a Lisp forráskódot köztes kódra fordítja LAP lista formátumban, amelyet helyi optimalizálásnak vetnek alá ( eng. peephole optimization ). Az optimalizálás után a kapott LAP kód így néz ki:
( ( fentry fib 1 0 0 ) ( param 0 ) ( jeq _l004 '1 ) ( jneq _l003 '2 ) ( mozgás a1 ' 1 ) ( vissza ) _l003 ( gsub1 a1 ) ( recurse 1 ) ( mozgás a2 a01 ) ( param ) ( gsub a1 '2 ) ( 1. ismétlés ) ( gadd a2 a1 ) _l004 ( visszatérés ) ( vége ))Végül a kódgenerátor a LAP kódot C utasításokká alakítja.
statikus POINTER OLDEFCOMPILED1 ( olfib_00 , p1 ) { MUTATÓ a1 ; POINTER ILLÉKONY 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 ); visszatérés ( a1 ); }A fenti részlet csak magát a generált C kódot tartalmazza. A futtatható fájl beszerzéséhez ezt a kódot be kell ágyazni a megfelelő környezetbe, és le kell fordítani az OpenLisp környezet részét képező könyvtárakkal.
A rendszer szerzőjének oldalán található adatok szerint Archivált 2021. február 27-én a Wayback Machine -en (azonban elavult - a megadott anyagok a 7.9-es verzióra vonatkoznak, míg a jelenlegi 2018-as verzió a 10.3-as), két másikhoz képest Az ISLISP implementációinál az OpenLisp ugyanazon a szinten vagy valamivel gyorsabb értelmezési módban, és lényegesen (10-20-szor) gyorsabb a lefordított alkalmazás sebességében.
Selypít | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Jellemzők |
| ||||||||||||||
Megvalósítások |
| ||||||||||||||
Hardver |
| ||||||||||||||
Közösség |
| ||||||||||||||
|