Pico Lisp

Pico Lisp
Clasa de limba limbaj de programare
Aparut in 1988
Autor Alexander Burger
Tip sistem dinamic
Licență Licență MIT
Site-ul web picolisp.com
Platformă POSIX

PicoLisp este un dialect  minimalist liber al limbajului de programare Lisp conceput pentru utilizare pe Linux și alte sisteme POSIX .

Istorie

Autorul PicoLisp este dezvoltatorul german Alexander Burger. Predecesorul PicoLisp a fost „8kLisp”, creat în 1986-1987 de același autor pentru calculatoare care rulează sistemul de operare CP/M ; ideile principale au fost stabilite deja atunci.

Prima versiune a interpretorului PicoLisp a fost creată pentru computerele Macintosh la sfârșitul anilor 1980. Prima dezvoltare comercială în PicoLisp, un sistem de procesare a imaginii și aspect de imprimare care rula pe Mac II, a fost realizată în 1988 [1] .

În 2009, a apărut o versiune pe 64 de biți, scrisă în „cod mașină general”, care este tradus în cod specific platformei țintă folosind PicoLisp.

În 2010 a fost lansată o versiune Java a „Ersatz Picolisp” [2] .

Principii și caracteristici

Doar interpret. PicoLisp a fost construit ca un Lisp pur interpretat . Potrivit autorului [1] [3] , pentru o tehnică de programare care utilizează caracteristicile specifice ale Lisp, cum ar fi transformările complexe ale structurilor de liste și generarea dinamică a codului, câștigul de viteză datorat compilației este neglijabil și nu merită complicațiile pe care le au. trebuie introdus în limbaj pentru o compilare eficientă. Autorul consideră că nu are rost să complicăm limbajul și mediul de dragul unei diferențe de viteză, pe care cel mai probabil utilizatorul nici nu o va observa. Potrivit autorului [3] , programele tipice de procesare a listelor Lisp care rulează sub interpretul PicoLisp arată aproximativ aceleași performanțe ca cele compilate în CMUCL și le depășesc semnificativ pe cele compilate în CLISP și Scheme 48 . Pentru codul cu multe calcule, interpretul PicoLisp este mai lent decât programele compilate. Prin urmare, secțiunile critice în timp pentru care interpretul devine într-adevăr un factor limitator sunt propuse a fi implementate prin cod extern într-un limbaj compilat (de obicei în limbaj C sau de asamblare ), care, de regulă, se dovedește a fi mai rapid decât orice compilat. Cod Lisp. Simplitate și claritate. Limbajul este axat pe simplitate și minimalism. Numărul de construcții sintactice, concepte de bază și funcții de sistem este redus la un minim suficient pentru o funcționare eficientă. La nivel de limbă, există doar trei tipuri de date - numere, șiruri și liste, la nivel de mașină virtuală - singurul tip de date - Cons-cell [4] . Refuzul compilării a permis simplificarea semnificativă a limbajului și, din acest motiv, simplificarea nucleului interpretului, ceea ce a condus la crearea unui mediu de execuție foarte eficient din punct de vedere al memoriei și eficient. Ortogonalitatea. Datorită gradului ridicat de universalitate al construcțiilor sintactice de bază (realizat în mare parte datorită respingerii compilației), mecanismele suplimentare care le dublează sunt excluse din limbaj. Astfel, una dintre caracteristicile izbitoare este respingerea funcției lambdatradiționale pentru sistemele Lisp (inclusiv Common Lisp și Emacs Lisp ) - a devenit inutilă din cauza modificării funcției quote, care în PicoLisp returnează toate argumentele sale neschimbate, și nu doar prima celulă [ 3] . Mecanismul universal de descriere a funcțiilor cu suport pentru controlul calculului parametrilor a făcut posibilă abandonarea sintaxei speciale pentru macrocomenzi și valorile funcției; toate pot fi reprezentate adecvat prin sintaxa generală a declaraţiilor de funcţii. Datorită interpretării, funcțiile sunt libere de multe restricții și pot lucra eficient cu date de tipuri arbitrare și pot procesa un număr arbitrar de parametri. Limbajul nici măcar nu acceptă matrice , singurul tip de date non-atomice este o listă. Legătura dinamică. Spre deosebire de majoritatea dialectelor moderne, PicoLisp se bazează pe legarea dinamică a datelor, deoarece este mult mai ușor și mai eficient de implementat în interpret. orientarea obiectelor. PicoLisp are un sistem ușor, dar puternic, orientat pe obiecte, scris în limbajul propriu-zis. Atât clasele, cât și obiectele sunt implementate ca simboluri Lisp. Sunt acceptate proprietăți și metode, atât obiecte, cât și clase, moștenire multiplă și unică. Natura dinamică a limbajului vă permite să adăugați proprietăți și metode unor obiecte specifice, după cum este necesar. Practicitate. Datorită unui număr mare de funcții de procesare a listelor încorporate, programele PicoLisp sunt compacte, expresive și destul de productive [5] . Miercuri. PicoLisp nu este doar un limbaj de programare, ci și o platformă software de dezvoltare de aplicații care include o bază de date, un server de aplicații web și un cadru web (reprezentat ca o bibliotecă GUI XHTML). Platforma include, de asemenea, o implementare încorporată a Prolog , oferă apeluri de funcții C și Java din codul Lisp. Localizare. Limbajul acceptă codificarea UTF-8, ceea ce face posibilă lucrul transparent cu caractere din orice alfabet. Nu există un tip de șir în PicoLisp; în schimb, pot fi folosite caractere temporare (tranzitorii) - caractere al căror nume este o secvență de caractere cuprinse între ghilimele. Spre deosebire de șirurile din alte limbi, astfel de caractere au toate proprietățile inerente caracterelor, inclusiv posibilitatea de a avea o valoare. Prin manipularea acestor valori, puteți oferi o traducere transparentă în orice limbă.

Exemple

Informații de codificare a codului în Base58 [6] :

( setq *B58Alpha ( chop "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" ) ) ( de hex2L ( H ) ( make ( for ( L ( chop H ) L ( cddr L ))) ( cad ( L )) ( cad ( L )) ( cad ( L ) ) ( cad ( L )) ) ) ) ( de b58enc ( Lst ) ( fie ( P 1 Z 0 A ( suma ' (( X ) ( * X ( schimb ' P ( >> -8 P ))) ) ( invers Lst ) ) ) ( pentru L Lst ( T ( n0 L )) ( inc 'Z ) ) ( ambalaj ( nevoie de Z " 1 " ) ( face ( în timp ce ( gt0 A ) ) ( jug ( prog1 ( obține *B58Alpha ( inc ( % A 58 ))) ( setq A ( / A 58 ) ) ) ) ) ) ) )

Site-ul web oficial al limbii oferă o serie de exemple de aplicații complete, inclusiv o aplicație web cu o bază de date încorporată, un editor de text pentru consolă cu funcții complete (mai puțin de 1 mie de linii de cod), un client IRC .

Note

  1. 1 2 http://software-lab.de/radical.pdf Arhivat 28 iulie 2019 la Wayback Machine Pico Lisp. O abordare radicală a dezvoltării aplicațiilor. Alexander Burger, 2006.
  2. Alexander Burger. Ersatz PicoLisp . picolisp.com . Consultat la 26 iulie 2017. Arhivat din original la 12 noiembrie 2017.
  3. 1 2 3 Întrebări frecvente PicoLisp  . software-lab.de. Preluat la 25 iulie 2017. Arhivat din original la 6 august 2017.
  4. Burger Alexander. „Structuri interne” . PicoLisp.com . Preluat la 26 iulie 2017. Arhivat din original la 25 decembrie 2016.
  5. Exemple despre Rosetta Code : Categorie:PicoLisp - Rosetta Code  (eng.) . rosettacode.org. Preluat la 25 iulie 2017. Arhivat din original la 6 august 2017.
  6. mihailp/tankfeeder/source/base58.l -  Bitbucket . bitbucket.org. Preluat: 26 iulie 2017.  (link indisponibil)

Link -uri