Befunge
Un article de Wikipédia, l'encyclopédie libre.
Befunge est un langage de programmation exotique réflectif à pile. Il diffère des langages conventionnels par le fait qu'il est arrangé sur une grille à deux dimensions. Des instructions "flèche" dirigent le flux de contrôle à gauche, à droite, en haut, en bas, et des boucles sont construites en envoyant le flux de contrôle dans un cycle.
Sommaire |
[modifier] Histoire
Le langage a été créé par Chris Pressey en 1993, comme tentative de définir un langage aussi difficile à compiler que possible - la commande p
permet le code automodifiant. Toutefois, un certain nombre de compilateurs ont été écrits par la suite. Un certain nombre d'extensions aux spécifications originelles "Befunge-93" existent également, parmi lesquelles Funge-98, qui étend le concept à un nombre arbitraire de dimensions et peut être multi-threadé, avec des compteurs ordinaux multiples opérant de manière simultanée sur le même espace. Les extensions et variantes de Befunge sont appelées "Fungeoids" ou simplement des Funges.
Les spécifications de Befunge-93 restreignent tout programme valide à une grille de 80 instructions horizontalement à 25 instructions verticalement. Toute exécution du programme excédant ces limites se retrouve de l'autre coté de la grille. Un programme Befunge est de cette manière topologiquement équivalent à un tore. Comme un programme Befunge-93 ne peut avoir qu'une unique pile et que son tableau de stockage est limité, le langage Befunge-93 est, contrairement à la plupart des langages, non Turing-complet. Les spécifications Funge-98 fournissent la complétion Turing en enlevant la restriction de taille sur les programmes. Au lieu d'avoir des bords reliés de part et d'autre, Funge-98 fait en sorte que le compteur ordinal suive un modèle surnommé 'Lahey-space" en référence à son créateur, Chris Lahey. Dans ce modèle, la grille se comporte comme un tore de taille finie par rapport à son repliement, tout en lui permettant de s'étendre infiniment.
[modifier] Exemple de code Befunge
La technique d'utiliser des flèches pour changer le flux de contrôle est montrée dans le programme générateur de nombre aléatoire ci-dessous. L'instruction ? envoie le compteur ordinal dans une direction aléatoire.
vv < < 2 ^ v< v1<?>3v4 ^ ^ > >?> ?>5^ v v v9<?>7v6 v v< 8 . > > ^ ^<
Le "Hello World!" classique
> v v ,,,,,"Hello"< >48*, v v,,,,,,"World!"< >25*,@
[modifier] Liste des instructions
0-9 |
Empile ce nombre sur la pile |
+ |
Addition: dépile a et b, puis empile a+b |
- |
Soustraction: dépile a et b, puis empile b-a |
* |
Multiplication: dépile a et b, puis empile a*b |
/ |
Division entière: dépile a et b, puis empile la partie entière de b/a. Si a est nul, demande à l'utilisateur le résultat voulu. |
% |
Modulo: dépile a et b, puis empile le reste de la division entière de b/a. Si a est nul, demande à l'utilisateur le résultat voulu. |
! |
NON logique: dépile une valeur. Si elle est nulle, empile 1; sinon, empile 0. |
` |
Plus grand que: Dépile a et b, puis empile 1 si b>a, sinon 0. |
> |
Déplace vers la droite |
< |
Déplace vers la gauche |
^ |
Déplace vers le haut |
v |
Déplace vers le bas |
? |
Déplace vers une direction aléatoire |
_ |
Dépile une valeur; déplace à droite si valeur=0, à gauche sinon |
| |
Dépile une valeur; déplace en bas si valeur=0, en haut sinon |
" |
Démarre le mode chaine de caractère: empile chaque valeur ASCII jusqu'au prochain " |
: |
Duplique la valeur en sommet de pile |
\ |
Permute les deux valeurs en sommet de pile |
$ |
Dépile une valeur |
. |
Dépile une valeur et l'affiche en tant qu'entier |
, |
Dépile une valeur et l'affiche en tant que caractère ASCII |
# |
Trampoline: saute la cellule suivante |
p |
Dépile y, x et v, puis change les caractères à la position (x,y) dans le programme en le caractère dont le code ASCII est v |
g |
Dépile y et x, puis empile la valeur ASCII du caractère situé à cette position dans le programme |
& |
Demande un nombre à l'utilisateur et l'empile |
~ |
Demande un caractère à l'utilisateur et empile son code ASCII |
@ |
Termine le programme |
[modifier] Liens externes
- Spécifications officielles Funge-98
- Cat's Eye Technologies
- Interpréteur Befunge en Javascript
- WASABI 's A Superbly Asinine Befunge Interpreter (Une Open-Source Befunge93 IDE écrite en Java)