nyest.hu
Kövessen, kérem!
Legutolsó hozzászólások
A nyelvész majd megmondja
A legnépszerűbb anyagok
Írjon! Nekünk!
nyest.hu
nyest.hu
 
A legfurcsább programozási nyelvek
Beszélő cicák és bátor szakácsok

Egy program forráskódja, modern festmény, esetleg ételrecept? Néha nem is olyan könnyű eldönteni, mit látunk éppen. Vannak, akik hobbiból furcsa, de működő programnyelveket terveznek... Hogyan kódolnak az aranyos cicák és mit (ne) főzzünk ma este?

Takács Boglárka | 2013. július 5.
|  

A legtöbb programozási nyelvet úgy tervezik, hogy könnyen megtanulható és használható legyen. Azonban vannak olyan emberek is, akik hobbiból minél szokatlanabb programozási nyelveket készítenek, sőt ezeken a nyelveken működő, futtatható programokat is írnak! Az úgynevezett ezoterikus programnyelveknek a gyakorlati haszna nem sok, de szórakoztató és tanulságos lehet velük foglalkozni, csakúgy, mint más mesterséges nyelvekkel. Ha pedig idegenkedünk a számítástechnikától, akkor olvashatjuk a következő cikket egyfajta szent borzadállyal...

Lolmacska nyelven is programozhatunk
Lolmacska nyelven is programozhatunk
(Forrás: Wikimedia Commons / Slava / CC BY 2.0)

Akármit lehet, de minek?

A programozási nyelvek feladata, hogy közvetítsenek a felhasználójuk és a számítógép között. A számítógép olyan utasításokat tud végrehajtani, amelyek egyesek és nullák sorozataiból állnak, de ilyen utasításokat rendkívül nehéz összeállítani. Így a gyakorlatban (kissé leegyszerűsítve) az történik, hogy a felhasználó valamilyen, emberi nyelvre és/vagy matematikára legalább nyomokban hasonlító programozási nyelven írja meg az utasításokat – ez a forráskód –, majd a forráskódból egy fordítóprogram készít gépi kódot.

Programozás a hetvenes években. Akkor még fapadosabb volt minden
Programozás a hetvenes években. Akkor még fapadosabb volt minden
(Forrás: Wikimedia Commons / Fotothek / CC BY-SA 3.0)

Egy programozási nyelv gyakorlatilag bármilyen lehet, amíg van hozzá fordítóprogram. Egyesek ezt a lehetőséget ki is használják, és szadista, vicces vagy éppen művészi programozási nyelveket készítenek. Hogy minek? Leginkább azért, mert csak.

Kaotikus krikszkrakszok

A legközismertebb bizarr programozási nyelv talán a körülbelül „agyfasz”-ként fordítható nevű brainfuck. A szigorúan kisbetűvel írandó brainfuck összesen nyolc utasítást használ, és mind a nyolc egyetlen karakterből áll – például a „.” kiírja a tárolóban lévő adatot, a „+” pedig egyet ad hozzá. Ebből természetesen emberek által szinte teljesen olvashatatlan végeredmény születik. Mégis vannak olyan megszállottak, akik képesek brainfuck nyelven programozni...

Csak hogy lássuk, hogy néz ki ez a szörnyszülött a gyakorlatban – a következő brainfuck forráskód a „Sziasztok, nyestek!” szöveget jeleníti meg (aki nem hiszi, ide bemásolva futtathatja):

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

Akár olyan programozási nyelveket is lehet találni, amelyek csak egyetlen utasítást használnak. Rögtön felmerül a kérdés, hogy mit csinál az egyetlen utasítás, hogy bármilyen programot meg lehet írni a segítségével? Többféle lehetőség adódik, a legegyszerűbb a „mozgass valamit valahova”.

Művészet?

Vannak olyan programozási nyelvek is, amelyek utasítások sorozataként nem szöveget, hanem képeket vagy zenét fogadnak el. A Velato nyelv MIDI formátumú zenéből állít elő futtatható utasításokat. Hogy a zene maga mennyire élvezhető, az más kérdés, habár a Velato készítője, Daniel Temkin állítása szerint sokat tett az ügy érdekében. A lentebbi – kottának tűnő – forráskód ide kattintva meghallgatható:

Velato nyelvű forráskód
Velato nyelvű forráskód
(Forrás: Esolangs.org)

Más programozási nyelvek szintén arra törekszenek, hogy a forráskód egyben önállóan befogadható produktum is legyen. Talán a legextrémebb példa a Chef (’Séf’) nyelv, David Morgan-Mar alkotása. A Chef programok nemcsak hogy receptre hasonlítanak, de igény szerint meg is főzhetőek! Mi nem mertük kipróbálni – a mintapéldák esetében gyanúsan sok alapanyagot kell összekutyulni...

Morgan-Mar más érdekes nyelveket is készített. Másik kedvencünk tőle a Piet Mondrian absztrakt festőről elnevezett Piet nyelv, ennek a bemenetei színes képek. Mindez a gyakorlatban úgy működik, hogy a kép pixelei tartoznak konkrét parancsokhoz. Egyesek elképesztő dolgokat is létrehoztak e módon – van például Piet nyelvű brainfuck fordítóprogram. A Piet elég rugalmas, így magukat a programokat pusztán dekoratív elemekkel is kombinálhatja a lelkes programozó. A következő kép Joshua Schulter munkája, egy gyakran használt eljárást ültet át Piet nyelvre:

A törpe az eljárás nevére utal – Gnome sort. A programozók hajlamosak az efféle humorra
A törpe az eljárás nevére utal – Gnome sort. A programozók hajlamosak az efféle humorra
(Forrás: Joshua Schulter / GNU GPL)

A gyűjteményből kiemelendő még az a Piet program, ami a pí értékét számítja ki egy kör területéből és átmérőjéből; keressük a nagy piros kört!

A jó, a rossz és a csúf

Olyan ezoterikus programnyelvek is vannak, amelyeknél szemlátomást az volt a készítő első számú szempontja, hogy a végeredmény furcsán nézzen ki, vagy éppen ne nézzen ki sehogy! A Whitespace (’üres hely’) nyelv alkotórészei a hagyományosabb programnyelvek által rendszerint messze elkerült helykitöltő elemek – a szóköz, a tabulátor és az enter. A következő kép egy működő Whitespace programot ábrázol, kiszínezve, hogy lássunk is valamit:

A barna szín a szóköz, a fekete a Tab
A barna szín a szóköz, a fekete a Tab
(Forrás: Wikimedia Commons)

A Whitespace hatalmas (?) előnye, hogy mivel más programozási nyelveket nem különösebben zavar, ha a kelleténél több üres helyet hagyunk, akár el is rejthetünk egy Whitespace programot más nyelven íródott forráskódunkban. Hogy ezt miért tennénk, az persze más kérdés...

A LOLCODE szintén furcsán fest, de egészen másképp, mint a Whitespace; ezt a nyelvet a cicás internetes mémek ihlették. Ha esetleg valaki még nem látott lolmacskát: ezek az interneten 2007-ben végigsöpört képek vicces, szándékosan hibás nyelvtanú, csupa nagybetűs mondatokat tartalmaznak, macskák fotói alá írva. Hasonló stílusban készült a LOLCODE is; a nyelv parancsait a tipikus lolmacska szófordulatok ihlették, például a programok a HAI utasítással kezdődnek és a KTHXBYE utasítással végződnek. Érdeklődők az angol Wikipédián találhatnak rengeteg példát. A következő LOLCODE forráskód egy szöveges állományt nyit meg, illetve ha ez nem sikerül neki, hibaüzenetet ad:

HAI
CAN HAS STDIO?
PLZ OPEN FILE "LOLCATS.TXT"?
    AWSUM THX
        VISIBLE FILE
    O NOES
        INVISIBLE "ERRROR!"
KTHXBYE

Tömény szenvedés

A legvégére hagytuk azokat a nyelveket, amelyeknek az a nyíltan bevallott céljuk, hogy a programozó dolgát minél jobban megnehezítsék. (A fentebbi programnyelveknél a brainfuck kivételével ez nem feltétlenül volt szándékos, egyszerűen csak így alakult.) Egyesek a a hasonló nyelvek létezését kihívásnak veszik, és mindent megtesznek, hogy programokat írjanak az adott nyelveken.

Talán a legborzasztóbb ilyen nyelv a Malbolge, Ben Olmstead műve. Olmstead célja az volt, hogy olyan programnyelvet hozzon létre, amin ember nem képes futtatható programot írni, annak ellenére, hogy ez elvileg lehetséges.

Két évbe tellett, mire az első Malbolge program megszületett, és ezt sem ember írta, hanem egy olyan számítógépprogram, ami módszeresen végigpróbálgatott különböző lehetőségeket. Később valódi, ember által készített Malbolge programok is napvilágot láttak, sőt ma már programozási útmutatók is léteznek. Vállalkozó szellemű olvasóink számára sok bátorságot kívánunk... Cikkünket egy kis Malbolge forráskóddal zárjuk, a témával foglalkozó Esolang wikiről.

(aBA@?>=<;:9876543210/.-,JH)('&%$#"!~}|{zy\J6utsrq

ponmlkjihgJ%dcba`_^]\[ZYXWVUTSRQPONMLKJIHGF('C%$$^

K~<;4987654321a/.-,\*)

j

!~%|{zya}|{zyxwvutsrqSonmlO

jLhg`edcba`_^]\[ZYXWV8TSRQ4

ONM/KJIBGFE>CBA@?>=<;{9876w

43210/.-m+*)('&%$#"!~}|{zy\

wvunslqponmlkjihgfedcEa`_^A

\>ZYXWPUTSRQPONMLKJIH*FEDC&

A@?>=<;:9876543210/.-m+*)(i

&%$#"!~}|{zyxwvutsrqpRnmlkN

ihgfedcba`_^]\[ZYXWVU7SRQP3

NMLKJIHGFEDCBA@?>=<;:z8765v

3210/.-,+*)('&%$#"!~}_{zyx[

vutsrqjonmlejihgfedcba`_^]@

[ZYXWVUTSRo

Mint látható, valószínűleg még az egyesekkel és nullákkal is jobban járnánk. Ez a program beolvas egy adatsort, majd kiírja azt. Most
képzeljünk el bonyolultabb programokat... vagy inkább mégsem?

További olvasnivaló, felhasznált irodalom

 Esolang wiki – az ezoterikus programnyelvek gyűjtőhelye

Webes brainfuck fordító
Velato
Piet
LOLCODE az angol Wikipédián

Címkék: Tech, Programozás
Követem a cikkhozzászólásokat (RSS)
Hozzászóláshoz lépjen be vagy regisztráljon.
1 baga 2013. július 5. 22:28

lol

Információ
X