Befunge

Befunge
Programspråk Redigera Wikidata
Esoteriskt programmeringsspråk, programmeringsspråk Redigera Wikidata
Tillkomst1993 Redigera Wikidata
Influerad avForth, Brainfuck, FALSE Redigera Wikidata
Prog­ram­me­rings­pa­ra­digmesoterisk programmering Redigera Wikidata
Officiell webbplatscatseye.tc/node/Befunge-93.html Redigera Wikidata

Befunge är ett stack-baserat esoteriskt programspråk med den ovanliga egenskapen att instruktionerna är ordnade i ett tvådimensionellt fält. Instruktionspekaren kan därför gå i fyra olika riktningar (uppåt, nedåt, vänster eller höger) och kan byta riktning vid utsatta pilar eller villkor.

Befunge kan också vara självmodifierande i och med att man under körning kan ändra instruktioner eller data i celler med hjälp av instruktionerna p och g.

Språket har också sagts vara Turingkomplett, men det är inte bevisat.

Historia

Originalspecifikationen Befunge-93 skapades av Chris Pressey, 1993. Syftet var att skapa ett programspråk som var så svårt som möjligt att kompilera. Notera att det är mycket lätt att göra en interpretator för koden men näst intill omöjligt att kompilera till maskinkod. Ett flertal nyare versioner av Befunge-93 har uppkommit under åren. Däribland finns den mer populära Funge-98 som klarar av ett större fält (80x24 är gränsen i Befunge-93), multipla instruktionspekare och en, två eller tre dimensioner istället för originalets två dimensioner.

Exempelkod

Hello World

Följande kodstycke är det klassiska Hello World-exemplet.

 >              v
 v"Hello World!"<
 v,<
 >:|
   @

Bubblesort

Bubblesort är en vanlig algoritm för att sortera en lista. Denna implementation sorterar heltal som matas in från tangentbordet. Det här exemplet är något mer komplext och visar att Befunge kan vara i klass med Brainfuck när det gäller både att läsa och skriva kod.

 V    >v>+v> >v>v>g1-v>v>v>v>v>v>.2v  
  >+\:| 1 2  $3300   3g352g14052^g<5  
  *v:<  g 0p  0gg^3_v0+02*0+:p2>*+^*  
 321 ^ <0 p0  g\>2v:3g*g-+1:-:^<>v@,  
 55-v < ^< 4  2^_         ^11> |+g,  
 5210  >v2 p  5  v<`02221pv<^g<2*.*  
 *\02>:|\p 0  >v:→^g-5-g30 >v05225  
 *0p0&v<2+ ^<^<2-2gv<22200p 404>^>^  
 1g\pg>#5  v3  *15+1 5\53g4>|g^<   < 
 00p$0  2* $:  +\2*- 2g2p10→# ^     
 p1 $2  >^ >^  >^>^  *+*+-g\         
 >^<>^    <   ^ p03< >^>^3>^ >\v     
                                     
              #                      
              ^        p0<<3< $<

Instruktioner

Externa länkar