Befunge

Befunge je ezoterický dvojrozmerný programovací jazyk. Odlišuje sa od ostatných hlavne tým, že príkazy nenasledujú za sebou, ale sú usporiadané v dvojrozmernej mriežke. Jednu inštrukciu predstavuje jeden znak v mriežke. Program sa vykonáva tak, že ukazovateľ (program counter) sa hýbe po mriežke a vykonáva aktuálne inštrukcie. 

 História 
Jazyk vymyslel Chris Pressey v roku 1993 ako pokus o konštrukciu jazyka, ktorý sa nedá skompilovať. Napriek tomu, niekoľko kompilátorov už bolo napísaných. K pôvodnému "Befunge-93" existujú špecifikácie ako napríklad Funge-98, ktoré podporuje ľubovoľne veľa rozmerov (namiesto pôvodných dvoch), takisto aj multithreading. Špecifikácia Befunge-93 povoľuje mať inštrukcie len v mriežke 80 riadkov a 25 stĺpcov. Program, ktorý pretečie cez okraj, pokračuje na druhej strane. Práve preto je program v Befunge topologicky ekvivalentný torusu. Befunge nemá žiadnu normálnu pamäť ako iné jazyky, pracovať môže len so zásobníkom. Ani inštrukcia na zápis a čítanie v mriežke stále nestačí na to, aby Befunge-93 bolo turingovsky úplné. Túto vlastnosť získava až Funge-98 odstránením ohraničenia.

 Ukážkový kód v Befunge-93 
Technika usmerňovania ukazovateľa šípkami demonštruje generátor náhodných čísel. Inštrukcia ? posiela ukazovateľ náhodným zo štryoch základných smerov. Keď príde na číslo, dá ho na zásobník. Potom príde na inštrukciu . a vypíše vrch zásobníka. Keďže tu nie je inštrukcia @ na ukončenie programu, bude produkovať nekonečnú postupnosť čísel od 1 do 9.

 vv  <      <
     2
     ^  v<
  v1<?>3v4
     ^   ^
 >  >?>  ?>5^
     v   v
  v9<?>7v6
     v  v<
     8
  .  >  >   ^
 ^<
 Zoznam inštrukcií Befunge-93 

 0-9 Daj čísla na zásobník + Sčítanie: Zo zásobníka vyhoď a a b, a pridaj a+b - Odčítanie: Zo zásobníka vyhoď a a b, a pridaj b-a * Násobenie: Zo zásobníka vyhoď a a b, a pridaj a*b / Celočíselné delenie: Zo zásobníka vyhoď a a b, a pridaj b/a, zaokrúhlené dole. Ak je a nula, spýta sa užívateľa na výsledok. % Zvyšok po celočíselnom delení: Zo zásobníka vyhoď a a b, a pridaj zvyšok po celočíselnom delení b a a. Ak je a nula, spýta sa užívateľa na výsledok. ! Logická negácia(NOT): Vyhoď zo zásobníka číslo. Ak je to nula, pridaj 1 na zásobník, inak pridaj 0. ` Znamienko väčšie: Vyhoď a a b, pridaj 1 ak b>a, inak 0. >  Zmeň smer doprava <  Zmeň smer doľava ^  Zmeň smer hore v  Zmeň smer dole ? Zmeň smer na náhodný _ Vyhoď číslo zo zásobníka. Ak je to 0, zmeň smer doprava, inak doľava. | Vyhoď číslo zo zásobníka. Ak je to 0, zmeň smer dole, inak hore. " Zapni stringový mód: Každá ďalšia inštrukcia je pridávaná na zásobník ako jej ASCII hodnota. Toto platí až po najbližšiu inštrukciu " :  Zduplikuj vrch zásobníka. \  Vymeň vrchné dve hodnoty na zásobníku. $  Vyhoď vrch zásobníka. .  Vyhoď vrch zásobníka a vypíš ho ako číslo. , Vyhoď vrch zásobníka a vypíš znak, ktorého ASCII hodnota je dané číslo. #  Trampolína: Preskoč naslednovú inštrukciu. p Volanie "put" (vlož): Vyhoď y, x a v, v programe zmeň znak na pozícii (x,y) na znak s ASCII hodnotou v. g Volanie "get" (získaj): Vyhoď y and x, na zásobník pridaj ASCII hodnotu znaku na tej pozícii v programe. &  Vypítaj si od užívateľa číslo a pridaj ho na zásobník. ~ Vypítaj si od užívateľa číslo a pridaj nazásobník znak s tou ASCII hodnotou. @  Ukonči program

 Pozri aj 
 brainfuck
 Carnage Heart - Podobný jazyk pre programovaciu hru na playstation.
 intercal
 whitespace

 Externé odkazy 
 Esoteric languages wiki
 Official Funge-98 Specification 
 Cat's Eye Technologies, stránka autora

Kategória:Programovacie jazyky