Pico Lisp
PicoLisp je minimalistický volný dialekt programovacího jazyka Lisp navržený pro použití na Linuxu a dalších systémech POSIX .
Historie
Autorem PicoLisp je německý vývojář Alexander Burger. Předchůdcem PicoLispu byl "8kLisp", vytvořený v letech 1986-1987 stejným autorem pro počítače s operačním systémem CP/M ; hlavní myšlenky byly stanoveny již tehdy.
První verze interpretu PicoLisp byla vytvořena pro počítače Macintosh na konci 80. let. První komerční vývoj v PicoLisp, systému zpracování obrazu a tisku, který běžel na Macu II, byl proveden v roce 1988 [1] .
V roce 2009 se objevila 64bitová verze napsaná v „obecném strojovém kódu“, který je přeložen do kódu specifického pro cílovou platformu pomocí PicoLisp.
V roce 2010 byla vydána Java verze "Ersatz Picolisp" [2] .
Principy a vlastnosti
Pouze tlumočník.
PicoLisp byl postaven jako čistě
interpretovaný Lisp . Podle autora
[1] [3] je u programovací techniky, která využívá specifické vlastnosti Lisp, jako jsou složité transformace struktur seznamů a dynamické generování kódu, nárůst rychlosti v důsledku kompilace zanedbatelný a nestojí za komplikace, které pro efektivní kompilaci je třeba do jazyka zavést. Autor se domnívá, že nemá smysl komplikovat jazyk a prostředí kvůli rozdílu v rychlosti, kterého si uživatel s největší pravděpodobností ani nevšimne.
Podle autora
[3] typické programy pro zpracování seznamů Lisp běžící pod interpretem PicoLisp vykazují přibližně stejný výkon jako programy kompilované v
CMUCL a výrazně převyšují ty kompilované v
CLISP a schématu 48 . Pro kód s velkým množstvím výpočtů je interpret PicoLisp pomalejší než kompilované programy. Časově kritické úseky, pro které se interpret skutečně stává omezujícím faktorem, se proto navrhuje implementovat externím kódem v kompilovaném jazyce (obvykle v jazyce
C nebo
assembleru ), který se zpravidla ukazuje jako rychlejší než jakýkoli kompilovaný Lisp kód.
Jednoduchost a přehlednost.
Jazyk je zaměřen na jednoduchost a minimalismus. Počet syntaktických konstrukcí, základních pojmů a systémových funkcí je redukován na minimum dostatečné pro efektivní provoz. Na jazykové úrovni existují pouze tři datové typy - čísla, řetězce a seznamy, na úrovni virtuálního stroje - jediný datový typ - Cons-cell
[4] . Odmítnutí kompilace umožnilo výrazně zjednodušit jazyk a díky tomu zjednodušit jádro interpretu, což vedlo k vytvoření paměťově velmi efektivního a efektivního prováděcího prostředí.
Ortogonalita.
Vzhledem k vysoké míře univerzálnosti základních syntaktických konstrukcí (dosažené z velké části díky odmítnutí kompilace) jsou z jazyka vyloučeny další mechanismy, které je duplikují. Jedním z nápadných rysů je tedy odmítnutí funkce lambdatradiční pro systémy Lisp (včetně
Common Lisp a
Emacs Lisp ) - stala se zbytečnou kvůli změně funkce quote, která v PicoLisp vrací všechny své argumenty nezměněné, a nejen první buňka
[3] . Univerzální mechanismus pro popis funkcí s podporou řízení výpočtu parametrů umožnil opustit speciální syntaxi maker a funkčních hodnot; všechny mohou být adekvátně reprezentovány obecnou syntaxí deklarací funkcí. Díky interpretaci jsou funkce oproštěny od mnoha omezení a mohou efektivně pracovat s daty libovolného typu a zpracovávat libovolný počet parametrů. Jazyk nepodporuje ani
pole , jediný neatomický datový typ je seznam.
Dynamické propojení.
Na rozdíl od většiny moderních dialektů se PicoLisp spoléhá na
dynamické datové vázání , protože je mnohem jednodušší a efektivnější implementovat do tlumočníka.
orientaci objektu.
PicoLisp má lehký, ale výkonný objektově orientovaný systém napsaný v samotném jazyce. Třídy i objekty jsou implementovány jako symboly Lisp. Jsou podporovány vlastnosti a metody, objekty i třídy, vícenásobná a jednoduchá dědičnost. Dynamická povaha jazyka umožňuje přidávat vlastnosti a metody ke konkrétním objektům podle potřeby.
Praktičnost.
Díky velkému množství vestavěných funkcí pro zpracování seznamu jsou programy PicoLisp kompaktní, expresivní a poměrně produktivní
[5] .
Středa.
PicoLisp není jen programovací jazyk, ale také softwarová platforma pro vývoj aplikací, která zahrnuje databázi, webový aplikační server a webový framework (reprezentovaný jako knihovna GUI XHTML). Platforma také obsahuje vestavěnou implementaci
Prolog , poskytuje volání funkcí C a Java z kódu Lisp.
Lokalizace.
Jazyk podporuje kódování UTF-8, což umožňuje transparentně pracovat se znaky libovolných abeced. PicoLisp nemá žádný řetězcový typ, místo toho lze použít dočasné (přechodné) znaky - znaky, jejichž název je posloupností znaků uzavřených v uvozovkách. Na rozdíl od řetězců v jiných jazycích mají tyto znaky všechny vlastnosti, které jsou znakům vlastní, včetně možnosti mít hodnotu. Manipulací s těmito hodnotami můžete poskytnout transparentní překlad do jakéhokoli jazyka.
Příklady
Informace o kódování kódu v Base58 [6] :
( setq *
B58Alpha ( kotleta " 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz " ) )
( de hex2L ( H )
( make
( for ( L ( chop H ) L ( cddr L )
) ( link ) Lcadr hex ( pack _ _ _ ) ) ) ( de b58enc ( Lst ) ( nechť ( P 1 Z 0 A ( součet ' ( ( X ) ( * X ( swap ' P ( >> -8 P ))) ) ( zpětný Lst ) ) ) ( pro L Lst ( T ( n0 L )) ( inc 'Z ) ) ( pack ( potřeba Z "1" ) ( make ( while ( gt0 A ) ( jho ( prog1 ( get *B58Alpha ( inc ( % A 58 ))) ( setq A ( / A 58 )) ) ) ) ) ) ) )
Oficiální webové stránky jazyka poskytují řadu příkladů kompletních aplikací, včetně webové aplikace s vestavěnou databází, plnohodnotného textového editoru konzoly (méně než 1 tisíc řádků kódu), IRC klienta .
Poznámky
- ↑ 1 2 http://software-lab.de/radical.pdf Archivováno 28. července 2019 ve Wayback Machine Pico Lisp. Radikální přístup k vývoji aplikací. Alexander Burger, 2006.
- ↑ Alexander Burger. Ersatz PicoLisp . picolisp.com . Získáno 26. července 2017. Archivováno z originálu 12. listopadu 2017. (neurčitý)
- ↑ 1 2 3 PicoLisp FAQ . software-lab.de. Získáno 25. července 2017. Archivováno z originálu 6. srpna 2017.
- ↑ Burger Alexander. "Vnitřní struktury" . PicoLisp.com . Získáno 26. července 2017. Archivováno z originálu 25. prosince 2016. (neurčitý)
- ↑ Příklady na Rosetta Code : Kategorie:PicoLisp - Rosetta Code (eng.) . Rosettacode.org. Získáno 25. července 2017. Archivováno z originálu 6. srpna 2017.
- ↑ mihailp/tankfeeder/source/base58.l - Bitbucket . bitbucket.org. Staženo: 26. července 2017. (nedostupný odkaz)
Odkazy