Openlisp

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 17-én felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .
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  ( 1988-04 )
Hardver platform x86, x86_64, ia64, sparc, sparcv9, PowerPC, mips, alfa, parisc, ARM, AArch64
legújabb verzió 10.3.0 (2017. március 5. ) ( 2017-03-05 )
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.

Fejlesztési célok

A lisp dialektus létrehozásának céljai a következők voltak:

Nyelvjárási név

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 .

Licenc és terjesztési feltételek

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.

Felhasználói felület

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.

A megvalósítás részletei

Memóriakezelő

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 .

Adattípusok

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 .

Tolmács és fordító

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.

Történelem

Főbb mérföldkövek az OpenLisp fejlesztésében. [nyolc]
É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).

Portolás

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.

Szabványos könyvtárak

I/O és interakció más szoftverekkel

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.

Fejlesztői eszközök

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 .

Algoritmusok

./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 .

Összeállítás

Ez a rész leírja, hogyan alakíthatja át a Lisp-kódot C-kóddá az OpenLisp-ben.

Forráskód

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

LAP

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

C kód generálása

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.

Teljesítmény

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.

Alkalmazás

Jegyzetek

  1. Pierre Parquier. JTC1/SC22 N3170 . ISO/IEC (2000). Letöltve: 2012. március 11.  (elérhetetlen link)
  2. Keld Simonsen. Islisp-gyak . ISO/IEC (1999. március 13.). Letöltve: 2016. november 11. Az eredetiből archiválva : 2018. november 1..
  3. IZUMI NOBUTO (Tohoku Univ., Grad. Sch.) ITO TAKAYASU (Tohoku Univ., Grad. Sch.). Az ISO szabvány Lisp ISLISP tolmácsa és fordítója. (nem elérhető link) . Transactions of Information Processing Society of Japan (1999). Letöltve: 2013. június 17. Az eredetiből archiválva : 2018. augusztus 26.. 
  4. Paul McJones. ISLISP . Szoftvermegőrző csoport (2010). Letöltve: 2012. március 18. Az eredetiből archiválva : 2018. augusztus 26..
  5. Pierre Parquier (JTC1 SC22 WG16 Convenor). ISO/IEC JTC1 SC22 WG16 N177 - DIS szavazás . ISO/IEC (1996). Letöltve: 2012. március 15. Az eredetiből archiválva : 2021. január 27..
  6. C. Jullien. OpenLisp v9.8.0 használati útmutató . Eligis (2011). Letöltve: 2012. március 14. Az eredetiből archiválva : 2001. június 4..
  7. C. Jullien. Nyissa meg a Lisp GYIK lehetőséget . Eligis (2011). Letöltve: 2012. március 15.
  8. C. Jullien. OpenLispChangeLog . Eligis (2011). Letöltve: 2012. március 15.
  9. William Rinehuls. JTC1/SC22 N2969 . ISO/IEC (1999. augusztus 4.). Letöltve: 2016. november 11. Az eredetiből archiválva : 2021. január 26..
  10. Gene Michael Stover. 7.2 Nyelvek az SDF-en . SDF Public Access UNIX System, Inc. (2005). Letöltve: 2012. március 14. Az eredetiből archiválva : 2017. május 10.
  11. Tárhelyszolgáltató cégek (lefelé irányuló kapcsolat) . ALU (Association of Lisp Users). Hozzáférés dátuma: 2012. március 18. Az eredetiből archiválva : 2011. február 9.. 
  12. Bricscad News . Briccad (2009). Letöltve: 2012. március 20. Az eredetiből archiválva : 2018. augusztus 27..
  13. Versenyképességi intelligencia és döntési problémák . Amos Davis (2013). Letöltve: 2014. szeptember 30.
  14. Corso di Informatica Teorica . Università degli Studi di Palermo (2013). Letöltve: 2013. március 22. Az eredetiből archiválva : 2018. július 9..

Linkek