Shop menü

WTBRAINF, AVAGY AZ EZOTERIKUS PROGRAMNYELVEK

Az agy tornáztatásán és a szórakoztatáson túl nagyon hasznosak lehetnek néhány számítógépes fogalom megismertetéséhez, de leginkább csak művészeti célokat szolgálnak.
HaverLaci
HaverLaci
WTbrainF, avagy az ezoterikus programnyelvek

Vajon az ezoterikus programnyelvek az agy tornáztatásán vagy a szórakoztatáson kívül használhatók valami másra? A BrainF*ck programnyelvet 1993-ban alkották meg. A szándék: egy programnyelv, melynek a lehető legkisebb méretű fordítóra van szüksége. Ez végül 170 bájt lett (= kb. 2 sor szöveg) és mindössze nyolc "utasítást" (+ - , . < > [ ] ) tartalmaz. Meglepően érdekes programok születhetnek ekkora készletből is.

Amikor megláttam a WhiteSpace programnyelvet azt tippeltem, hogy ezt egy lusta egyetemista utólag fejlesztette (valójában Edwin Brady és Chris Morris) egy korábban beadott üres képernyő (vagy papír) beadása után, igazolva, hogy megírta a programozás feladatot, csak az nem látható. Ugyanis a parancsok, így a programsorok is üres karakterekből állnak: szóköz és tabulátor kombinációjából, a vége pedig az enter. A programsorokat kijelölve az látható, hogy van valami tartalom ott, de a kód maga nem azonosítható.

De nem csak ez a rendhagyó programozási nyelv létezik, hanem rengeteg, lássunk néhány példát:

Whenever - egy sorszámozott, egyébként C-szerű programnyelv, ahol a parancsok sorrendje nem mérvadó. Ahányszor lefuttatjuk a kódot annyiféle eredményt kaphatunk, az utasítások ugyanis véletlenszerű sorrendben hajtódnak végre. Esetünkben a bal oldalon látható programsorok a középen található RUN feliratra klikkelés után a kijelző jobb részén megjelenő eredményt adják. Megnyomásonként változhat az eredmény.

A programot inkább teendő-listának kell felfogni, az egyes teendők azonban elhalaszthatók, amíg bizonyos feltételek nem teljesülnek, vagy el is hagyhatók a forget utasítással. Bár változók nem részei e nyelvnek, az N() és a defer - elhalasztás - zárójelei között megadott logikai feltétel, például a defer (4 || N(1)==N(2))  print(N(1)+"Feltétel teljesült"); használatával lehetőség nyílik a "hello world" megjelenítésénél bonyolultabb kódok létrehozására.

Az N() megadja, hogy a zárójelei között szereplő sor hányszor került végrehajtásra. Az again() nem távolítja el a teendőkből a tételt, ha igaz az abban megadott feltétel. Az U() a zárójelei közé írt Unicode kódhoz tartozó karaktert adja, a #-kal pedig a kiválasztott sort megadott alkalommal futtatja pl. 1#6; - a # nélkül ez a 6-os sort futtatná. A read() használatával értéket adhatunk meg, ebben a környezetben a jobb alsó sorba várja a beírást, mely alatt ekkor megjelenik az "Expecting input" felirat.

A defer() használata miatt a sorrend nem változik a második példában. A nagybetűkre csak az N() és az U() használata esetén kell ügyelni.

BrainF*ck: 1993-ban alkotta meg Urban Müller ezt a Turing-képes nyelvet a maga szuperkicsi, 170 bájtos fordítójával - először Commodore Amigára. Mindössze 8 "utasítást" tartalmaz: kacsacsőrök, szögletes zárójelek, és + - , . Egy 30 ezer cellás tárolóban dolgozunk melyben a kacsacsőrökkel haladhatunk, a + - használatával pedig értéküket módosíthatjuk.  A ,-jel adatbevitelre a . pedig a cella kiíratásra szolgál. A kiíratáshoz - mint az ilyen nyelvek nagy részében - az ASCII kódokat kell figyelembe venni. Tehát a 65-ös kódú "A" betű megjelenítéséhez 65 darab +-ra lesz szükségünk, hacsak nem akarunk ciklust használni. Ez a [ és ] között található kód lenne, mely a [ előtt megadott cellaérték nullára csökkentéséig fut. Én a Visual Brainf*ck-ot használtam, már a letöltése is kissé kalandos volt.

Talán a BrainF*ck-nak van a legnagyobb tábora, több platformra is megjelent a fordító, és több ezoterikus nyelvről is létezik BrainF*ck konverter.

Befunge: Chris Pressey alkotása, neve a before szó hajnali elgépeléséből született. Több változata ismert. Két dimenziós programnyelv 25x80 rekeszből álló táblával, melynek bal felső sarkából "indul" a lejátszás. A "program" futásának irányát a < > v ^ jelekkel irányíthatjuk, a ? véletlenszerű irányba fordítja a futást.  A vége jel pedig a @.

A "Stack" mezőben a verem tartalmát, a "Terminal" ablakban pedig a program eredményét láthatjuk. A fenti "program" futtatásakor a kérdőjelek miatt különböző szövegeket kapunk. A linkelt verzió tartalmazza az utasítások leírását. A szerkesztés kissé rendhagyó, nem a kurzor, hanem a kék téglalap jelzi a mezőt, amelyet módosítani tudunk a menüsorban található zöld nyíl irányában.

Némileg hasonló ehhez a HBCHT, azaz a "Half Broken Car in Heavy Traffic". A balra fordulni képtelen autó o-ból indul egy véletlenszerű irányba, és a #-ig halad, az irányokat a Befunge-hoz hasonlóan a < > v ^  jelek adják meg. De nem csak az irányokat: a jobbra-balra irány a tároló rekeszeit mozgatja, a fel-le pedig az értéküket, a / pedig feltételes utasítás. Lényegében egy BrainF*ck program "lejátszása" Befunge szerűen, leszámítva, hogy az eredmény kiírása a # hatására történik meg, tehát a program végén, egyben.

Az ARGH! is lényegében a Befunge-hoz hasonló német műremek, a haladási irányt itt betűk határozzák meg,  a képernyőre kiírás pedig kis p esetén az aktuális cella alatti, nagy P-nél pedig a cella feletti mező tartalma lesz. A q betűig halad a lejátszás. Amennyiben hibát észlel a program az "ARGH" hibaüzenetet jeleníti meg. 40 sornyi lehetőségünk van, a nyelv bővített változata az AARGH, ott nincs ilyen korlát. Két dimenziós verziója is létezik, az AARGH++.

Az ASCIIDOTS szintén hasonló, itt azonban néhány felesleges, csak a program kinézetét feldobó, irányító karakter is bekerült. Különlegessége, hogy a program több szálon is képes futni, a szálak pedig be tudják várni egymást pl. egy feltételes utasítás végrehajtásához.

Piet: A holland festő, Piet Mondrian után nevezték el a művész festményei hatására. A program lényegében pixelekből áll, melyeket itt codel-nek hívnak. Verziótól függően a codel lehet egy pixelcsoport is. 20 féle szín 17 féle utasítást határoz meg úgy, hogy a színskálán található pozíciójához képest számol, így ugyanazt a parancsot többféle színnel / tartalommal viszontláthatjuk. A következő képen a hat ábra hatféle módon végzi ugyanazt: kiírja a "Hello World" szöveget.

Negatív számot azonban csak művelet segítségével hozhatunk létre. A futás itt is a bal felső sarokból indul, és az oldalak mentén körben halad, ezt a feketével határolt részekkel lehet befolyásolni. Fontos, hogy a pixelekből, azaz codelekből létrehozott síkidom programfutással megegyező oldala ne lógjon túl a következő parancson. 

Az jobb oldalon található Debugger-t kinyitva láthatjuk az értelmezett parancsokat és az Output mezőben az eredményt, a "play" szimbólum megnyomása után. A képen látható egyszerű program favágó módszerrel egyesével tárolóba tölti a kiírni kívánt betűk ASCII kódját, majd kiolvassa és a képernyőre írja. A bal felső részen látható halványpiros pixekből álló mezőkből 73db van, ez az "i" kódja, melyet a halványpiros mező jobb felső oldalán látható vörös mező képében kiadott "push" paranccsal tárolunk, majd a világoslila mezővel kiíratjuk a képernyőre.

A világoslila pixel lesz a következő betű ASCII kódjának meghatározója is. Eddig kétszer váltottunk színt, a parancsok is ennyiszer váltottak pozíciót a színskálánkon. A lila alapú ipon.hu felirat fekete pixelekkel van körülvéve, így valójában a program futásában nem vesz részt. A kész programunkat el is "menthetjük", lényegében ekkor egy képfájlt hozunk létre. A Piet elég nagy népszerűségnek örvend, az érdeklődők segédprogramokat, és programkódokat is könnyedén találhatnak az interneten.

Ha már kép, akkor miért ne lehetne hangsor? Íme a "Hello World"  Velato nyelven, zongorán előadva.

Ha esetleg valakinek a morze kód szimpatikusabb, ugyanaz a reMorse nyelvvel:

ArnoldC: Ez az egyik legszellemesebb: Lauri Hartikka munkájában az utasításokat Arnold Schwarzenegger filmjeinek híres egymondatos kiszólásai adják, egyébként C-szerű. Hozzá kell tenni, hogy a készítő nincs egyedül, aki ezeket a mondatokat használja, azzal dalszöveg is készült.

A kód az "IT'S SHOWTIME" és a "YOU HAVE BEEN TERMINATED" között található.

Shakespeare (SPL): Ha lehet mondani ez talán pont az ArnoldC ellentéte, Shakespeare műveinek míves nyelvén programozva így néz ki egy "Hello World":

A program elején meghatározott szereplők töltik be az egész szám értéket felvevő változók, vagy a verem szerepét (és kizárólag autentikus szereplők jöhetnek szóba). A program felvonásokra és színekre van bontva, két változó közötti műveleteket pedig azok párbeszéde adja meg, melyekhez kulcsszavakat szükséges használni.

Hasonló vonalat lovagol meg Stephen McGreal és Alex Mole munkája, a L33t, a korai hackerek-crackerek-BBS-ek nyelvezetét használva:

A l33t honlapján az ördög programozási nyelvének állítja be magát. Mivel képes önmódosításra és hálózatkezelésre - így gonoszkodásra is - ez indokolt lehetett.

Itt van még a LOLSPEAK által inspirált, a lolcat internetes mémjei alapján 2007-ben Adam Lindsay által megalkotott Turing-képes LOLCODE.

Ha mindezt a mai fiatalok nyelvezetére fordítjuk már meg is született az OMGROFL (Oh my god rolling on the floor laughing), ahol a parancsok internetes betűszavak, mint lol, omg, brb, wtf, lmao, roflmao - egy "hello world" pedig így néz ki:

Chicken: Torbjörn Söderstedt alkotása, jelenleg nem elérhető, csak a netarchívumban. A "chicken" szó többszörözésével határozza meg meg az utasítást: a szó száma adja meg az utasítás kódját. Akit mélyebben érdekel e téma, annak ajánlott Doug Zongker tanulmánya, és előadása.

A Chiken-hez hasonló egy Ook program kinézete. A nyelvet az orángutánok inspirálták. Ezekkel operál: Ook. Ook? Ook! - e három variációival határoz meg 8 utasítást, mely megegyezik a BrainF*ck utasításaival. A "Hello World" így fest Ook-ban:

Aztán ott van a Grass, mely a v, w, és W-vel dolgozik, hat utasítást kezel így. Egy Grass program úgy néz ki, mint egy ASCII-art kép.

Persze ez nem az a GRASS (GRAphics Symbiosis System), amelynek pl. a Csillagok Háborúja filmekhez van köze. 

Intercal - 1972-ben alkotta meg Dan Woods és Jim Lyon, tehát ez egy korai példány. Udvarias viselkedésnek megfelelő mennyiségű "légyszíves" programkódba írásával fut le a program. Ha túl kevés, vagy túl sok, sajnos nem lesz szerencsénk: hibaüzenetet kapunk (1/3-1/5 - között arány esetén viszont menni fog).

Malbolge: Dante pokol-felépítéséből, annak is hetedik szintjéről kapta nevét, a használata pedig pokolian nehéz. Két évvel megjelenése után készült el az első program. A legegyszerűbb "Hello World"  program így fest ezen a nyelven:

Az ezoterikus programnyelvekben igen termékeny David Morgan-Mar újabb alkotása, a Chef. A program itt lényegében ételrecept összetevőkből és az elkészítésből állt. Mike Worth ennek örömére megírta hello world programját e nyelven - egy torta receptje -, melyet el is készített a kód alapján. 

ZOMBIE:  David Morgan-Mar műve ez is. Lényegében zombikat hozunk létre és irányítunk. Nemcsak zombikat tartalmaz a nyelv: szellem (véletlenszerű időben), vámpír (véletlen sorrendben), dzsinn (minden véletlenszerű: sorrend, tételek, elindulás) és démon (sorrend véletlen, többször is lefut egy taszkban, utóbb kettő akkor is elindul ha nem szeretnénk, de csak egyszer fut le) entitások is szerepelnek benne, melyek egyszerre "futnak" a zombival így biztosítva a többszálú végrehajtás lehetőségét.

FALSE: az elsők között jött létre 1993-ban - még Motorola 68000 processzorra - Wouter van Oortmerssen "tollából". Cél volt a lehető legrövidebb fordító (egy kilobájt lett), és viszonylag bonyolult megjelenés. Több alkotót is ez inspirált saját nyelv megírására, pl a Brainf*ck is így jött létre.

BATCH: van aki nem is bajlódik programnyelvek írásával, de mégcsak megtanulásával sem. Már a DOS batch is egy programnyelv, nemde? Jawando Adeyanju (Jahwi) ezt egy MMORPG megírásával igazolja, további információk a batchquest.com oldalon találhatók.

English: Összezavarnak az utasítások, bonyolult a kód? Használj teljes angol mondatokat!

Ha kedvet kaptál az ezoterikus stb. programozáshoz, a TIO - Try it online - honlapján több mint 600 nyelv online kipróbálási lehetősége vár, többhöz youtube-os bemutató is elérhető. 

De hogy mi értelme van ezeket használni, megalkotni? Fene tudja, de egy biztos: jobb, mint dolgozni. Nehéz lehet elhinni, de néha az ezoterikus nyelvek - szemléletük miatt - mégis segítségünkre lehetnek. Egyik ilyen a 2018-ban megalkotott Orca, mely zenei performanszok létrehozásához lehet fontos eszköz.

Neked ajánljuk

    Tesztek

      Kapcsolódó cikkek

      Vissza az oldal tetejére