Pico Lisp
A PicoLisp a Lisp programozási nyelv minimalista nyelvjárása, amelyet Linuxon és más POSIX rendszereken való használatra terveztek .
Történelem
A PicoLisp szerzője Alexander Burger német fejlesztő. A PicoLisp elődje a "8kLisp" volt, amelyet 1986-1987-ben hozott létre ugyanaz a szerző CP/M operációs rendszert futtató számítógépekhez ; a fő gondolatokat már akkor lefektették.
A PicoLisp interpreter első verzióját az 1980-as évek végén hozták létre Macintosh számítógépekre . Az első kereskedelmi fejlesztés a PicoLispben, egy képfeldolgozó és nyomtatási elrendezési rendszerben, amely Mac II-en futott, 1988-ban valósult meg [1] .
2009-ben megjelent egy 64 bites verzió, "általános gépi kóddal" írva, amelyet PicoLisp segítségével célplatform-specifikus kódra fordítanak.
2010-ben megjelent az Ersatz Picolisp [2] Java verziója .
Alapelvek és jellemzők
Csak tolmács.
A PicoLisp tisztán értelmezett Lisp -ként épült fel . Az
[1] [3] szerzője szerint egy olyan programozási technikánál, amely a Lisp sajátos tulajdonságait használja, mint például a listastruktúrák összetett transzformációi és a dinamikus kódgenerálás, a fordításból adódó sebességnövekedés elhanyagolható, és nem éri meg azokat a bonyodalmakat, be kell vezetni a nyelvbe a hatékony fordítás érdekében. A szerző úgy véli, hogy nincs értelme a nyelvet és a környezetet bonyolítani a sebességkülönbség kedvéért, amit a felhasználó nagy valószínűséggel észre sem vesz.
A szerző szerint
[3] a PicoLisp interpreter alatt futó tipikus Lisp listafeldolgozó programok megközelítőleg ugyanolyan teljesítményt mutatnak, mint a
CMUCL -ben fordítottak, és jelentősen felülmúlják a
CLISP -ben és a 48-as sémában fordítottakat . A sok számítást igénylő kódnál a PicoLisp értelmező lassabb, mint a lefordított programok. Ezért azokat az időkritikus szakaszokat, amelyeknél az értelmező valóban korlátozó tényezővé válik, azt javasoljuk, hogy külső kóddal valósítsák meg egy lefordított nyelven (általában
C vagy
assembly nyelven ), amely általában gyorsabbnak bizonyul, mint bármely lefordított nyelv. Lisp kód.
Egyszerűség és világosság.
A nyelv az egyszerűségre és a minimalizmusra összpontosít. A szintaktikai konstrukciók, alapfogalmak és rendszerfunkciók száma a hatékony működéshez elegendő minimumra csökken. Nyelvi szinten csak három adattípus létezik - számok, karakterláncok és listák, virtuális gépek szintjén - az egyetlen adattípus - Cons-cell
[4] . A fordítás megtagadása lehetővé tette a nyelv jelentős egyszerűsítését, és ennek köszönhetően a tolmács magjának egyszerűsítését, ami egy nagyon memória-hatékony és hatékony végrehajtási környezet létrehozásához vezetett.
Ortogonalitás.
Az alapvető szintaktikai konstrukciók nagyfokú univerzalitása miatt (amely nagyrészt a fordítás elutasítása miatt érhető el) az azokat megkettőző további mechanizmusok ki vannak zárva a nyelvből. Így az egyik szembetűnő sajátosság a lambdaLisp rendszerekre hagyományosan használt függvény elutasítása (köztük a
Common Lisp és az
Emacs Lisp ) – szükségtelenné vált a függvény változása miatt quote, ami a PicoLispben minden argumentumát változatlanul visszaadja, és nem csak az első cella
[3] . A függvények leírásának univerzális mechanizmusa a paraméterek kiszámításának vezérlésével lehetővé tette a makrók és függvényértékek speciális szintaxisának elhagyását; ezek mind megfelelően reprezentálhatók a függvénydeklarációk általános szintaxisával. Az értelmezésnek köszönhetően a függvények számos korlátozástól mentesek és tetszőleges típusú adatokkal hatékonyan tudnak dolgozni, tetszőleges számú paramétert feldolgozni. A nyelv nem is támogatja a
tömböket , az egyetlen nem atomi adattípus a lista.
Dinamikus összekapcsolás.
A legtöbb modern dialektustól eltérően a PicoLisp a
dinamikus adat-összerendelésre támaszkodik, mivel sokkal könnyebben és hatékonyabban implementálható az értelmezőben.
tárgy orientáció.
A PicoLisp egy könnyű, de erőteljes objektum-orientált rendszerrel rendelkezik, amely magán a nyelven van megírva. Mind az osztályok, mind az objektumok Lisp szimbólumként vannak megvalósítva. Tulajdonságok és metódusok támogatottak, objektumok és osztályok egyaránt, többszörös és egyszeres öröklődés. A nyelv dinamikus jellege lehetővé teszi, hogy adott objektumokhoz tulajdonságokat és metódusokat adjon szükség szerint.
Praktikusság.
A nagyszámú beépített listafeldolgozási funkciónak köszönhetően a PicoLisp programok kompaktak, kifejezőek és meglehetősen termelékenyek
[5] .
Szerda.
A PicoLisp nem csak egy programozási nyelv, hanem egy alkalmazásfejlesztő szoftverplatform is, amely adatbázist, webes alkalmazásszervert és webes keretrendszert (XHTML GUI könyvtárként ábrázol) tartalmaz.
A platform tartalmazza a Prolog beépített megvalósítását is , amely C és Java függvényhívásokat biztosít Lisp kódból.
Lokalizáció.
A nyelv támogatja az UTF-8 kódolást, amely lehetővé teszi, hogy bármilyen ábécé karaktereivel átláthatóan dolgozzon. A PicoLisp-ben nincs karakterlánc típus, ehelyett ideiglenes (tranziens) karakterek használhatók - olyan karakterek, amelyek neve idézőjelbe zárt karaktersorozat. Más nyelvek karakterláncaival ellentétben az ilyen karakterek a karakterekben rejlő összes tulajdonsággal rendelkeznek, beleértve az értékük lehetőségét is. Ezen értékek manipulálásával bármilyen nyelvre átlátható fordítást biztosíthat.
Példák
Kódkódolási információ a Base58 -ban [6] :
( setq *B58Alpha
( chop " 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" ) )
( de hex2L ( H )
( gyártmány
( for ( L ( chop H ) L ( cddr L )
( pack ) ) ) ) ) ( link ( hex ) ) )) ) ) ) ( de b58enc ( Lst ) ( let ( P 1 Z 0 A ( összeg ' ( ( X ) ( * X ( csere 'P ( >> -8 P ))) ) ( fordított Lst ) ) ) ( for L Lst ( T ( n0 L )) ( inc 'Z ) ) ( pack ( kell Z "1" ) ( make ( while ( gt0 A ) ( yoke ( prog1 ( get *B58Alpha ( inc ( % A 58 ) ))) ( setq A ( / A 58 ) ) ) ) ) ) ) )
A nyelv hivatalos webhelye számos példát kínál teljes alkalmazásra, beleértve a beágyazott adatbázissal rendelkező webalkalmazást, a teljes funkcionalitású konzolos szövegszerkesztőt (kevesebb, mint 1 ezer sornyi kód), egy IRC-klienst .
Jegyzetek
- ↑ 1 2 http://software-lab.de/radical.pdf Archiválva : 2019. július 28., a Wayback Machine Pico Lisp. Radikális megközelítés az alkalmazásfejlesztéshez. Alexander Burger, 2006.
- ↑ Alexander Burger. Ersatz PicoLisp pikolisp.com . Letöltve: 2017. július 26. Az eredetiből archiválva : 2017. november 12.. (határozatlan)
- ↑ 1 2 3 PicoLisp GYIK . software-lab.de. Letöltve: 2017. július 25. Az eredetiből archiválva : 2017. augusztus 6..
- ↑ Burger Sándor. "Belső struktúrák" . PicoLisp.com . Letöltve: 2017. július 26. Az eredetiből archiválva : 2016. december 25. (határozatlan)
- ↑ Példák a Rosetta kódra : Kategória:PicoLisp - Rosetta Code (eng.) . rosettacode.org. Letöltve: 2017. július 25. Az eredetiből archiválva : 2017. augusztus 6..
- ↑ mihailp/tankfeeder/source/base58.l - Bitbucket . bitbucket.org. Letöltve: 2017. július 26. (nem elérhető link)
Linkek