Åbenlisp

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 17. marts 2021; checks kræver 4 redigeringer .
åbenlisp

OpenLisp kører i et Emacs -miljø
Type Kompiler , tolk
Forfatter Christian Julien
Skrevet i C og OpenLisp
Operativ system Windows, Linux, MacOS, Solaris, HP-UX, AIX, OpenBSD, FreeBSD, NetBSD, PocketPC, QNX, VMS, Z/OS, Cygwin
Første udgave april 1988  ( 1988-04 )
Hardware platform x86, x86_64, ia64, sparc, sparcv9, PowerPC, mips, alpha, parisc, ARM, AArch64
nyeste version 10.3.0 (5. marts 2017 ) ( 05-03-2017 )
Licens Proprietær software
Internet side eligis.com

OpenLisp er et programmeringssprog i Lisp  -familien af ​​sprog udviklet af Christian Julien. [1] Den overholder [2] [3] [4] ISO ISLISP- standarden ( ISO/IEC 13816:1997(E) Arkiveret 10. april 2016 på Wayback Machine [5] revideret af ISO/IEC 13816:2007(E) ) Arkiveret 30. juli 2016 på Wayback Machine , udgivet af ISO ).

Kernen er skrevet i C og Lisp og kører på de fleste styresystemer. OpenLisp er en implementering af ISLISP- standarden, men indeholder også en række Common Lisp- kompatible udvidelser (hash-tabeller, læsetabeller, pakker, strukturer, sekvenser, rationaler) og en række biblioteker ( sockets , regulære udtryk , XML , Posix , SQL LDAP ) . [6]

OpenLisp inkluderer en fortolker til interaktiv udvikling ( REPL ), en compiler til et Lisp Assembly Program (LAP) og en kodegenerator, der konverterer LAP til C-kode.

Udviklingsmål

Målene med at skabe denne dialekt af Lisp var:

Dialektnavn

Oprindeligt havde sproget et internt navn MLisp. I 1993 blev dette navn ændret til OpenLisp, da det viste sig, at MLisp allerede var i brug i Gosling Emacs .

I begyndelsen af ​​1990'erne blev ordet "åben" ("åben") i applikationen til informationsteknologi oftere brugt til at henvise til systemer, der implementerer åbne specifikationer for grænseflader, tjenester og dataformater, som giver dig mulighed for at bruge disse systemer uden kunstige begrænsninger, skabe interoperable og/eller software, der interagerer med dem (dette er den betydning, som udtrykket bruges i definitionen af ​​" åbent computersystem "). Denne forestilling om "åbenhed" er i overensstemmelse med designmålene for OpenLisp (se ovenfor), ligesom det er det faktum, at den implementerer ISLISP-standarden. [7]

Sprogets navn er således tiltænkt at symbolisere dets åbenhed for brug, men har intet at gøre med Open Source Initiative eller fri software generelt. OpenLisp-miljøet har altid været og bliver fortsat udgivet under en proprietær licens . Nogle af kildeteksterne er lukkede.

OpenLisp-sproget må ikke forveksles med OpenLISP-projektet, der startede i 1997 for at implementere Locator/Identifier Separation Protocol .

Licens- og distributionsbetingelser

OpenLisp er proprietær software . Tolken er gratis tilgængelig til ikke-kommerciel brug.

En del af systemets kildekode er tilgængelig under gratis licenser (GNU GPL, BSD) eller er i det offentlige domæne . Separat licenseret og leveret mod et gebyr er den kildekode, der er nødvendig for at integrere OpenLisp i systemer skrevet i C/C++.

Brugergrænseflade

OpenLisp-fortolkeren køres oprindeligt i konsoltilstand (i CmdMicrosoft Windows eller fra en terminalemulatorUnix -lignende systemer).

;; OpenLisp v9.xy (Build: XXXX) af C. Jullien [Jan 01 20xx - 10:49:13] ;; Copyright (c) Eligis - 1988-20xx. ;; System 'sysname' (64bit, 8 CPU) på 'værtsnavn', ASCII. ;; Gud tak, OpenLisp er tilbage igen! ? ( fib 20 ) ;; forløbet tid = 0,003s, (0gc). = 6765 ? _

Det er også muligt at køre REPL under Emacs (du skal initialisere variablen med inferior-lisp-modestien til den binære fil i OpenLisp-fortolkeren). LispIDE by DaanSystems har indbygget understøttelse af OpenLisp-syntaksen.

Implementeringsdetaljer

Memory Manager

OpenLisp bruger en virtuel hukommelsesmekanisme til automatisk at allokere og ændre hukommelsen af ​​objekter. Små genstande af samme type placeres ved hjælp af BIBOP (BIg Bag Of Pages) teknologi. For at allokere store objekter bruges proxy- objekter , som peger på det rigtige objekt i Lisp- heapen . Den konservative skraldeopsamler bruger en mark and sweep- teknik og kan konfigureres til at understøtte multithreading .

Datatyper

OpenLisp bruger en tag-arkitektur (4-bit tag på 32-bit, 5-bit tag på 64-bit ord) til hurtig typekontrol (lille heltal, float, symbol, ulemper, streng, vektor). Korte heltal (28 bit på et 32-bit ord, 59 bit på et 64-bit ord) lagres upakkede, lange heltal (32 bit / 64 bit) lagres pakket. Som krævet af ISLISP er bignums også implementeret . Tegn (og dermed strenge) kan enten være 8-bit ( ANSI , EBCDIC ) eller 16/32-bit, hvis Unicode - understøttelse er aktiveret .

Tolk og oversætter

Kernen, tolken og kernebibliotekerne er håndskrevne i C. Compileren konverterer kildeteksten til et mellemsprog LAP, som derefter oversættes af kodegeneratoren til C , som igen kan kompileres af enhver C-oversætter af målplatformen.

Historie

Store milepæle i udviklingen af ​​OpenLisp. [otte]
År Version Store ændringer
1988 1.0 Projektet startede som et forskningssprog kaldet MLisp (Minimal Lisp) for at eksperimentere med ideer fra den kommende ISLISP- standard . I 1988 var hovedmotivet at implementere Lisp for at udvide EmACT , en klon af Emacs . ISLISP viste sig at være det bedst egnede valg.
1993 3.3 Første port til 64-bit arkitektur ( DEC Alpha OSF/1). Navneændring til OpenLisp.
1994 4.0 Første kommercielle brug.
1995 4.5 Implementeret støtte til stikkontakter.
1997 5.7 OpenLisp var den første implementering af ISLISP ISO/IEC 13816:1997(E) standarden. [9]
1998 5.8 Implementeret Unicode- understøttelse .
2000 6.6 Compiler i LAP. LAP'er fortolkes af den virtuelle maskine, der er en del af systemet. Ydelsen er blevet fordoblet.
2003 7.5 Implementeret "Lisp to C" back-end. Det blev tilgængeligt til at kompilere Lisp-programmer med flere filer til et eksekverbart modul. Hastigheden er steget 10-20 gange.
2007 8.7 Opdateret på grund af ny ISO/IEC 13816:2007(E) Arkiveret 30. juli 2016 på Wayback Machine .
2010 9.2 Implementering af heltalsaritmetik med ubegrænset præcision.
2017 10.3 Nuværende version (2017-03-05).

Portering

OpenLisp er meget bærbar og kan køre på mange operativsystemer: Microsoft Windows , de fleste Unix - baserede systemer , QNX , MS-DOS , OS/2 , Pocket PC , OpenVMS , z/OS . Mere end 50 forskellige versioner er tilgængelige til download på den officielle hjemmeside.

Standardbiblioteker

I/O og interaktion med anden software

OpenLisp kan kommunikere med moduler skrevet i C ved hjælp af FFI , ISLISP I/O-streams er udvidet til at understøtte netværkssockets. Biblioteket ./neti det installerede system indeholder eksempler på arbejde med Http , Json , Pop3 , Smtp , Telnet , Rss . En simpel XML- læser kan konvertere XML til Lisp-lister. Det underliggende SQL - modul kan bruges til at få adgang til MySQL , Odbc , SQLite , PostgreSQL . CSV - modulet giver dig mulighed for at læse og skrive filer i CSV-format.

Udviklerværktøjer

Udviklingsværktøjer omfatter logning, kodeformatering, en profiler , support til kontraktprogrammering og enhedstestning .

Algoritmer

./contribImplementeringer af nogle velkendte algoritmer er tilgængelige i kataloget ( simplex-algoritme , Dijkstras algoritme , Ford-Fulkerson-algoritme og andre). Modulerne leveres under BSD-licensen .

Kompilering

Dette afsnit beskriver, hvordan du transformerer Lisp-kode til C-kode i OpenLisp.

Kildekode

Som et eksempel bruges en rekursiv funktion, fibder udfører beregningen af ​​det n'te Fibonacci-tal (dette er den klassiske definition, der bruges i mange benchmarks, og er ikke den mest effektive til rigtige beregninger).

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

LAP

Compileren oversætter Lisp-kildekoden til mellemkode i LAP-listeformat, som er udsat for lokal optimering ( eng.  peephole optimization ). Efter optimering ser den resulterende LAP-kode sådan ud:

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

Endelig konverterer kodegeneratoren LAP-koden til C-instruktioner.

statisk POINTER OLDEFCOMPILED1 ( olfib_00 , p1 ) { PUNKT a1 ; PUNKER FLYGTIG 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 ( al ); a1 = ollapgsub ( pl , olmakefix ( 2 ) ); a1 = olfib_00 ( al ); a1 = ollapgadd ( a2 , a1 ); _l004 : ollapleave ( SN_OLFIB_00 ); returnere ( a1 ); }

Ovenstående kodestykke indeholder kun selve den genererede C-kode. For at få en eksekverbar fil skal denne kode være indlejret i det relevante miljø og kompileret med de biblioteker, der er en del af OpenLisp-miljøet.

Ydeevne

Ifølge dataene på siden af ​​forfatteren af ​​systemet Arkiveret 27. februar 2021 på Wayback Machine (dog forældet - de angivne materialer henviser til version 7.9, mens den nuværende version for 2018 er 10.3), sammenlignet med to andre implementeringer af ISLISP, er OpenLisp på samme niveau eller noget hurtigere i fortolkningstilstand og betydeligt (10-20 gange) hurtigere i kompileret applikationshastighed.

Ansøgning

  • Non-profit-organisationen SDF (også kendt som freeshell.org), som giver internetadgang til UNIX -skallen , [10] [11] bruger OpenLisp som et af de programmeringssprog, der er tilgængelige over nettet.
  • Bricsys bruger OpenLisp til at implementere sin AutoLISP -variant til Bricscad . [12]
  • MEVA [13] er udelukkende skrevet i OpenLisp.
  • Universitetet i Palermo bruger OpenLisp som undervisningssprog. [fjorten]

Noter

  1. Pierre Parquier. JTC1/SC22 N3170 . ISO/IEC (2000). Hentet: 11. marts 2012.  (utilgængeligt link)
  2. Keld Simonsen. Islisp-faq . ISO/IEC (13. marts 1999). Hentet 11. november 2016. Arkiveret fra originalen 1. november 2018.
  3. IZUMI NOBUTO (Tohoku Univ., Grad. Sch.) ITO TAKAYASU (Tohoku Univ., Grad. Sch.). Fortolker og kompilator af ISO-standarden Lisp ISLISP. (utilgængeligt link) . Transaktioner af informationsbehandlingssamfundet i Japan (1999). Hentet 17. juni 2013. Arkiveret fra originalen 26. august 2018. 
  4. Paul McJones. ISLISP . Software Preservation Group (2010). Hentet 18. marts 2012. Arkiveret fra originalen 26. august 2018.
  5. Pierre Parquier (JTC1 SC22 WG16 Convenor). ISO/IEC JTC1 SC22 WG16 N177 - DIS stemme . ISO/IEC (1996). Hentet 15. marts 2012. Arkiveret fra originalen 27. januar 2021.
  6. C. Jullien. OpenLisp v9.8.0 Referencemanual . Eligis (2011). Hentet 14. marts 2012. Arkiveret fra originalen 4. juni 2001.
  7. C. Jullien. Åbn Lisp FAQ . Eligis (2011). Hentet: 15. marts 2012.
  8. C. Jullien. OpenLispChangeLog . Eligis (2011). Hentet: 15. marts 2012.
  9. William Rinehuls. JTC1/SC22 N2969 . ISO/IEC (4. august 1999). Hentet 11. november 2016. Arkiveret fra originalen 26. januar 2021.
  10. Gene Michael Stover. 7.2 Sprog på SDF . SDF Public Access UNIX System, Inc. (2005). Hentet 14. marts 2012. Arkiveret fra originalen 10. maj 2017.
  11. Hostingfirmaer (downlink) . ALU (Association of Lisp Users). Dato for adgang: 18. marts 2012. Arkiveret fra originalen 9. februar 2011. 
  12. Bricscad News . Briccad (2009). Hentet 20. marts 2012. Arkiveret fra originalen 27. august 2018.
  13. Konkurrencedygtige efterretnings- og beslutningsproblemer . Amos Davis (2013). Hentet: 30. september 2014.
  14. Corso di Informatica Teorica . Università degli Studi di Palermo (2013). Hentet 22. marts 2013. Arkiveret fra originalen 9. juli 2018.

Links