Pico Lisp
| Pico Lisp | |
|---|---|
| | |
| Corso di lingua | linguaggio di programmazione |
| Apparso in | 1988 |
| Autore | Alexander Burger |
| Sistema di tipo | dinamico |
| Licenza | Licenza MIT |
| Sito web | picolisp.com |
| piattaforma | POSIX |
PicoLisp è un dialetto libero minimalista del linguaggio di programmazione Lisp progettato per l'uso su Linux e altri sistemi POSIX .
Storia
L'autore di PicoLisp è lo sviluppatore tedesco Alexander Burger. Il predecessore di PicoLisp era "8kLisp", creato nel 1986-1987 dallo stesso autore per computer con sistema operativo CP/M ; le idee principali erano già state formulate allora.
La prima versione dell'interprete PicoLisp è stata creata per computer Macintosh alla fine degli anni '80. Il primo sviluppo commerciale di PicoLisp, un sistema di elaborazione delle immagini e layout di stampa che girava su Mac II, è stato fatto nel 1988 [1] .
Nel 2009 è apparsa una versione a 64 bit, scritta in "codice macchina generale", che viene tradotto in codice specifico della piattaforma di destinazione utilizzando PicoLisp.
Nel 2010 è stata rilasciata una versione Java di "Ersatz Picolisp" [2] .
Principi e caratteristiche
- Unico interprete.
- PicoLisp è stato costruito come un Lisp puramente interpretato . Secondo l'autore di [1] [3] , per una tecnica di programmazione che utilizza le caratteristiche specifiche del Lisp, come trasformazioni complesse di strutture di elenchi e generazione di codice dinamico, il guadagno di velocità dovuto alla compilazione è trascurabile e non vale le complicazioni che bisogna introdurre nella lingua per una compilazione efficiente. L'autore ritiene che non abbia senso complicare il linguaggio e l'ambiente per il bene di una differenza di velocità, che molto probabilmente l'utente non noterà nemmeno.
- Secondo l'autore [3] , i tipici programmi di elaborazione delle liste Lisp eseguiti con l'interprete PicoLisp mostrano all'incirca le stesse prestazioni di quelli compilati in CMUCL e superano significativamente quelli compilati in CLISP e Scheme 48 . Per il codice con molti calcoli, l'interprete PicoLisp è più lento dei programmi compilati. Pertanto, le sezioni time-critical per le quali l'interprete diventa davvero un fattore limitante si propone di essere implementate da codice esterno in un linguaggio compilato (solitamente in C o linguaggio assembly ), che, di regola, risulta essere più veloce di qualsiasi compilato Codice Lisp.
- Semplicità e chiarezza.
- Il linguaggio è incentrato sulla semplicità e il minimalismo. Il numero di costruzioni sintattiche, concetti di base e funzioni di sistema è ridotto al minimo sufficiente per un funzionamento efficiente. A livello di lingua, ci sono solo tre tipi di dati - numeri, stringhe ed elenchi, a livello di macchina virtuale - l'unico tipo di dati - Cons-cell [4] . Il rifiuto della compilazione ha consentito di semplificare notevolmente il linguaggio e, di conseguenza, di semplificare il nucleo dell'interprete, il che ha portato alla creazione di un ambiente di esecuzione molto efficiente in termini di memoria ed efficiente.
- Ortogonalità.
- A causa dell'alto grado di universalità delle costruzioni sintattiche di base (ottenuto in gran parte a causa del rifiuto della compilazione), sono esclusi dal linguaggio meccanismi aggiuntivi che li duplicano. Pertanto, una delle caratteristiche sorprendenti è il rifiuto della funzione
lambdatradizionale per i sistemi Lisp (inclusi Common Lisp ed Emacs Lisp ) - è diventata superflua a causa della modifica della funzionequote, che in PicoLisp restituisce tutti i suoi argomenti invariati, e non solo la prima cella [ 3] . Il meccanismo universale per la descrizione delle funzioni con supporto per il controllo del calcolo dei parametri ha permesso di abbandonare la sintassi speciale per macro e valori di funzione; possono essere tutti adeguatamente rappresentati dalla sintassi generale delle dichiarazioni di funzione. Grazie all'interpretazione, le funzioni sono libere da molte restrizioni e possono lavorare in modo efficiente con dati di tipo arbitrario ed elaborare un numero arbitrario di parametri. Il linguaggio non supporta nemmeno gli array , l'unico tipo di dati non atomico è un elenco. - Collegamento dinamico.
- A differenza della maggior parte dei dialetti moderni, PicoLisp si basa sull'associazione dati dinamica perché è molto più semplice ed efficiente da implementare nell'interprete.
- orientamento agli oggetti.
- PicoLisp ha un sistema orientato agli oggetti leggero ma potente scritto nel linguaggio stesso. Sia le classi che gli oggetti sono implementati come simboli Lisp. Sono supportate proprietà e metodi, sia oggetti che classi, ereditarietà multipla e singola. La natura dinamica del linguaggio consente di aggiungere proprietà e metodi a oggetti specifici secondo necessità.
- Praticità.
- Grazie a un gran numero di funzioni integrate di elaborazione delle liste, i programmi PicoLisp sono compatti, espressivi e abbastanza produttivi [5] .
- Mercoledì.
- PicoLisp non è solo un linguaggio di programmazione, ma anche una piattaforma software per lo sviluppo di applicazioni che include un database, un server di applicazioni Web e un framework Web (rappresentato come una libreria GUI XHTML). La piattaforma include anche un'implementazione integrata di Prolog , fornisce chiamate a funzioni C e Java dal codice Lisp.
- Localizzazione.
- La lingua supporta la codifica UTF-8, che consente di lavorare in modo trasparente con caratteri di qualsiasi alfabeto. Non esiste un tipo di stringa in PicoLisp, ma è possibile utilizzare caratteri temporanei (transitori), caratteri il cui nome è una sequenza di caratteri racchiusi tra virgolette. A differenza delle stringhe in altre lingue, tali caratteri hanno tutte le proprietà inerenti ai caratteri, inclusa la possibilità di avere un valore. Manipolando questi valori, puoi fornire una traduzione trasparente in qualsiasi lingua.
Esempi
Informazioni sulla codifica del codice in Base58 [6] :
( setq *B58Alpha
( chop "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" ) )
( de hex2L ( H )
( make
( for ( L ( chop H ) L ( cddr L ))
( link ( hex ( pack ( car L ) ( cadr L )))) ) ) )
( de b58enc ( Lst )
( let
( P 1
Z 0
A
( sum
' (( X )
( * X ( swap 'P ( >> -8 P ))) )
( reverse Lst ) ) )
( per L Lst
( T ( n0 L ))
( inc 'Z ) )
( pack
( necessita di Z "1" )
( make
( while ( gt0 A )
( giogo
( prog1
( get *B58Alpha ( inc ( % A 58 )))
( setq A ( / A 58 )) ) ) ) ) ) ) )
Il sito Web ufficiale della lingua fornisce una serie di esempi di applicazioni complete, tra cui un'applicazione Web con un database incorporato, un editor di testo per console completo (meno di 1000 righe di codice), un client IRC .
Note
- ↑ 1 2 http://software-lab.de/radical.pdf Archiviato il 28 luglio 2019 in Wayback Machine Pico Lisp. Un approccio radicale allo sviluppo di applicazioni. Alexander Burger, 2006.
- ^ Alexander Burger. Ersatz PicoLisp . picolisp.com . Estratto il 26 luglio 2017 . Archiviato dall'originale il 12 novembre 2017.
- ↑ 1 2 3 Domande frequenti su PicoLisp . software-lab.de. Estratto il 25 luglio il 2017 Archiviata dall'originale il 6 agosto 2017.
- ^ Hamburger Alessandro. "Strutture interne" . PicoLisp.com . Estratto il 26 luglio 2017 . Archiviato dall'originale il 25 dicembre 2016.
- ↑ Esempi su Rosetta Code : Categoria:PicoLisp - Rosetta Code (eng.) . rosettacode.org. Estratto il 25 luglio il 2017 Archiviata dall'originale il 6 agosto 2017.
- ^ mihailp/tankfeeder/source/base58.l - Bitbucket . bitbucket.org. Estratto: 26 luglio 2017. (link non disponibile)
Collegamenti
- Sito ufficiale
- Ultima versione Archiviata il 24 marzo 2017 su Wayback Machine (collegamento diretto all'archivio)
- Archivio mailing list Archiviato il 13 giugno 2017 in Wayback Machine
- Macropis, un framework di sviluppo web in Picolisp Archiviato il 3 marzo 2016 su Wayback Machine
- Librerie PicoLisp con licenza MIT Archiviate l'8 marzo 2017 su Wayback Machine (bcrypt, json, nanomsg, unit testing, https)