Befunge

Befunge

Befunge est un langage de programmation exotique réflexif à 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

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 côté 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.

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*,@

Une version plus idiomatique de "Hello World!" Befunge (en utilisant une 0gnirts)

91+"!dlrow,olleH">:#,_@

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

Liens externes


Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article Befunge de Wikipédia en français (auteurs)

Игры ⚽ Поможем решить контрольную работу

Regardez d'autres dictionnaires:

  • Befunge — Saltar a navegación, búsqueda Befunge es un lenguaje de programación esotérico, funge oide, reflexivo y basado en pila. Difiere de los lenguajes convencionales en que los programas están dispuestos en una parrilla bidimensional. Las instrucciones …   Wikipedia Español

  • Befunge — ist eine esoterische Programmiersprache von Chris Pressey, die ähnlich wie Forth Stack orientiert ist. Die Programme basieren auf einem 2 dimensionalen Schema. Der Quelltext besteht aus ASCII Zeichen in einer 80×25 Zeichen großen Anordnung. Chris …   Deutsch Wikipedia

  • Befunge — is a stack based, reflective, esoteric programming language. It differs from conventional languages in that programs are arranged on a two dimensional grid. Arrow instructions direct the control flow to the left, right, up or down, and loops are… …   Wikipedia

  • Befunge — Befunge  стековый эзотерический язык программирования. Считается двумерным, так как программа на Befunge записывается в таблицу со сшитыми краями (тор), по которой в различных направлениях перемещается интерпретатор, исполняя команды,… …   Википедия

  • Befunge — es un lenguaje de programación esotérico diseñado por Chris Pressey en 1993. La programación resulta puramente visual y el código es una imagen 2d compuesta por caracteres sobre la cual el puntero de ejecución se desplaza en diferentes… …   Enciclopedia Universal

  • Befunge-93 — …   Википедия

  • Esoteric programming language — An esoteric programming language (sometimes shortened to esolang) is a programming language designed as a test of the boundaries of computer programming language design, as a proof of concept, or as a joke. There is usually no intention of the… …   Wikipedia

  • Liste von Hallo-Welt-Programmen/Sonstige — Dies ist eine Liste von Hallo Welt Programmen für grafische Benutzeroberflächen, Web Technologien, exotische Programmiersprachen und Textauszeichnungssprachen. Weitere Beispiele für gebräuchliche Programmiersprachen sind unter Liste von Hallo… …   Deutsch Wikipedia

  • Weird Programming — Esoterische Programmiersprachen sind Programmiersprachen, die nicht für den praktischen Einsatz entwickelt wurden, sondern ungewöhnliche Sprachkonzepte umsetzen. Eine einfache Bedienung ist selten, teilweise werden Sprachen konzipiert, um… …   Deutsch Wikipedia

  • Эзотерические языки программирования — вид языков программирования, не предназначенных для практического применения. Образец компьютерного юмора. Эзотерические языки придумываются для развлечения, часто они пародируют «настоящие» или являются абсурдным воплощением «серьёзных»… …   Википедия

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”