Térkép Blog RSS Komment Szavazó Mutató Műveim Kissy Stat Turkáló Linkek Segíts! 2010.02.09. K  10:17 
Furcsa programnyelvek :: Láng Attila D. blogja
Levél erről a cikkről    
Furcsa programnyelvek   
Előző TartalomKövetkező

Kis blogom előző írása olyan programnyelvekről szólt, amiket abból a célból hoztak létre, hogy megkönnyítsék az ember és a számítógép kapcsolattartását. Éppen ezért nem említettem a világtörténelem legősibb programnyelvét, a gépi kódot, amely nagyjából így néz ki: 11100010010101100010010010010010100101001010100101010100101010100101110110000011110101001011101010101011010010101101010101
  Ez itt nem értelmes program, csak nyomogattam a két billentyűt, de az értelmes programok is így néznek ki. A világ minden programja így néz ki „belül”, hiszen a számítógépek mindmáig csak egyeseket és nullákat ismernek, úgyhogy végső soron minden programot ezekre kell lefordítani, hogy a gép végrehajthassa. Mindazonáltal emberi szemszögből a gépi kód elég furcsa programnyelv.
   De vannak olyan programnyelvek is, amiket direkt tettek furcsává. A programozók is emberek, szeretnek játszani. És a játékaikból néha érdekes dolgok sülnek ki.
 
Amit itt lát az olvasó, az egy festmény és egy program. A festmény Piet Mondrian Kompozíció sárgával, kékkel és pirossal című festménye, készült 1921-ben, olaj és vászon – a program pedig Thomas Schoch Piet című programja, amely Piet nyelven íródott, és arra szolgál, hogy kiírja a Piet nevet. (Ejtsd pít, a Pieter rövidítése.) Találós kérdés: melyik melyik?
   Gondolom, a megfejtés akkor is könnyű, ha az olvasó nem ismeri ezt a festményt, hiszen nyilvánvaló, hogy ha Mondrian lilát is használt volna, az benne lenne a kép címében. A Piet programnyelvet a De Stijl híres művészéről nevezte el kidolgozója, David Morgan-Mar, akinek honlapján már nyolc ilyen ezoterikus programnyelv szerepel, mind saját alkotása. De a Piet a legszebb. A programok itt absztrakt festményeknek néznek ki, mert mindegyik egy-egy kép, amin színek jelzik a különböző műveleteket. Húsz színt használ (hatot három-három árnyalatban, plusz a fehéret és a feketét), ennyivel a világon mindent meg lehet írni.
 
Hiszen például a Brainfuck nyelvnek nyolc jel is elég, ami egyúttal azt is jelenti, hogy ha a nyolc jel jelentését megtanultuk, akkor elméletileg tudunk programozni Brainfuckban. A Brainfuck program egy képzeletbeli szalaggal operál, amin számok lehetnek, a program indulásakor csupa nulla. Van egy „hol tartunk a szalagon” mutató. Ennyit kell tudni ahhoz, hogy megértsük a nyolc jelet:
   > eggyel jobbra lépteti a mutatót;
   < eggyel balra lépteti a mutatót;
   + a mutató által jelzett számot eggyel növeli;
   - a számot eggyel csökkenti;
   . kiírja a mutató által jelzett számhoz mint ASCII-kódhoz tartozó karaktert;
   , beolvas egy karaktert és a kódját tárolja a szalagon a mutatónál;
   [ ha a mutatónál levő szám nulla, akkor a megfelelő ]-hez ugrik;
   ] visszaugrik a megfelelő [-hez.
   Ezennel gratulálok az olvasónak: éppen elvégezte a LAttilaD.org első teljes nyelvtanfolyamát.
   A nyelv azért kapta az agybaszó nevet, mert ez a nyolc jel ismétlődik a végtelenségig. A szabály szerint minden egyéb jelet át kell ugrani, azok tehát megjegyzésnek számítanak. A világ minden programnyelvén meg szoktak írni legalább egy programot, a Hello, worldöt. Feladat: kiírni egy üdvözletet a világnak. Brainfuck nyelven ez így néz ki: ++++++++++ [>+++++++> ++++++++++ >+++>+<<<<-] >++.>+.++++ +++..+++. >++.<<+++ +++++ +++++++.>. +++.------. --------.>+.>. Szóközöket csak azért tettem bele, hogy a böngészőnek legyen esélye tördelni valahogy.
   Ami lenyűgöző a dologban, hogy ez a zagyvaság nemcsak működik, de érthető, felfogható, ha az ember veszi hozzá a fáradságot. Az első tíz pluszjel a szalag első cellájának értékét megnöveli 10-re (hiszen minden nulláról indul). Ezután csinálunk egy ciklust (a két szögletes zárójel között), ami a következő cellákban a 70, 100, 30 és 10 számokat helyezi el, és visszamegy az első cellához. Ha most egyet jobbra lépünk és kettőt növelünk, abból 72 lesz, vagyis a H betű kódja. Egyet jobbra, egyet növelünk, 101, a kis e betű kódja. És így tovább, ide-oda lépkedve, állítgatva a számértékeket, a megfelelő pillanatban kiírva a karaktert – kijön a szöveg.
   A Brainfuck természetesen egy Turing-gép. Ezeket Alan Turing brit matematikus találta fel, és azóta számtalan matematikai problémát segítettek megoldani, de néha a valóságban is megépítenek egyet-egyet (például Denis Cousineau legóból csinált, be is mutatja ezen az oldalon). A Turing-gép nagyon röviden egy olyan gép, ami egy vagy több szalagból és egy író-olvasó mechanizmusból áll. Ez a fej mozog a szalag mentén (illetve általában a szalagot tekerik ide-oda és a fej áll). A szalagon olvasott adatok arra utasíthatják, hogy mozduljon a szalagon balra vagy jobbra, írjon a szalagra vagy változtassa meg belső állapotjelzőjét.
   A Brainfuck egy kétszalagos Turing-gép: az egyik szalagon (amit csak olvasni lehet és csak egy irányba) a program van, a másikon az adatok.
 
Bármilyen extravagáns a Brainfuck, mégiscsak hasonlít a többi programnyelvre abban, hogy a programot az elején kell elkezdeni, aztán sorban olvasni a jeleket. A Befunge nyelvben ez nem így van. A nyelv kétdimenziós. Egy négyzetrácsban helyezzük el a jeleket, és mindenféle irányokban szaladgálunk benne.
   "egnufeB">:#,_@
   Ez mindazonáltal egy egyenes vonalban megírt program. Baloldalt kell kezdeni és jobb felé haladni. A jelek a következőket csinálják:
   " a következő idézőjelig minden karakter kódját a verembe teszi;
   > irány jobbra;
   : a verem tetején levő értéket megduplázza;
   # trambulin: átugorja a következő karaktert;
   , kiírja a verem tetején levő számhoz tartozó karaktert, levéve a veremről;
   _ vízszintes HA utasítás (ha a verem tetején nulla van, akkor jobbra kell menni, különben balra);
   @ vége a programnak.
   Van több is, de ezek szerepelnek itt.
   Sok más nyelvhez hasonlóan a Befunge is veremmel működik. Az adatokat egy veremben helyezi el, egymás tetején, mindig a legutolsónak berakott adatot lehet kivenni legelőször.
   A program tehát sorban a verembe teszi a Befunge szó betűit, visszafelé, utoljára a B betűt. Aztán ezt a : megduplázza (BBefunge) és a , kiírja. Az _ megnézi, mit talál a vermen (el is dobja onnan), és mivel nem nullát, balra fog menni, vissza a ,-höz. Most az e betű jelenik meg. A duplázáson átugrat minket a trambulin, aztán a > visszafordít jobbra. Most duplázunk, kiírunk, megvizsgálunk, visszafordulunk… Amikor elfogy a szöveg, az _ nullát talál a veremben (mármint üres vermet), tehát jobbra fog menni, és véget ér a program.
   Ez pedig egy igazi kétdimenziós Befunge program. Érdemes figyelni a nyilakat (< > v ^), amint összevissza kanyarogtatják a végrehajtást.
  
 
Ezek a nyelvek azért furcsák, mert megszegik a programnyelvek írásának elemi szabályát – ami éppen azért nemlétező szabály, mert meg lehet szegni és úgy is létrejöhetnek programnyelvek. A szabály, ami tehát nem létezik: „programnyelvet azért írunk, hogy a gép és az ember közötti kommunikációt az ember számára minél könnyebbé tegyük, tehát olyannak kell lennie, hogy a programozó számára minél érthetőbb legyen”. Ezek a nyelvek más szempontokat követnek.
   Olyan programnyelv is van, ami követi a szabályt, és mégis furcsa.
  
   Ez itt egy program. Az öt kis szövegblokk nem a tartozéka, csak a szerző magyarázatai. Magát a programot a színekkel jelölt táblácskák alkotják, az ikonokkal, a nyúlványokat összekötő színes drótokkal, a narancssárga kerettel. Ez annyira szép, hogy muszáj még egyet mutatnom.
  
  Ez a NXT-G programnyelv, ami éppen azért ilyen színes-rajzos, hogy jól érthető legyen. Ezen a nyelven a jobbra látható NXT gépet programozzák, ami a Lego Mindstorms sorozat tartozéka, és olyan robotokat építenek vele, mint például a BrickSorter, ami képes szín szerint szétválogatni legókockákat (ámbár, mint a videón látható, néha hibázik).
  Számítástechnika     Legó     Programozás  
 
Értékelés (1: legrosszabb, 5: legjobb):    
    Átlag: 3,6
  1: 1 db   5: 2 db
  Nincs hozzászólás
 2210 ::      :: 96 525 :: 120 455 :: Abigél, Alex :: CZI Cl :: 40/325 :: @428 :: Javulhat a világűridőjárás-előrejelzés