Pico Lisp

Pico Lisp
Jazyková třída programovací jazyk
Objevil se v 1988
Autor Alexander Burger
Typový systém dynamický
Licence licence MIT
webová stránka picolisp.com
Plošina POSIX

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. 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.
  2. Alexander Burger. Ersatz PicoLisp . picolisp.com . Získáno 26. července 2017. Archivováno z originálu 12. listopadu 2017.
  3. 1 2 3 PicoLisp  FAQ . software-lab.de. Získáno 25. července 2017. Archivováno z originálu 6. srpna 2017.
  4. Burger Alexander. "Vnitřní struktury" . PicoLisp.com . Získáno 26. července 2017. Archivováno z originálu 25. prosince 2016.
  5. 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.
  6. mihailp/tankfeeder/source/base58.l -  Bitbucket . bitbucket.org. Staženo: 26. července 2017.  (nedostupný odkaz)

Odkazy