A legtöbb programozási nyelvet azzal a céllal hívják életre, hogy valamilyen szempontból, valamilyen új környezetben, vagy valamilyen egyéb új technológia fényében jobb, szebb, hatékonyabb, megbízhatóbb, kényelmesebb fejlesztőeszközzé váljon.
Nem így az ezoterikus programnyelveket! Ezeket inkább azért hozzák létre, hogy mások legyenek…
Brainfuck, Omgrfofl, Shakespeare, Var'aq, stb., a programnyelvek hippijei rockerei punkjai emosai hipszterei ezek! Legyen szó extravaganciáról, kulturális tiszteletadásról, művészi- vagy tudományos kísérletezésről, a lényeg, hogy nem a fősodrú, „hasznos” programozási nyelvek tartoznak ide, hanem azok, amelyek valamiért kilógnak a sorból. A legtöbbjük tökéletesen alkalmas számítógépek programozására, még ha nem is a megszokott módon, vagy nem is éppen azzal a céllal készültek, hogy ezt a feladatot könnyebbé tegyék.
Ezek közül gyűjtöttem össze még néhány érdekességet válogatásom második részében!
-
Shakespeare
„Olyan programnyelv létrehozása volt a cél, melynek forráskódja Shakespeare drámák alakját ölti. Nincsenek flancos adat- vagy vezérlőstruktúrák, csak alapvető számtan és goto-k. Mondhatjuk, hogy a BASIC kifejezőképességét az assembly felhasználó barát voltával hoztuk össze.” - via
Természetesen az irónia beszél a szerzőkből, az adat- és vezérlőstruktúrák hiánya igencsak megnehezíti a programozó életét, a BASIC nyelv pedig kb. annyira kifejező, mint Kósa Lajos félálomban, az assembly programozásnál pedig már csak a gépi kódú programozás jelenti a nagyobb kihívást.
De ugyan kit érdekel mindez, ha végre elengedhetjük magunkat, és olyan ékes szavakkal írhatjuk meg a legegyszerűbb Hello World programot Shakespeare nyelven, mint az alább látható:
The Infamous Hello World Program. Romeo, a young man with a remarkable patience. Juliet, a likewise young woman of remarkable grace. Ophelia, a remarkable woman much in dispute with Hamlet. Hamlet, the flatterer of Andersen Insulting A/S. Act I: Hamlet's insults and flattery. Scene I: The insulting of Romeo. [Enter Hamlet and Romeo] Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind! You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind! You are as cowardly as the sum of yourself and the difference between a big mighty proud kingdom and a horse. Speak your mind. Speak your mind! [Exit Romeo] Scene II: The praising of Juliet. [Enter Juliet] Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind! [Exit Juliet] Scene III: The praising of Ophelia. [Enter Ophelia] Hamlet: Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak thy mind! Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak thy mind! [Exeunt Ophelia and Hamlet] Act II: Behind Hamlet's back. Scene I: Romeo and Juliet's conversation. [Enter Romeo and Juliet] Romeo: Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind! Juliet: Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind! [Exit Romeo] Scene II: Juliet and Ophelia's conversation. [Enter Ophelia] Juliet: Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind! Ophelia: Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind! [Exeunt]
A karakterek változókat reprezentálnak, melyek értéke attól függően változik, hogyan inzultálják vagy dícsérik egymást. Adatot bevinni úgy lehetséges, hogy egy karakterrel azt mondtatjuk a másiknak, hogy az hallgasson a szívére. Adatot kiíratni pedig úgy tudunk, hogy arra szólítja föl egyik szereplő a másikat, hogy mondja el mi nyomja a lelkét.
-
Malbolge
A Malbolge-nak is vannak irodalmi vonatkozásai, legalábbis ami a nevét illeti, azt ugyanis Dante Poklának 8. köréről kapta, és nem véletlenül… Azzal a céllal jött létre, hogy a lehető legnehezebb legyen benne működő programot írni. Alkotója különböző kreatív módszereket használ e nemes cél elérésére, mint például az önmagát módosító kód, vagy a hármas számrendszer használata. Olyan nehéz e nyelven programot írni, hogy arra csak a nyelv megjelenése utáni második évben került sor először, ráadásul azt sem egy ember alkotta meg, hanem egy kifejezetten erre a célra fejlesztett rejtvényfejtő algoritmus dobta ki! Maga Ben Olmstead, a nyelv megalkotója sem írt soha egyetlen programot se rajta…
Íme a Hello World program egy változata:
(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@b=`{^Lx8%$Xmrkpohm-kNi; gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm
-
Befunge
A Befunge érdekessége, hogy az utasítások nem sorról sorra, de még csak nem is betűről betűre követik egymást, ehelyett a vezérlő karaktereket sorokba és oszlopokba rendezve kell elhelyezni, a kód tehát két dimenzióban írandó. Futás közben a vezérlés aszerint járja be ezt a rácsot, hogy merre küldi őt tovább a két dimenziós térben a jel, amelyen éppen aktuálisan áll. Persze a küldözgetésen kívül értékeket lehet bedobálni a memóriába, műveleteket végezni velük, kiíratni őket, de akár az aktuális karakter, tehát a programkód módosítására is lehetőség van futási időben.
1993 nagy év volt az Ezoterikus programnyelvek szempontjából, mert a Befunge mellett a Brainfuck születése is ekkorra datálható. Az első verzió Amiga számítógépen született, és újszerű megközelítése miatt hamar népszerűségre tett szert. Úgy tartják, a Befunge a FORTH nevű programnyelv és a Lemmings nevű videójáték szerelemgyermeke…
-
Piet
Az előző részben taglalt Velato méltó párja a Piet, melyben azonban nem jazzes hangsorok, hanem absztrakt festményekre hajazó számítógépes grafikák rejtik a program utasításait. A különböző egyszínű területek, illetve a köztük lévő árnyalati és fényerőbeli eltérések adják ki az utasításokat, az előre meghatározott szabályrendszer szerint. Nevét egyébként Piet Mondrian holland festőről kapta.
Szép-szép, de én azért nem cserélném el rá kedvenc színtémámban kilistázott kódomat.
-
Whitespace
Nem csoda, hogy bolondok napján álltak elő az alkotók ezzel a nyelvvel. Neve elég beszédes. Ellentétben a legtöbb programnyelvvel, amelyek figyelmen kívül hagyják a különböző nem megjelenített, „üres” karaktereket, mint a space, a tab vagy a sorvégét jelző láthatatlan karakter, a Whitespace kód éppen ezekből épül föl. Trükkös, mi?
Mivel a legtöbb másik nyelv nemigen veszi számításba ezeket a karaktereket, könnyű elrejteni némi Whitespace kódot egy másik nyelven írt program sorai közé. Ez alkalmassá teszi például úgynevezet polyglotok írására is. Ez olyan programkódokat jelent, amelyek többféle programnyelven lefordítva is ugyan azt az viselkedést eredményezik.
-
l33t
Ne ijedj meg, ha még elolvasni sem tudod, segítek! A l33t azt jelenti, leet, csak éppen l33t 5p34k nyelven írva, ami pedig leet speaket takar. Na várj, megpróbálom kicsit érthetőbben! A leet speak egy olyan, a hacker kultúrában elterjedt szimbolikus nyelv, melyben a latin ábécé bizonyos betűit más, azokra némileg hajazó karakterekkel helyettesítjük. Így lesz például 1nd13 cr4wf0rd a blogom nevéből, magából a leet szóból pedig l33t, esetleg 1337, de a k0ck4s1n6 szó fordítását már inkább rád bíznám.
Szóval a l33t nyelven írt programok, nos… l33t nyelven íródnak! Maguk az így leírt kifejezések is többnyire az internetes, hacker, warez és játékos szlengből valók, akad itt lol, noob, de suxxor is bőven, természetesen l33t formában írva.
A nyilvánvalón kívül, a hálózatkezelési kapacitásai tették népszerűvé ezt a nyelvet hacker körökben.
-
JSFuck
A sort egy olyan nyelvvel zárnám, amely több szempontból is eltér az eddigiektől, és amely talán közelebb áll sokunk szívéhez. Nem egy önálló nyelvről van szó ugyanis, hanem az igen népszerű, a web programnyelvének is nevezhető JavaScript különös felhasználásáról. Kiderült, hogy bármely tetszőleges JavaScript program kifejezhető a nyelv jelkészletének mindössze 6 karakterének a segítségével. Trükkök százaira van szükség ugyan ehhez, és az eredeti nyelv minden egyes karakterét bonyolult kombinációkkal kell helyettesítenünk, de a dolog működik. Ez a fajta kriptikus és hosszadalmas JavaScript egy igen érdekes reinkarnációját eredményezi e nyelvnek, és tanulmányozása rámutat a JavaScriptben rejlő rejtett lehetőségekre, és segít jobban megérteni azt.
És hogy mire jó ez a gyakorlatban? Ha a felhasználási mód nem is túl nemes, de JSFuck segítségével sikerült például kártékony kód futtatására rábírni az eBay oldalait. Ez a nemrégiben felfedezett biztonsági rés tette széles körben ismertté a JSFuck nevű technikát.
Egyelőre ennyit tehát az ezoterikus programozási nyelvekről. Természetesen a lista ennél jóval hosszabb, és folyamatosan bővül. A téma végtelen izgalmakat és tanulási lehetőséget rejt magában, mindenki számára, aki az IT-világban keres örömöt és megélhetést magának, de talán a konkrét ismereteknél is fontosabb azonban megszívlelni az ezen nyelvekben megtestesülő mélyebb tanítást.
A hasznosság, a célszerűség korlátain túl, a művészet és a spiritualitás határán egy minőségében magasabb szintű minőség rejlik, mint amit egy adott paradigmán vagy feladaton belül gondolkodva elérni képesek vagyunk. Ne hajtsuk tehát kreativitásunkat a puszta praktikum, a profit, vagy a megszokásos szürke igájába, ellenkezőleg, használjuk inkább emezeket bátran tudásunk és tapasztalataink kiteljesedésére! Húzzuk ki fejünket a dobozból és vessünk egy pillantást a nagy képre, ha valamit meg tudunk tenni, tegyük, még akkor is, ha látszólag nem is jár azonnali haszonnal! Ilyesmiket üzennek nekem ezek az izgalmas nyelvek, a tudományos felfedezés alapvető mintázatát kommunikálva a számítógépes szoftverek fejlesztésének instrumentumán.