Powered By Blogger

Rechercher sur ce blogue

mercredi 14 août 2019

Quel est le langage de programmation qui est tellement compliqué que seul un génie peut arriver à programmer avec ?




Aurélien Emer, étudiant en informatique


Réponse originale : Quel est le langage de programmation qui est tellement compliqué que seul un génie peut arriver à programmer avec ?

Le langage de programmation Malbolge est réputé pour cela. Voilà à quoi ressemble le très classique Hello, world! en Malbolge :
  1. (=<`#9]~6ZY32Vx/4Rs+0No-&Jk)"Fh}|Bcy?`=*z]Kw%oG4UUS0/@-ejc(:'8dc

Soyons clair, ce langage a été conçu pour être difficile et il n'a absolument aucun intérêt dans le développement d'un logiciel.
Malbolge a été créé en 1998. C'est un langage interprété, c'est-à-dire que son créateur a développé un petit logiciel à qui on donne des programmes Malbolge et qui les exécute sans avoir besoin de les compiler.
Il y a une spécification de Malbolge — c'est ce qui permet de savoir comment écrire un programme dans ce langage, mais elle utilise des concepts volontairement alambiqués. Par exemple, Malbolge utilise une arithmétique ternaire, au lieu du binaire auquel les informaticiens sont habitués.
Pas de if, pas de while, Malbolge utilise des instructions (un peu comme l'assembleur), il y en a huit en tout. Les instructions sont représentées par des numéros (4, 5, 23, 39, …).

On ne peut pas directement utiliser le numéro d'une instruction (noté num_istr ici), ce serait trop simple. Il faut utiliser un autre numéro (p. ex. c) :
num_instr = ([c] + c) % 94
Attention, ça devient pervers. Le morceau [c] signifie qu'on va chercher le contenu de la case mémoire n°c. Autrement dit, les instructions dépendent du contenu de la mémoire, alors que le contenu de la mémoire dépend aussi évidemment des instructions du programme !
Les programmes écrits en Malbolge peuvent s'auto-modifier.

Je vous fais grâce des autres détails du langage. En bonus, voici le programme Malbolge qui écrit les paroles de la chanson « 99 bottles of beer ».

Aucun commentaire: