Esoteerilised programmeerimiskeeled: Difference between revisions

From ICO wiki
Jump to navigationJump to search
No edit summary
No edit summary
Line 63: Line 63:
====Tekstipõhise lähtekoodiga artistlikud keeled====
====Tekstipõhise lähtekoodiga artistlikud keeled====
Üheks lihtsama välimusega esokeele näiteks oleks Hexagony, mille autoriks on [https://esolangs.org/wiki/User:Martin_Ender Martin Ender]. Selles keeles loetakse juhiseid kuusnurkses võrestikus, mälu on kuusnurkne ning lähtekood on kuusnurkne. Paistab, et kõik, mis vähegi võimalik, on tehtud selle keele puhul kuusnurkseks. Hexagony nimetus on kombinatsioon sõnadest “hexagon” (kuusnurk) ja “agony” (agoonia), sest selles keeles programmeerimine võib just viimast põhjustada. Hexagony on ka Turing-täielik esokeel.<ref name="Hexagony">https://esolangs.org/wiki/Hexagony</ref> Keele autor on koostanud ka [https://codegolf.stackexchange.com/questions/66708/unfolding-the-hexagony-source-code/66967#66967 Hexagony interpreteerimise seletuse], kui kellegi mõistus seda hoomab, on sellest kindlasti palju kasu.
Üheks lihtsama välimusega esokeele näiteks oleks Hexagony, mille autoriks on [https://esolangs.org/wiki/User:Martin_Ender Martin Ender]. Selles keeles loetakse juhiseid kuusnurkses võrestikus, mälu on kuusnurkne ning lähtekood on kuusnurkne. Paistab, et kõik, mis vähegi võimalik, on tehtud selle keele puhul kuusnurkseks. Hexagony nimetus on kombinatsioon sõnadest “hexagon” (kuusnurk) ja “agony” (agoonia), sest selles keeles programmeerimine võib just viimast põhjustada. Hexagony on ka Turing-täielik esokeel.<ref name="Hexagony">https://esolangs.org/wiki/Hexagony</ref> Keele autor on koostanud ka [https://codegolf.stackexchange.com/questions/66708/unfolding-the-hexagony-source-code/66967#66967 Hexagony interpreteerimise seletuse], kui kellegi mõistus seda hoomab, on sellest kindlasti palju kasu.
<pre>
  H ; e ;
  l ; d ; *
; r ; o ; W
l ; ; o ; * 4
3 3 ; @ . >
  ; 2 3 < \
  4 ; * /
</pre>
"Hello, World!" Hexagonys<ref name="Hexagony" />





Revision as of 20:19, 5 December 2021

NB! Pole veel valmis!


Sissejuhatus

Mis on esoteerilised programmeerimiskeeled?

Esoteerilised programmeerimiskeeled ehk esokeeled (ingl k esolangs) on programmeerimiskeeled, mis pole loodud praktiliseks kasutamiseks, vaid hoopis näiteks veidrate ideedega eksperimenteerimiseks, programmeerija elu võimalikult raskeks tegemiseks või lihtsalt nalja pärast. Näiteks võivad esokeeled olla äärmiselt keerulised kirjutada, proovida kasutada võimalikult vähe käske või hoopis lähtekoodi kujul näha välja nagu Shakespeare’i näidend [1]. Kuigi esokeeltega tegelemine võib olla paeluv ka lihtsalt nende absurdsuse või omapära tõttu, võib neist huvituda ka seepärast, et need justkui kombivad ja venitavad programmeerimiskeeleks olemise piire – piire, mille paindlikkust katsetama praktiliseks kasutuseks mõeldud programmeerimiskeeled tavaliselt ei kipu.

Lühike ajalugu

Programmeerimiskeeled, mida võib lugeda esoteerilisteks, eksisteerisid juba ka enne 1960. aastat. Taoliste nii-öelda eelajalooliste esokeelte eripära on see, et need olid tegelikult mõeldud tõsiseks kasutamiseks – nende veidrus tulenes lihtsalt sellest, et veel ei teatud, mida korralikud programmeerimiskeeled endast üldse kujutama peaksid. Tänapäevased programmeerimiskeelte (ja ka programmeerimise enda) disainipõhimõtted polnud veel välja töötatud ning nende keelte näol on tegemist tõsiste katsetega programmeerimiskeelte võimalusi avastada ja piire avardada [2]. Esimeseks "tõeliseks" esokeeleks peetakse 1972. a loodud INTERCAL’i [1]. Erinevalt eelnenud proto-esokeeltest oli INTERCAL’i loomisel mittepraktiline eesmärk – mitte omada ühtegi sarnasust ühegi olemasoleva programmeerimiskeelega – ning just tänu INTERCAL’ile levis idee, et kahtlase süntaksi ja semantikaga keeli võiks eraldi nähtusena lähemalt uurida [2][1].

Mõne teise arvamuse järgi on esimene „tõeline“ esokeel hoopis 1993. aastal kirjutatud FALSE [3]. Oma autori meelistõeväärtuse järgi nime saanud FALSE loodi eesmärkidega 1) omada väikseimat võimalikku kompilaatorit ja 2) olla võimalikult raskesti mõistetav [3][4]. FALSE’i poolt on inspireeritud muuhulgas ka kaks samuti 1993. aastal kirjutatud ülipopulaarset esokeelt brainfuck ja Befunge, milledest omakorda on inspireerunud paljude teiste esokeelte autorid [1][3][4].

Turingi-täielikkusest

NB! Paremaid tõlkeideid Turing-completeness jaoks?

NB! Tuleb veel kirjutada

Temaatilised keeled

Temaatiliste esokeelte omapära seisneb selles, et need pole loodud mingi kindla programmeerimisparadigma avastamiseks, vaid hoopis kindla (enamasti mõnest inimkultuuri kontseptsioonist pärit) teema esindamiseks[5].

Pseudonaturaalsed keeled

Pseudonaturaalsed keeled on esokeeled, mis sarnanevad süntaksi poolest mingisugusele loomulikule inimkeelele. Näib, et selle liigituse nimetuse sobivuses kaheldakse: näiteks sisaldab see kategooria ka tehiskeeltel põhinevaid esokeeli, mis ei sobi nimetuse "naturaalse" osaga hästi kokku. Samuti tundub selle kategooria lehekülg esokeelte vikis üsna puudulik - mitmed esokeeled, mis peaksid olema pseudonaturaalsed, pole seal loetletud. Sellest hoolimata sobivad pseudonaturaalsed keeled mõistlikuks alamjaotuseks temaatilistele keeletele; mainitud probleemidest tasub olla teadlik, kuid need ei tähenda, et pseudonaturaalsus poleks käesolevas töös temaatiliste keelte kontekstis asjalik kategooria[6].

The Shakespeare Programming Language

Shakespeare ehk Shakespeare Programming Language ehk SPL on 2001. aastal Karl Wiberg’i and Jon Åslund’i poolt kirjutatud Turingi-täielik esokeel, mille loomiseesmärk oli, et loodava esokeele lähtekood sarnaneks Shakespeare’i näidenditekstile[3][7]. Tõepoolest, SPL’is kirjutatud programmid kipuvad väga näidendilaadse välimusega olema. Iga programm algab nõndanimetatud pealkirjaga (tegelikult on tegemist esteetilistel eesmärkidel nõutud kommentaariga). Muutujad SPL’is on tegelaskujud Shakespeare’i näidenditest ning neile omistatakse väärtusi repliikide kaudu – kindlad sõnatüübid muudavad omistatavat väärtust erineval moel. Näiteks nimisõnad on alati kas konstant 1 või -1, sõltuvalt sellest, kas tegemist on "kena" nimisõnaga või mitte. (Muutujate väärtused on alati täisarvud, kuid kasutades lauset "Speak your mind", saab väljundisse printida ka nendele arvudele vastavaid tähemärke. Samuti pole tegelaste "mälu" piiratud vaid nende väärtuse talletamisega – iga tegelane saab "meelde jätta" mitmeid väärtusi, käitudes pinuna.) Ka struktuuri poolest on kood näidendilaadne. Programm jaguneb vaatusteks, need omakorda stseenideks ning stseenid omakorda repliikideks. Vaatusi ja stseene saab kasutada goto-lausetes nendeni "hüppamiseks"[8].

Näiteks üks SPL’i stseen, mis „hüppab“ stseeni, mille nimi on „scene IV“, juhul kui Juliet’i (Julia) väärtus on suurem kui Hamlet’i väärtus:

Chef

Chef (ingl. k kokk) on 2002. aastal David Morgan-Mar’i poolt loodud Turingi-täielik esokeel, milles kirjutatud programmid näevad välja nagu toiduretseptid[9][10]. Üks Chef’i disainipõhimõtetest ütleb, et Chef’i retseptid peaksid lisaks korrektse väljundi genereerimisele olema ka lihtsalt valmistatavad ja maitsvad[10].

Iga retsept sisaldab koostisosasid, mis hoiavad endas andmeväärtusi. Sarnaselt SPL’iga on Chef’is kõik koostisosad arvuliste väärtustega, kuid neid saab interpreteerida ka Unicode’i tähemärkidena – nimelt vedelad koostisosad muudetakse väljundis tähemärkideks. Samuti on võimalik kasutada piiramatut arvu segamis- ja küpsetusnõusid, mis täidavad andmestruktuuride – täpsemalt pinude – rolli. Taaskord sarnaselt SPL’iga peab iga Chef’i programm algama pealkirjaga, mis programmi funktsionaalsust ei mõjuta. Pealkirjale võib järgneda koostisosade nimekiri, kus deklareeritakse koostisosade nimed ja mõõtühikud (, mis määravad ära, kas see koostisosa on vedel, kuiv või ükskõik kumb) ning võib ka omistada koostisosadele algsed väärtused. Koostisosade nimekirjale võivad järgneda küpsetusaeg ja/või ahjutemperatuur, kuid need ei mõjuta programmi funktsionaalsust ja ei pea programmis üldse leiduma[10].

Programmi peamine osa (method) koosneb lausetest. Üldiselt eraldatakse laused reavahetustega, kuid interpreteerides neid ignoreeritakse. Laused valitakse piiratud juhiste hulga seast, mis kõik meenutavad päris toiduretsepti juhiseid. Näiteks "Put sugar into 2nd mixing bowl." paneb "sugar"-nimelise koostisosa väärtuse teise segamisnõusse ja "Add dry ingredients to 4th mixing bowl." lisab kõikide kuivade koostisosade väärtuste summa neljandasse segamisnõusse. Retseptides saab kasutada tsükleid ja lisaretsepte. Et retsept annaks väljundit, tuleb see lõpetada "Serves number-of-diners." lausega, mispeale väljundisse pannakse esimese number-of-diners arvu küpsetusnõude sisu[10]. Kuigi suvaliselt kirjutatud Chef’i programmi retseptina interpreteerimisel arvatavasti ei oleks tulemuseks midagi maitsvat või isegi väga söödavat, on veidi pingutades täiesti võimalik luua Chef’i programmi, mis ka süüa kõlbab. Üks hea näide sellest on Mike Worth’i kirjutatud (ja küpsetatud) "Hello World'i kook".

Rockstar

Rockstar on 2018. a Dylan Beattie' poolt loodud Turingi-täielik esokeel, milles kirjutatud programmide lähtekood peaks meenutama lauluteksti. Rockstar loodi eesmärgiga ajada segadusse värbajaid, kes tööpakkumistes otsivad kedagi, kes võiks olla "rockstar developer" - piinlikult naeruväärne ja ebamäärane fraas, mis siiski näis tööpakkumistes populaarne nõue olevat. Nalja mõte seisneb selles, et kui tegelikult leidub lihtsalt õpitav keel nimega "Rockstar", siis igaüks panustada paar minutit sellega tutvumisele ning seejärel end tõsimeeli nimetada "rockstar developeriks". Seega tulenes keele rokklaulu teksti meenutav välimus keele nimest, mitte vastupidi[11].

Rockstar on mõeldud "andma programmeerijale enneolematult suure poeetilise vabaduse oma programmide struktuuri ja koosseisu osas". Poeetiline vabadus aga ei tähenda tingimata muud sorti vabadust. Näiteks ei saa avaldistes kasutada sulge - sulud on mõeldud kommentaaride jaoks, kuigi kommentaaride kasutamist soovitatakse tungivalt vältida -, mistõttu võib keerulisemate avaldiste korral olla vaja kasutada mitmeid ridu koodi. Võrreldes näiteks äsja käsitletud SPL'i ja Chef'iga sisaldab Rockstar mõnevõrra rohkem tööriistu: sõned on implementeeritud eraldi andmetüübina, keelde on sisseehitatud kasulikud funktsioonid nagu ümardamine ja ühevõrra suurendamine... Nagu võib arvata, on Rockstar'i võtmesõnad laulusõnadesse sobivad ning mitmetel on ka alternatiive, et võimaldada vähem monotoonse lüürika loomist. Näiteks võib Tommy-nimelisele muutujale null-väärtuse omistamiseks kasutada nii lauset Tommy was nobody kui ka Tommy is gone. Muidugi, ka aritmeetilised operatsioonid esinevad sõnade kujul: näiteks My world is nothing without your love määrab My world-nimelise muutuja väärtuseks 0'i ja your love-nimelise muutuja vahe. Vältimaks liigset numbritekasutamist saab muutujatele arvulisi väärtusi määrata sõnades olevate tähemärkide arvu (moodul 10-ga) järgi: Tommy was a lovestruck ladykiller seab Tommy väärtuseks 110[12]. Taolisi võimalusi loovalt kasutades saab muljetavaldavalt laululaadseid programme kirjutada.

Näiteks lõik Rockstar'is kirjutatud FizzBuzz programmist[12]:

Desire is a lovestruck ladykiller
My world is nothing 
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top

English

English (mitte ajada segamini ~English'iga!) on väga hea näide sellest, kui kaugele saab esokeelte põhimõtteid viia. English ongi põhimõtteliselt lihtsalt inglise keel. English'is kirjutatud programmid on ingliskeelsed kirjeldused sellest, mida see programm tegema peab. Näiteks Hello World programm English'is: This program writes "Hello World" (without quotes) to the output.. Kuigi mingil määral on selleks suudetud kasutada ka masinõpet, on English'i kompilaatorid enamasti programmeerijad (ehk inimesed), kes kipuvad olema aeglased ja tegema palju vigu. Samuti on English'is kirjutatud programme vahel võimalik interpreteerida mitmel erineval korrektsel viisil ning arvutamatuid English'i programme ei suuda ka inimesed kompileerida. Üheks arvutamatu English'i programmi näiteks on This program solves the halting problem.[13].

Artistlikud keeled

Artistliku lähtekoodiga keelte kategooria ei ole küll kõige traditsioonilisem ja levinum viis esokeeli kategoriseerida, kuid selle osa autori silmis on see paslik. Tegu on otseses mõttes artistlike keeltega. Olgu selleks artistlikuks osaks see, et kood meenutab sõna otseses mõttes kunsti [14], noodilehte[15] või näeb lihtsalt esteetiline välja. Lähtekoodiga on võimalik kunsti teha erinevatel viisidel. Lihtsam ja ilmselgem viis oleks luua kunsti tekstiga.

Tekstipõhise lähtekoodiga artistlikud keeled

Üheks lihtsama välimusega esokeele näiteks oleks Hexagony, mille autoriks on Martin Ender. Selles keeles loetakse juhiseid kuusnurkses võrestikus, mälu on kuusnurkne ning lähtekood on kuusnurkne. Paistab, et kõik, mis vähegi võimalik, on tehtud selle keele puhul kuusnurkseks. Hexagony nimetus on kombinatsioon sõnadest “hexagon” (kuusnurk) ja “agony” (agoonia), sest selles keeles programmeerimine võib just viimast põhjustada. Hexagony on ka Turing-täielik esokeel.[16] Keele autor on koostanud ka Hexagony interpreteerimise seletuse, kui kellegi mõistus seda hoomab, on sellest kindlasti palju kasu.

   H ; e ;
  l ; d ; *
 ; r ; o ; W
l ; ; o ; * 4
 3 3 ; @ . >
  ; 2 3 < \
   4 ; * /

"Hello, World!" Hexagonys[16]


Veel temaatilisi keeli

Huvitavaid ja omapäraseid esokeeli võib alati juurde leida ning nende kõigi üksikasjalik kirjeldamine pole käesoleva kirjatöö eesmärk. Siiski, andmaks lugejale laiema arusaama sellest, milliseid erinevaid temaatilisi esokeeli leidub, mainib siinne alapeatükk põgusalt veel mõnda huvitavat näidet temaatilistest esokeeltest.

4

"Pii viimase komakoha" järgi nimetatud 4 sisaldab kümmet operatsiooni, millest igaühele vastab üks kümnendsüsteemi number. Iga 4's kirjutatud programm peab algama 3.ga ja lõppema 4ga - programmeerimine toimub nende vahele numbreid (mis käituvad nii operatsioonide kui operandidena) kirjutades. Näiteks 4's kirjutatud Hello World näeb välja selline: 3.6000160103602136033260433605446067260787008070200908000120902111120111011015065095105105115055035075115125105085044 Mittenumbrilisi tähemärke võib koodi vahele suvaliselt sisestada ilma funktsionaalsust mõjutamata, kuid see on esteetiliselt taunitav[17].

Quipu

Inkade poolt andmekandjana kasutatud sõlmnööri poolt inspireeritud Quipu näebki välja nagu hulk sõlmitud ja punutud nööre[18].

Quipu programm, mis prindib välja arvud 0-st 99-ni[18].

"0  1  2"

1& 1& 1&
[] ++ []
/\    1%
\n    --
/\    3& 
      ==   
      0&
      ??

var'aq

Esokeeled võivad olla inspireeritud ka tehiskeeltest, nagu fiktsionaalsel Klingoni keelel põhinev var'aq. Näide: var-nimelisele muutujale väärtuse 1 omistamine: 1 lI'moH var cher (* var = 1 *)[19]. (Pole välistatud, et ka var'aq'i võiks lugeda pseudonaturaalsete keelte hulka.)

Fishing

Fishing erineb senistest näidetest mõnevõrra, kuna see ei proovi sarnaneda mingile kultuurilisele teosele või objektile, vaid hoopis jäljendab üht tegeliku elu tegevust - kalapüüki. Programmi peamiseks osaks on kai peal kõndiv kalamees, kes saab õnge heita ja kalu püüda. Käsklusi saab programmile anda kai ja kalade kaudu[20].

Fishing'us kirjutatud interpretaator Deadfish-nimelisele esokeelele[20]:

v+CC[vCCCCCCCC?!CCCCCCCCCC?!CCCCCCCCCCCCCCCCC?!CCCCCC?!CCCCCC?!CCCCCC?!CCCCCCD_
  n{D E`-1`n} = {E`256`n} =  { E`>>`PEI{E`i`}= {E`d`}= {E`s`}= {E`o`}=  {{N}} D
    D         _DDDDDDDDDDD]                  D       D       D       D        D      
    D         <                              D       D       D       D        D
    D         D                              <       <       <       <        D
    D        EC                             }C      }C      }C      }C        D
    D        `C                             iC      dC      SC      NC        D
    D        0C                             {C      {C      {C      {C        D
    D        `C                              D       D       D       D        D
    D        nC                              D       D       D       D        D
    D        {C                              D       D       D       D        D      
    |DDDDDDDDD]DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD]DDDDDDD]DDDDDDD]DDDDDDD]DDDDDDDD]

PokéBattle

PokéBattle imiteerib maailmakuulsast videomänguseeriast pärit Pokémon'ideks kutsutavate olendite lahinguid. Kõik toimub kordamööda käikhaaval, iga Pokémon talletab endas ühe muutuja väärtust (need on tema "elud") ning neid muutujaid saab mõjutada kindlate tegevustega seda Pokémon'i sihtides[21].

Baba Is You

PokéBattle'i näol oli tegemist videomängust inspireeritud, kuid siiski sellest paljuski erineva esokeelega. Mõnikord aga võib videomäng osutuda juba ise põhimõtteliselt esokeeleks - nagu mõistatusvideomängu Baba Is You korral. Baba Is You toimub kahedimensioonilisel ruudustikul, kus asuvaid blokke ringi liigutades saab muuta mängu enda reegleid. Kuigi mängus üldiselt on ruudustiku paigutus ja selle elemendid juba kindlal viisil asetatud - tegemist on loogikamõistatustega, mida mängija peab lahendama -, on olemas ka režiim, kus mängija saab ise elemente oma soovi järgi paigutada. Tuleb välja, et selles režiimis on võimalik otse mängu sees "kirjutada" erinevaid programme. Tasub mainida, et kui mänguruudustik laiendada lõputuks, on Baba Is You ka Turingi-täielik[22].

Minimalistlike kompilaatoritega esokeeled

Käsitleme kompilaatorite üht ekstreemumi – väikese jalajäljega kompilaatorid. Minimalistlike kompilaatorite kirjutamine ei ole ainult populaarne osade esokeelte autorite seas. Tuntumate keelte kompilaatoreid on sarnaselt esokeeltele viidud võimalikult minimalistlikule kujule. Motiivid selliste kompilaatorite tegemise taga on erinevad. Mõne arendaja jaoks on olnud põhjuseks isiklik huvi. Teise jaoks aga praktiline vajadus, kui on tarvilik väga väikeste tehnoloogiliste nõuetega kompilaatorit.

Vaadates korra esokeeltest mööda, siis ühed tuntumad minimalistlikud kompilaatorid on Fabrid Bellardi loodud 100KB suurune „Tiny C Compiler“[23]. Tiny C Compiler on niivõrd väikese jalajäljega, et seda on võimalik käitada otse ka esimestel kolmepoole tollistel flopiketastel, millede suurused küündivad vaid paarisaja kilobaidini. Teise minimalistliku kompilaatorina väärib ära märkimist Dennis Allisoni loodud 4KB suurune kompilaator „Tiny BASIC“. Tiny BASIC sealjuures on ka BASIC keele üks paljudest dialektidest[24].

Jätkates kompilaatorite minimaalsuse narratiiviga, siis esoteeriliste keelte autoritel selles osas on eelised. Eelnevalt käsitletud kompilaatorite „Tiny C Compiler“ ja „Tiny BASIC“ autorid pidid arvestama C ja BASIC keelte eripäradega. Esokeelte autoritel, olles ise samal ajal ühe abstraktse keele autoritest, on võimalik sellega mõjutada ka kompilaatori vajadusi ehk siis teisisõnu viia seda võimalikult miinimumi.

FALSE

FALSE on 1993. aastal Wouter van Oortmersseni poolt loodud pinupõhine keel[4]. FALSE keel omab sarnasusi 1970. aastal loodud mitte esoteerilise programmeerimiskeelega Forth[25]. FALSE keele loomisel oli keeleautoril kaks peamist eesmärki – luua obfuskeeritud süntaksiga keel ja sellele luua võimalikult minimalistlik kompilaator. Wouteri loodud kompilaator on vaid 1024 baidi suurune, mis on kirjutatud 68000 assemblerkeeles.

FALSE esokeele posiitvseks küljeks võib pidada lisaks oma minimalislile ka seda, et Wouter on keelt luues lisanud sinna tavalisest esokeelest rohkem funktsionaalsusi. Näiteks FALSE-s on olemas tugi erinimelistele muutujatele, lambda-funktsioonidele ja silmustele. Nende funktsioonide olemasolu ei ole esokeelte puhul tavapärane ja seetõttu väärib ka ära märkimist.

Noppeid FALSE programmeerimisekeelest[26].

Hello, World!

"Hello, World!"

Faktoriaal

[$1=~[$1-f;!*]?]f:         

"calculate the factorial of [1..8]: "
ß^ß'0-$$0>~\8>|$
"result: "
~[\f;!.]?
["illegal input!"]?"
"

Algarvud vahemikus 0...100

99 9[1-$][$@$@$@$@/*=[1-$$[%1-$@]?0[$.' ,]?]?]#

brainfuck

brainfuck on 1993. aastal Urban Mülleri poolt loodud populaarne esokeel, millele aastate jooksul on kirjutatud mitmekümneid dialekte[27]. Oma vulgaarse nimevaliku tõttu viidatakse antud keelele tihtipeale ka kui „brainf***“, „brainflakes“, „brainoof“, „brainfrick“, „bf“ jne. Mülleri ainueesmärk brainfuck esoteerilist keelt kirjutades oli luua kõige väiksema jalajäljega kompilaator, mis töötaks Amiga OS versiooniga 2.0 [28]. brainfuck keeleautor Müller on saanud inspiratsiooni teistest esokeeltest FALSE ja P“. Kompilaator, mis Müller Amiga operatsioonisüsteemile kirjutas oli vaid 240 baidi suurune.

Läbi aastate on brainfuckile kirjutatud ridamisi erinevaid interpretaatoreid, näiteks – bff4[29], bff[30], bff4lnr, dbfi.b[31], sbi.c [32], qdb[33]. Entusiastid on läbi aastate kõrvutanud erinevaid brainfucki interpretaatoreid omavahel tehes kiirusteste [34][29]. Senini kiiremaiks brainfuck esokeele interpretaatoritiks on kujunenud bff4lnr, mis on bff4-l põhinev interpretaator lineaaroptimeerimisega, mõlema autoriks on Oleg Mazonka.

brainfuck keele dialekte, mis pühenduvad brainfuck optimeerimisele on mitmeid, samas nende dialektide autorid ei ole seni fookusesse võtnud veel väiksema kompilaatori loomist. Märkimist väärivad järgnevad brainfuckil põhinevad kompaktsed esokeeled – Headache[35], bf core[36] ja tinyBF[37].

Noppeid brainfuck programmeerimisekeelest[27]

Hello, World!

+++++ +++               Set Cell #0 to 8
[
    >++++               Add 4 to Cell #1; this will always set Cell #1 to 4
    [                   as the cell will be cleared by the loop
        >++             Add 4*2 to Cell #2
        >+++            Add 4*3 to Cell #3
        >+++            Add 4*3 to Cell #4
        >+              Add 4 to Cell #5
        <<<<-           Decrement the loop counter in Cell #1
    ]                   Loop till Cell #1 is zero
    >+                  Add 1 to Cell #2
    >+                  Add 1 to Cell #3
    >-                  Subtract 1 from Cell #4
    >>+                 Add 1 to Cell #6
    [<]                 Move back to the first zero cell you find; this will
                        be Cell #1 which was cleared by the previous loop
    <-                  Decrement the loop Counter in Cell #0
]                       Loop till Cell #0 is zero


>>.                     Cell #2 has value 72 which is 'H'
>---.                   Subtract 3 from Cell #3 to get 101 which is 'e'
+++++ ++..+++.          Likewise for 'llo' from Cell #3
>>.                     Cell #5 is 32 for the space
<-.                     Subtract 1 from Cell #4 for 87 to give a 'W'
<.                      Cell #3 was set to 'o' from the end of 'Hello'
+++.----- -.----- ---.  Cell #3 for 'rl' and 'd'
>>+.                    Add 1 to Cell #5 gives us an exclamation point
>++.                    And finally a newline from Cell #6

Minimalisseritud kujul

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

0-st 99-ni numbrid

++++++++++
>++++++++++++++++++++++++++++++++++++++++++++++++
>++++++++++
[
  >++++++++++++++++++++++++++++++++++++++++++++++++
  >++++++++++
  [
    <<<. >>.+ <<<.
    >>>>-
  ]
  <----------------------------------------------------------
  <<+
  >
  -
]


Võimalikult keerulised keeled?

Code golfing keeled?

Veel viise esokeeli kategoriseerida

Käesoleva kirjatöö struktureerimiseks kasutati võimalikult inimsõbralikke kategooriaid, eesmärgiga äratada teemaga vähetuttavates lugejates huvi ning anda neile ülevaatlik arusaam esokeelte olemusest ja võimalustest. Kuna aga viise esokeeli liigitada on palju, oleks mõistlik kiirelt tutvustada ka selliseid olulisemaid esokeelte omadusi, mis ühel või teisel põhjusel ei osutunud mõistlikuks kategoriseerimise aluseks ülejäänud töös.

Arvutatavus?

Arvutatavusklass?

Reversibility

Implemented

Self-modifying

Dimensionaalsus

Determinism

Veel liigitusi

Lisaks võib esokeeli jaotada veel mõndade omaduste põhjal, näiteks mälu tüüp (lahter, pinu jne), abstraktsioonitase (kui erinev on esokeel masinkoodist) või kvantsus (kas keel kasutab töötamiseks kvantmehhaanikat või mitte). Kuigi ka need on kindlasti väärt uurimist, ei pidanud käesoleva kirjatöö autorid neid selle töö eesmärgi jaoks eriti olulisteks[38].

Allikad

  1. 1.0 1.1 1.2 1.3 https://esolangs.org/wiki/Esoteric_programming_language
  2. 2.0 2.1 https://esolangs.org/wiki/Prehistory_of_esoteric_programming_languages
  3. 3.0 3.1 3.2 3.3 https://www.hillelwayne.com/talks/esolangs/
  4. 4.0 4.1 4.2 https://esolangs.org/wiki/FALSE
  5. https://esolangs.org/wiki/Category:Thematic
  6. https://esolangs.org/wiki/Category:Pseudonatural
  7. http://shakespearelang.sourceforge.net/
  8. http://shakespearelang.sourceforge.net/report/shakespeare/
  9. https://esolangs.org/wiki/Chef
  10. 10.0 10.1 10.2 10.3 https://www.dangermouse.net/esoteric/chef.html
  11. https://esolangs.org/wiki/Rockstar
  12. 12.0 12.1 https://codewithrockstar.com/docs
  13. https://esolangs.org/wiki/English
  14. https://www.dangermouse.net/esoteric/piet.html
  15. https://esolangs.org/wiki/Fugue
  16. 16.0 16.1 https://esolangs.org/wiki/Hexagony
  17. https://esolangs.org/wiki/4
  18. 18.0 18.1 https://esolangs.org/wiki/Quipu
  19. https://esolangs.org/wiki/Var%27aq
  20. 20.0 20.1 https://esolangs.org/wiki/Fishing
  21. https://esolangs.org/wiki/Pok%C3%A9Battle
  22. https://esolangs.org/wiki/Baba_Is_You
  23. https://bellard.org/tcc/
  24. http://www.ittybittycomputers.com/IttyBitty/TinyBasic/TBEK.txt
  25. https://www.forth.com/resources/forth-programming-language/
  26. https://strlen.com/false-language/
  27. 27.0 27.1 https://esolangs.org/wiki/Brainfuck
  28. https://amigaos.net/
  29. 29.0 29.1 http://mazonka.com/brainf/
  30. https://www.swapped.cc/#!/bff
  31. http://www.brainfuck.org/dbfi.b
  32. http://www.brainfuck.org/sbi.c
  33. http://www.brainfuck.org/qdb.c
  34. https://esolangs.org/wiki/Talk:Brainfuck
  35. https://esolangs.org/wiki/Headache
  36. https://esolangs.org/wiki/Bf_core
  37. https://esolangs.org/wiki/tinyBF
  38. https://esolangs.org/wiki/Esolang:Categorization