ITHub

8 (nagyon) furcsa programozási nyelv

8 (nagyon) furcsa programozási nyelv
Farkas Gábor
Farkas Gábor
| ~5 perc olvasás

A jó programozási nyelveket többnyire ugyanazok a tulajdonságok jellemzik. Könnyű használhatóság, gyors tanulhatóság, strukturáltság. Fontos, hogy valós problémákat segítsen megoldani, a szintaxisa átlátható és logikus legyen, az elérhető implementációk pedig bugmentesek és gyorsak legyenek. Természetesen vannak, akik úgy gondolják, érdemes időt áldozni (akár kutatási céllal, akár szórakozásból) olyan nyelvek kifejlesztésére, melyekre a fentiek közül semmi sem igaz. Ezekből mutatunk most be néhányat.

8 (nagyon) furcsa programozási nyelv

1. LOLCODE

A LOLCODE 2007-ben nagy lendülettel söpört végig az interneten. Eredeti verzióját Adam Lindsay, a Lancaster University kutatója fejlesztette ki — alapvetően csupa nagybetűs, főleg netes mémekből táplálkozó kulcsszavakból áll. További kommentár nélkül álljon itt egy kis kódrészlet:

HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
   UP VAR!!1
   VISIBLE VAR
   IZ VAR BIGGER THAN 10? KTHX
IM OUTTA YR LOOP
KTHXBYE

Ez a kis program kiírja a számokat 1-től 10-ig, majd leáll. A LOLCODE hivatalos honlapján gyorsan megtanulható a nyelv, ill. letölthető az Ici nevű fordító is hozzá.

2. Glass

Míg előző versenyzőnk a vicces kulcsszavakat leszámítva némileg hasonlít egy valódi nyelvhez, a Glass-al belépünk egy olyan világba, ahol ez már egyáltalán nem igaz. Ez a programnyelv egy abszolút intuícióellenes posztfix-jelölést alkalmaz, erős objektumorientált jelleggel. A részletek ismertetésére itt nincs hely (akinek van némi felesleges ideje, érdemes elolvasni ezt az anyagot), álljon itt egy kis kódrészlet, ami a Fibonacci-számokat adja vissza:

{F[f(_a)A!(_o)O!(_t)$(_n)1=,(_isle)(_n)*(_a)(le).?=/(_isle)^\(_n)*(_a)
s.?(_t)f.?(_n)*(_a)s.?(_t)f.?(_a)a.?]}{M[m(_a)A!(_f)F!(_o)O!(_n)=(_nlm)
=/(_nlm)(_n)*(_f)f.?(_o)(on).?" "(_o)o.?(_n)(_n)*(_a)a.?=(_nlm)(_n)*
(_a)(le).?=\]}

A nyelvet magát egyébként Gregor Richards alkotta meg 2005-ben. Elmondása szerint ezzel a logikával egyetlen nyelvet sem implementáltak még, mert az egyszerűen „idiótaság“ lenne.

3. Brainfuck

A névválasztás eleve sokatmondó; a Brainfuck-al bátran tovább evezünk a bizarr nyelvek tengerén. Urban Müller találta ki még 1993-ban azzal a céllal, hogy olyan programozási nyelvet hozzon létre, amelyhez minimális tárigényű fordítót lehet írni (ma a Brainfuckhoz 100 bájtos fordító is létezik). A nyelv 8 egykarakteres parancsból áll, amik alacsony szintű műveleteket hajtanak végre, tulajonképpen egy klasszikus Turing-géphez hasonló konstrukcióval állunk szemben. Az alábbi kódrészlet a klasszikus Hello world feladatot valósítja meg:

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

Mi sem egyszerűbb. A nyelv egyébként igen komoly kult státuszt ért el, ha meg szeretnéd tanulni, itt egy jó kis bevezető.

4. Chicken

Itt a szintaxis megtanulásával nem kell túl sokáig bajlódnunk, mert ebben a nyelvben egyedül a chicken kulcsszót használhatjuk, ill. a soremelés karaktert, ami új parancs kezdetét jelöli. Alapvetően egy stacken operálhatunk, a futtatandó operációt pedig az egy sorban leírt chicken-ek száma dönti el: egy darab például a verem két felső elemének összeadását, három darab a kivonást jelöli. Az alábbi kis program a standard inputra érkező adatot a standard outputra írja:

chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken chicken
chicken chicken chicken chicken chicken chicken

Csirkekedvelőknek erre érdemes továbbindulni.

5. Whitespace

Itt is árulkodó a névadás, és valóban: ebben a nyelvben kizárólag szóköz és tabulátor karaktereket használhatunk, ezek száma és kombinációja dönti el a futtatandó parancsokat és sorrendjüket. Mivel a fordító minden más karaktert figyelmen kívül hagy, érdemes végiggondolni, hogy tulajdonképpen bármilyen más forráskódot is nekiadhatunk, csak épp a programot az abban lévő szóközök és tabulátorok fogják meghatározni. A programozási nyelvhez jó bevezetőt találunk a Wikipedián.

6. ///

Ezt a minimalista nyelvet Tanner Swett alkotta meg 2006-ban. Az egyetlen lehetséges művelet két string cseréje, amit a /cserélendő/csere/ formában kell megadnunk. Ebből könnyen látható, hogy a nyelv használhatósága (még a jelenlegi lista tagjait tekintve is) meglehetősen korlátozott, mégis van néhány okos programozó, aki működő programokat hozott létre elágazásokkal, ciklusokkal. Mi maradjunk ismét csak a megszokott Hello world programnál:

/ world! world!/Hello,/ world! world! world!

7. Befunge

A Befunge egy kétdimenziós programozási nyelv: a programunkat egymás alatti sorok helyett egy fix méretű mátrixon helyezzük el. Egy mező utasítást vagy adatot tartalmazhat, de maga a program is tudja változtatni a mezők tartalmát. A fordító (értelmező) a bal felső sarokból indul, és jobbra halad, de speciális parancsokkal befolyásolható az iránya. A Befunge-ról bővebben itt olvashatsz, a Hello world pedig így néz ki:

0"!dlroW ,olleH">:#,_@

8. Malbolge

Az irodalomban jártasaknak már sokatmondó lehet a megnevezés, ugyanis Dante fő művében a pokol nyolcadik körét illeti malbolge névvel. Ben Olmsteadnek, a programozási nyelv megalkotójának egyetlen célkitűzése az volt, hogy olyan nyelvet hozzon létre, amelyben teljességgel lehetetlen bármilyen hasznos programot írni. Ez a küldetés olyannyira sikeres volt, hogy a specifikáció publikálása után két évnek kellett eltelnie, mire megjelent az első Malbolge program. Ennek tükrében azt hiszem megbocsájtható, ha nem közlök semmilyen részletet arról, hogy működik, álljon itt inkább ismét a Hello world program.

('&%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@>}=

+1. Velato

Zenekedvelőknek ideális ez a nyelv, hiszen magát a programot egy kotta reprezentálja, a fordító bemenete pedig egy MIDI-fájl. A Velatoban a parancsokat a hangjegyek magassága és sorrendje dönti el, azonban megenged némi szabadságot, így a programok nem feltétlenül hangoznak random hangok egymásutánjának — sőt, állítólag a Velatoban írt kódok általában hajlamosak jazzes hangzást felvenni.

Rengeteg hasonló nyelv található még a kiváló Esolangs.org wiki oldalon, szemezgessetek ott is bátran, és írjátok meg kedvenceiteket.