Pico Lisp
PicoLisp er en minimalistisk fri dialekt af programmeringssproget Lisp designet til brug på Linux og andre POSIX- systemer .
Historie
Forfatteren af PicoLisp er den tyske udvikler Alexander Burger. PicoLisps forgænger var "8kLisp", skabt i 1986-1987 af samme forfatter til computere, der kører CP/M -operativsystemet ; de vigtigste ideer var fastlagt allerede dengang.
Den første version af PicoLisp-fortolkeren blev skabt til Macintosh-computere i slutningen af 1980'erne. Den første kommercielle udvikling i PicoLisp, et billedbehandlings- og printlayoutsystem, der kørte på Mac II, blev udført i 1988 [1] .
I 2009 dukkede en 64-bit version op, skrevet i "generel maskinkode", som er oversat til målplatformsspecifik kode ved hjælp af PicoLisp.
I 2010 blev en Java-version af "Ersatz Picolisp" [2] udgivet .
Principper og funktioner
Kun tolk.
PicoLisp blev bygget som en rent
fortolket Lisp . Ifølge forfatteren til
[1] [3] , for en programmeringsteknik, der bruger de specifikke funktioner i Lisp, såsom komplekse transformationer af listestrukturer og dynamisk kodegenerering, er hastighedsforøgelsen på grund af kompilering ubetydelig og ikke værd at de komplikationer, som man er nødt til at indføre i sproget for effektiv kompilering. Forfatteren mener, at det ikke nytter noget at komplicere sproget og miljøet af hensyn til en hastighedsforskel, som brugeren højst sandsynligt ikke engang vil bemærke.
Ifølge forfatteren
[3] viser typiske Lisp-listebehandlingsprogrammer, der kører under PicoLisp-fortolkeren, omtrent den samme ydeevne som dem, der er kompileret i
CMUCL og overgår væsentligt dem, der er kompileret i
CLISP og Scheme 48 . For kode med mange beregninger er PicoLisp-fortolkeren langsommere end kompilerede programmer. Derfor foreslås tidskritiske afsnit, for hvilke tolken virkelig bliver en begrænsende faktor, implementeret med ekstern kode i et kompileret sprog (normalt i
C eller
assemblersprog ), hvilket som regel viser sig at være hurtigere end noget kompileret sprog. Lisp kode.
Enkelhed og klarhed.
Sproget er fokuseret på enkelhed og minimalisme. Antallet af syntaktiske konstruktioner, grundlæggende koncepter og systemfunktioner er reduceret til et minimum, der er tilstrækkeligt til effektiv drift. På sprogniveau er der kun tre datatyper - tal, strenge og lister, på virtuel maskine niveau - den eneste datatype - Cons-cell
[4] . Afvisning af kompilering gjorde det muligt at forenkle sproget betydeligt og på grund af dette at forenkle kernen af tolken, hvilket førte til skabelsen af et meget hukommelseseffektivt og effektivt eksekveringsmiljø.
Ortogonalitet.
På grund af den høje grad af universalitet af de grundlæggende syntaktiske konstruktioner (opnået hovedsagelig på grund af afvisningen af kompilering), er yderligere mekanismer, der duplikerer dem, udelukket fra sproget. Et af de slående træk er således afvisningen af den funktion, der er lambdatraditionel for Lisp-systemer (herunder
Common Lisp og
Emacs Lisp ) - den er blevet unødvendig på grund af ændringen i funktionen quote, som i PicoLisp returnerer alle sine argumenter uændret, og ikke kun den første celle
[3] . Den universelle mekanisme til beskrivelse af funktioner med støtte til styring af beregningen af parametre gjorde det muligt at opgive den specielle syntaks for makroer og funktionsværdier; de kan alle være tilstrækkeligt repræsenteret af den generelle syntaks af funktionserklæringer. Takket være fortolkningen er funktionerne fri for mange restriktioner og kan effektivt arbejde med data af vilkårlige typer og behandle et vilkårligt antal parametre. Sproget understøtter ikke engang
arrays , den eneste ikke-atomare datatype er en liste.
Dynamisk sammenkobling.
I modsætning til de fleste moderne dialekter er PicoLisp afhængig af
dynamisk databinding, fordi det er meget nemmere og mere effektivt at implementere i tolken.
objektorientering.
PicoLisp har et let og alligevel kraftfuldt objektorienteret system skrevet på selve sproget. Både klasser og objekter er implementeret som Lisp-symboler. Egenskaber og metoder understøttes, både objekter og klasser, multipel og enkelt arv. Sprogets dynamiske karakter giver dig mulighed for at tilføje egenskaber og metoder til specifikke objekter efter behov.
Praktisk.
Takket være et stort antal indbyggede listebehandlingsfunktioner er PicoLisp-programmer kompakte, udtryksfulde og ret produktive
[5] .
Onsdag.
PicoLisp er ikke kun et programmeringssprog, men også en applikationsudviklingssoftwareplatform, der inkluderer en database, en webapplikationsserver og en webramme (repræsenteret som et XHTML GUI-bibliotek). Platformen indeholder også en indbygget implementering af
Prolog , den giver C- og Java-funktionskald fra Lisp-kode.
Lokalisering.
Sproget understøtter UTF-8-kodning, hvilket gør det muligt at arbejde transparent med tegn i ethvert alfabet. Der er ingen strengtype i PicoLisp; i stedet kan der bruges midlertidige (forbigående) tegn - tegn, hvis navn er en sekvens af tegn omgivet af anførselstegn. I modsætning til strenge på andre sprog har sådanne tegn alle de egenskaber, der ligger i tegn, inklusive muligheden for at have en værdi. Ved at manipulere disse værdier kan du give en gennemsigtig oversættelse til ethvert sprog.
Eksempler
Kodekodningsinformation i Base58 [6] :
( setq *
B58Alpha ( chop " 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz " ) )
( de hex2L ( H )
( make
( for ( L ( chop H ) L ( cddr L )
) ( pakke ) ( link ( hex ) _ _ ) ) ) ( de b58enc ( Lst ) ( lad ( P 1 Z 0 A ( sum ' ( ( X ) ( * X ( swap ' P ( >> -8 P ))) ) ( omvendt Lst ) ) ) ( for L Lst ( T ( n0 L )) ( inc 'Z ) ) ( pack ( skal bruge Z "1" ) ( make ( mens ( gt0 A ) ( yoke ( prog1 ( get *B58Alpha ( inc ( % A 58 )))) ( setq A ( / A 58 ) ) ) ) ) ) ) )
Den officielle hjemmeside for sproget giver en række eksempler på komplette applikationer, herunder en webapplikation med en indlejret database, en fuldfunktions konsolteksteditor ( mindre end 1 tusind linjer kode), en IRC-klient .
Noter
- ↑ 1 2 http://software-lab.de/radical.pdf Arkiveret 28. juli 2019 på Wayback Machine Pico Lisp. En radikal tilgang til applikationsudvikling. Alexander Burger, 2006.
- ↑ Alexander Burger. Ersatz PicoLisp . picolisp.com . Hentet 26. juli 2017. Arkiveret fra originalen 12. november 2017. (ubestemt)
- ↑ 1 2 3 PicoLisp FAQ . software-lab.de. Hentet 25. juli 2017. Arkiveret fra originalen 6. august 2017.
- ↑ Burger Alexander. "Interne strukturer" . PicoLisp.com . Hentet 26. juli 2017. Arkiveret fra originalen 25. december 2016. (ubestemt)
- ↑ Eksempler på Rosetta Code : Kategori:PicoLisp - Rosetta Code (eng.) . rosettacode.org. Hentet 25. juli 2017. Arkiveret fra originalen 6. august 2017.
- ↑ mihailp/tankfeeder/source/base58.l - Bitbucket . bitbucket.org. Hentet: 26. juli 2017. (ikke tilgængeligt link)
Links