Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


Befunge

Iš Pipedijos - durniausios enciklopedijos.
Jump to navigation Jump to search

Befunge - nuostabi stekinė ir interpretuojama programavimo kalba, kurios adresų erdvė yra ne vienmatė, kaip įprasta, o dvimatė. Šita nelabai natūrali kalbos savybė kalbą paverčia praktiškai nekompiliuojama ir tiesiogiai netransliuojama į jokią kitą kalbą, tačiau kita vertus, suteikia visokiems hakeriams išskirtines natūralaus kalbinio polimorfizmo, o tuo pačiu - ir optimizacijos, ir viso kodo obfuskacijos galimybes, kokių iš principo neturi anei jokia kita kalba.

Befunge kalbą sukūrė toksai Chris Pressey 1993 metais, kai sugalvojo, kad reikia sugalvoti kalbą, kuri viena vertus, būtų pakankamai vizuali, o antra vertus - kardinaliai besikertanti su įprastais programavimo konceptais.

Skirtingai nuo kitų ezoterinių programavimo kalbų, Befunge neįprastumas yra atsirandantis ne iš tyčinio idiotizmo (kaip Intercall) ir ne iš neveikos minimizacijos (kaip Brainfuck), o iš paties koncepto, kur atmintis yra dvimatis masyvas, o komandos jį adresuoja ne tiesiškai, o keisdamos vykdymo kryptį. Todėl Befunge baisiai atrodo tik iš pirmo žvilgsnio, tačiau išties yra labai natūrali ir graži kalba, savo komandomis miglotai primenanti tiesiog vaikiškai paprastą Logo.

Kadangi dėl krypties pokyčio dvimačiame masyve ta pati komanda gali būti panaudojama kelis kartus skirtingose vykdymo sekose, Befunge programų kompiliavimas tampa praktiškai neįmanomu. Situaciją dar labiau apsunkina tai, kad tikslingai numatytas kodo modifikavimas - tam yra skirta komanda "p". Kompleksas iš šių dviejų savybių kompiliavimą padaro netgi teoriškai neįmanomu. Nepaisant to, grubių ir nesąmoningų bandymų sukurti kompiliatorius būta, tačiau tie kompiliatoriai nesugebėdavo palaikyti komandos "p", kaip nesugebėdavo ir pilnai ištransliuoti programų, turinčių bent kiek netiesinę logiką, pvz., kai programų vykdymo eiga keičiasi priklausomai nuo gautų rezultatų ir pan..

Nepaisant to, įmanoma realizuoti JIT tipo kompiliatorių Befunge kalbai, kuris dinamiškai perkompiliuotų einamuoju momentu vykdomas tiesines komandų sekas, kartu korektiškai vykdydamas ir visą Befunge programą. Tačiau tokia kompiliacija korektiškai veikia tik tol, kol nuolat yra vykdomas perkompiliavimas.


Hello World su Befunge

Dėl nuostabaus vizualumo pateikiame čia jums išsyk du Befunge programų pavyzdžius, duodančius tą patį Hello World rezultatą:

Pirmas Hello World

>              v
v  ,,,,,"Hello"<
>48*,          v
v,,,,,,"World!"<
>25*,@

Antras Hello World

>25*"!dlrow ,olleH":v
                 v:,_@
                 >  ^