Pico Lisp

Pico Lisp
Kieliluokka ohjelmointikieli
Esiintyi 1988
Tekijä Alexander Burger
Tyyppijärjestelmä dynaaminen
Lisenssi MIT-lisenssi
Verkkosivusto picolisp.com
Alusta POSIX

PicoLisp  on Lisp - ohjelmointikielen minimalistinen murre, joka on suunniteltu käytettäväksi Linuxissa ja muissa POSIX -järjestelmissä .

Historia

PicoLispin kirjoittaja on saksalainen kehittäjä Alexander Burger. PicoLispin edeltäjä oli "8kLisp", jonka sama kirjoittaja loi vuosina 1986-1987 tietokoneille, joissa on CP/M -käyttöjärjestelmä ; pääideat oli jo tuolloin laadittu.

Ensimmäinen PicoLisp-tulkin versio luotiin Macintosh-tietokoneille 1980-luvun lopulla. Ensimmäinen kaupallinen kehitys PicoLispissä, kuvankäsittely- ja tulostusasettelujärjestelmässä, joka toimi Mac II:ssa, tehtiin vuonna 1988 [1] .

Vuonna 2009 ilmestyi 64-bittinen versio, joka on kirjoitettu "yleisellä konekoodilla", joka on käännetty kohdealustakohtaiseksi koodiksi PicoLispin avulla.

Vuonna 2010 "Ersatz Picolisp" [2] Java-versio julkaistiin .

Periaatteet ja ominaisuudet

Ainoa tulkki. PicoLisp rakennettiin puhtaasti tulkituksi Lisp . Teoksen [1] [3] kirjoittajan mukaan ohjelmointitekniikassa, joka käyttää Lispin erityispiirteitä, kuten monimutkaisia ​​luettelorakenteiden muunnoksia ja dynaamista koodin generointia, kääntämisestä johtuva nopeuden lisäys on mitätön, eikä se ole niiden komplikaatioiden arvoinen. kieleen on lisättävä tehokkaan käännöksen varmistamiseksi. Kirjoittaja uskoo, että ei ole mitään järkeä monimutkaista kieltä ja ympäristöä nopeuseron vuoksi, jota käyttäjä ei todennäköisesti edes huomaa. Kirjoittajan [3] mukaan tyypilliset PicoLisp-tulkin alla toimivat Lisp-luettelonkäsittelyohjelmat osoittavat suunnilleen samaa suorituskykyä kuin CMUCL :iin käännetyt ja ylittävät merkittävästi CLISP :ssä ja Scheme 48 :ssa käännetyt ohjelmat . Koodissa, jossa on paljon laskutoimituksia, PicoLisp-tulkki on hitaampi kuin käännetyt ohjelmat. Siksi aikakriittiset osat, joissa tulkista todella tulee rajoittava tekijä, ehdotetaan toteutettavaksi ulkoisella koodilla käännetyllä kielellä (yleensä C- tai assembly-kielellä ), joka yleensä osoittautuu nopeammaksi kuin mikään käännetty. Lisp koodi. Yksinkertaisuus ja selkeys. Kieli on keskittynyt yksinkertaisuuteen ja minimalismiin. Syntaktisten rakenteiden, peruskäsitteiden ja järjestelmätoimintojen määrä vähennetään mahdollisimman tehokkaaseen toimintaan. Kielitasolla on vain kolme tietotyyppiä - numerot, merkkijonot ja luettelot, virtuaalikoneen tasolla - ainoa tietotyyppi - Cons-cell [4] . Kääntämisestä kieltäytyminen mahdollisti merkittävästi yksinkertaistamisen kieltä ja tästä johtuen tulkin ytimen yksinkertaistamisen, mikä johti erittäin muistitehokkaan ja tehokkaan suoritusympäristön luomiseen. Ortogonaalisuus. Syntaktisten perusrakenteiden suuren universaalisuuden vuoksi (saavutetaan suurelta osin käännöksen hylkäämisen vuoksi), niitä kopioivat lisämekanismit suljetaan pois kielestä. lambdaSiten yksi silmiinpistävistä piirteistä on Lisp-järjestelmille (mukaan lukien Common Lisp ja Emacs Lisp ) perinteisen funktion hylkääminen - se on tullut tarpeettomaksi funktion muutoksen vuoksi quote, joka PicoLispissä palauttaa kaikki argumenttinsa muuttumattomina, eikä vain ensimmäinen solu [3] . Universaali toimintojen kuvaamismekanismi, joka tukee parametrien laskennan ohjausta, mahdollisti makrojen ja funktioarvojen erityissyntaksin luopumisen; ne kaikki voidaan esittää asianmukaisesti funktion ilmoitusten yleisellä syntaksilla. Tulkinnan ansiosta funktiot ovat vapaita monista rajoituksista ja voivat tehokkaasti työskennellä mielivaltaisen tyyppisten tietojen kanssa ja käsitellä mielivaltaisen määrän parametreja. Kieli ei edes tue taulukoita , ainoa ei-atomitietotyyppi on lista. Dynaaminen linkitys. Toisin kuin useimmat nykyaikaiset murteet, PicoLisp luottaa dynaamiseen tiedonsidontaan , koska se on paljon helpompi ja tehokkaampi toteuttaa tulkissa. kohdesuuntaus. PicoLisp on kevyt mutta tehokas oliojärjestelmä, joka on kirjoitettu itse kielellä. Sekä luokat että objektit toteutetaan Lisp-symboleina. Ominaisuudet ja menetelmät ovat tuettuja, sekä objektit että luokat, useat ja yksittäiset perinnöt. Kielen dynaaminen luonne mahdollistaa ominaisuuksien ja menetelmien lisäämisen tiettyihin objekteihin tarpeen mukaan. Käytännöllisyys. Lukuisten sisäänrakennettujen luettelonkäsittelytoimintojen ansiosta PicoLisp-ohjelmat ovat kompakteja, ilmeikkäitä ja melko tuottavia [5] . Keskiviikko. PicoLisp ei ole vain ohjelmointikieli, vaan myös sovelluskehitysohjelmistoalusta, joka sisältää tietokannan, verkkosovelluspalvelimen ja verkkokehyksen (esitetty XHTML GUI -kirjastona). Alusta sisältää myös sisäänrakennetun Prolog -toteutuksen , se tarjoaa C- ja Java-funktiokutsuja Lisp-koodista. Lokalisointi. Kieli tukee UTF-8-koodausta, jonka avulla on mahdollista työskennellä läpinäkyvästi minkä tahansa aakkosten merkkien kanssa. PicoLispissä ei ole merkkijonotyyppiä, sen sijaan voidaan käyttää väliaikaisia ​​(transientteja) merkkejä - merkkejä, joiden nimi on merkkijono lainausmerkeissä. Toisin kuin muiden kielten merkkijonoissa, tällaisilla merkeillä on kaikki merkeille ominaiset ominaisuudet, mukaan lukien mahdollisuus saada arvo. Näitä arvoja muokkaamalla voit tarjota läpinäkyvän käännöksen mille tahansa kielelle.

Esimerkkejä

Koodikoodaustiedot Base58 :ssa [6] :

( setq *B58Alpha ( chop " 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" ) ) ( de hex2L ( H ) ( merkki ( for ( L ( chop H ) L ( cddr L ) ( ) ) ) ) ) ( linkki ( ) ) ) ) ) ) ( de b58enc ( Lst ) ( anna ( P 1 Z 0 A ( summa ' ( ( X ) ( * X ( swap 'P ( >> -8 P ) )) ) ( käänteinen Lst ) ) ) ( Lst Lst ( T ( n0 L )) ( inc 'Z ) ) ( pakkaus ( tarve Z "1" ) ( make ( while ( gt0 A ) ( ike ( prog1 ( get *B58Alpha ( inc ( % A 58 ) ))) ( setq A ( / A 58 ) ) ) ) ) ) ) )

Kielen virallisella verkkosivustolla on useita esimerkkejä täydellisistä sovelluksista, mukaan lukien verkkosovellus, jossa on sulautettu tietokanta, monipuolinen konsolitekstieditori ( alle 1 tuhat koodiriviä), IRC-asiakas .

Muistiinpanot

  1. 1 2 http://software-lab.de/radical.pdf Arkistoitu 28. heinäkuuta 2019, Wayback Machine Pico Lisp. Radikaali lähestymistapa sovelluskehitykseen. Alexander Burger, 2006.
  2. Alexander Burger. Ersatz PicoLisp . picolisp.com . Haettu 26. heinäkuuta 2017. Arkistoitu alkuperäisestä 12. marraskuuta 2017.
  3. 1 2 3 PicoLisp  UKK . software-lab.de. Haettu 25. heinäkuuta 2017. Arkistoitu alkuperäisestä 6. elokuuta 2017.
  4. Hampurilainen Alexander. "Sisäiset rakenteet" . PicoLisp.com . Haettu 26. heinäkuuta 2017. Arkistoitu alkuperäisestä 25. joulukuuta 2016.
  5. Esimerkkejä Rosetta-koodista : Kategoria:PicoLisp - Rosetta Code  (eng.) . rosettacode.org. Haettu 25. heinäkuuta 2017. Arkistoitu alkuperäisestä 6. elokuuta 2017.
  6. mihailp/tankfeeder/source/base58.l -  Bitbucket . bitbucket.org. Haettu: 26. heinäkuuta 2017.  (linkki ei saatavilla)

Linkit