NouLISP

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită la 29 septembrie 2016; verificările necesită 11 modificări .

nouLISP
Clasa de limba Limbajul de programare cu mai multe paradigme
Aparut in 1991
Autor Lutz Muller
Dezvoltator Lutz Muller
Eliberare
A fost influențat Common Lisp , Scheme
Licență Licență publică generală GNU
Site-ul web newlisp.org

NewLISP este un dialect al Lisp conceput ca un limbaj de scripting .

Caracteristici

Implementarea newLisp este ușoară, iar limba în sine este ușor de învățat [2] .

Distribuția newLISP include un mediu de programare simplu [3] care are o fereastră de emulator de terminal sub zona de editare a sursei unde puteți vedea rezultatele executării unui program Lisp (vezi REPL ) [4] .

Limbajul suportă programarea pseudo-orientată pe obiecte sub formă de FOOP (Functional Object Programming) [5] .

Limbajul vine la pachet cu instrumente de programare GUI [6] .

NewLISP are încorporate instrumente de programare web ( Httpd și CGI [7] [7] ), precum și lucrul cu protocoale de rețea precum TCP/IP [7] sau UDP [7] [8] .

Comparativ cu alte dialecte

NewLISP are o serie de caracteristici care îl deosebesc de Common Lisp [9] și alte dialecte Lisp, atât în ​​sintaxă , cât și în semantică [10] . De exemplu, funcțiile tradiționale de listă numesc carși au cdrfost înlocuite cu firstși rest, ca în T-Lisp. consDetaliile comportamentului funcțiilor și sunt oarecum diferite last. Listele sunt indexate, puteți obține elementul i al listei myList, numărând de la zero, folosind expresia (myList i).[11]

newLISP este similar cu Scheme în mai multe moduri . La fel ca Scheme, newLisp adoptă o evaluare viguroasă a parametrilor funcției trecuți. Pentru variabile , primitive și simboluri definite de utilizator, aici este folosit și un singur spațiu de nume [11] .

O diferență semnificativă cu newLisp este că folosește în mod implicit domeniul de aplicare a variabilei dinamice. Dacă este nevoie de un domeniu de aplicare lexical (static), acest lucru se realizează prin mecanismul așa-numitului. contexte [11] .

Istorie

Informaticianul german Lutz Müller a dezvoltat NewLisp ca un dialect al lui Lisp ușor de învățat [12] . Spre deosebire de versiunile tradiționale ale Lisp, newLISP a fost conceput ca un limbaj de scripting . Autorul face referire [10] la articolul „In Praise of Scripting: Real Programming Pragmatism” [13] , care a fost scris în cadrul discuției declanșate de articolul „Scripting: High-Level Programming for the 21st Century” al dezvoltatorului Tcl John Osterout [14] .

Limbajul a fost implementat pentru prima dată pe stația de lucru Sun4 în 1991. [15] În 1993 a fost portat pe Windows 3.0 pe 16 biți și în 1995 pe Windows 95 pe 32 biți . În aprilie 1999, NewLISP a fost portat pe Linux și lansat sub o licență gratuită . Tot codul specific Windows a fost eliminat și, începând cu versiunea 6.0.25, suportul pentru acest sistem de operare a fost renunțat. În 2001, munca sub Windows devine posibilă datorită Cygwin , la început versiunea win a funcționat doar în consolă, dar în versiunea 6.3, folosind Tcl / Tk , a fost implementată o interfață grafică cu utilizatorul multiplatform newLISP-tk . În 2007, a fost dezvoltată biblioteca GUI newLISP-GS bazată pe Java și este în prezent principala implementare GUI pentru newLISP. Mai jos este o cronologie a schimbărilor cheie din 1990 până în 2014 [16] .

Versiune An Schimbari majore
1.0 1990 Prima versiune, a rulat pe un Sun-4 care rulează SunOS / BSD 4.1
1.3 1993 Portare la Windows 3.0
3.0 1995 Portare pe Windows 95
6.0 1999 Versiune open source ( GPL ) pentru Unix / Linux
6.3 1999 nouLISP-tk Tcl / Tk IDE
6.5.8 2002 Expresii regulate PCRE
7.1-4 2003 Suport pentru MacOS X și Solaris , Manual PDFcatch și throw, Variabile de context, Win32 DLL
8,0-3 2004 Matrice , suport UTF-8 , furcă de proces , semafoare , memorie partajată , funcție implicită
8,4-7 2005 Indexare implicită a matricei, suport pentru localizări separate prin virgulă , semnale și temporizatoare , calcul distribuit prinnet-eval
8,8-9 2006 Unificare în stil Prolog , extindere variabilă în stil macro, suport îmbunătățit pentru indexarea implicită
9,0 2006 Suport pentru aritmetică pe 64 de biți și acces la fișiere, funcții suplimentare pentru lucrul cu matrice, mod server HTTP
9.1 2007 Compilare pentru platforme pe 64 de biți, mod server HTTP / CGI , functori în ref, ref-all, find,replace
9.2 2007 newLISP-GS este o bibliotecă GUI de bază pentru platforma pentru dezvoltarea interfețelor utilizator pe newLISP
9.3 2008 FOOP - Programare orientată pe funcție-obiect
9.4 2008 Cilk  - API de programare paralelă pentru newLISP
10.0 2009 Curățarea generală a API-ului, trecerea prin referință, utilizarea noului API distructiv unificatsetf
10.1 2009 API pentru comunicarea între actori pe Mac OS X, Linux și alte UNIX
10.2 2010 FOOP reproiectat pentru a utiliza obiecte mutabile
10.3 2011 Abilitatea de a comuta protocolul de internet între IPv4 și IPv6
10.4 2012 de import extins folosind libffi
10.5 2013 Aritmetică a numărului întreg de precizie infinită
10.5.2 2013 Analiza cluster KMEANS
10.5.7 2014 Compilarea într-un executabil JavaScript relativ rapid din partea browserului
10.6.0 2014 Extindere macro nativă

Aplicație

Pentru programarea web folosind newLisp, se poate folosi cadrul web newLISP pe Rockets [17] [18] , folosind Bootstrap și jQuery din partea browserului și stocarea datelor în SQLite [8] . Autorul a fost inspirat să creeze acest cadru [19] de un cadru anterior - Dragonfly [20] [21] .

Pe baza NewLisp, se implementează FuzzyLisp [22] , o bibliotecă pentru lucrul cu logica fuzzy [23] .

Note

  1. http://www.newlisp.org/downloads/newLISP-10.7.5-Release.html
  2. Smedley, 2014 .
  3. În sistemele de operare Linux , familiile sunt lansate prin comandănewlisp-edit
  4. Mendez, 2015 , 1.5 A Quick Start Using NewLisp, pp. 8-13.
  5. Smedley, 2015 , p. 25.
  6. Mendez, 2015 , 4.2.4 Construirea unei interfețe simple de utilizator, pp. 102-104.
  7. ↑ 1 2 3 4 Lutz Mueller. modele de cod nouLISP. §13. Comunicații UDP . www.newlisp.org. Preluat la 30 mai 2016. Arhivat din original la 29 iulie 2016.
  8. 1 2 Smedley, 2015 , p. 24.
  9. Mendez, 2015 , Anexa A. NewLisp Versus Common Lisp, pp. 347-352.
  10. ↑ 1 2 newLISP - Diferențele față de alte LISP-uri . www.newlisp.org. Preluat la 30 mai 2016. Arhivat din original la 6 aprilie 2022.
  11. 1 2 3 Lazăr, 2009 , nouLISP: limbajul .
  12. Mendez, 2015 , 1.4 The NewLisp Implementation, p. 7.
  13. Ronald P. Loui. În laude pentru scripting: pragmatism real de programare  // Computer. - 2008. - iunie ( vol. 41 , nr. 7 ). - S. 22-26 . - doi : 10.1109/MC.2008.228 . Arhivat din original pe 23 septembrie 2015.
  14. Osterout, 1998 .
  15. Smedley, 2015 , p. 22.
  16. Lutz Mueller. Proiecte de limbaj de programare. NewLISP. nou Istoria LISP . www.donlucio.net. Consultat la 30 mai 2016. Arhivat din original la 12 aprilie 2016.
  17. Blogul newLISP pe Rockets . newlisponrockets.com. Consultat la 29 mai 2016. Arhivat din original la 10 aprilie 2016.
  18. proiect nouLISP-on-Rockets pe GitHub
  19. Rocket Man. Conversia altui cod nouLISP în Rockets. Postare #: 85 . newlisponrockets.com (21 februarie 2013). Preluat la 30 mai 2016. Arhivat din original la 21 martie 2016.
  20. Marc Hildmann, Greg Slepak. Bun venit - cadru web Dragonfly . dragonfly.apptruck.de. Preluat la 30 mai 2016. Arhivat din original la 3 martie 2016.
  21. Proiect Dragonfly pe GitHub
  22. Luis Arguelles. FuzzyLisp . www.fuzzylisp.com. Preluat la 29 mai 2016. Arhivat din original la 6 august 2016.
  23. Mendez, 2015 .

Literatură

Link -uri