On m’a souvent posé la question de comment je faisais pour comprendre ce que j’écrivais quand je programmais. Pour un développeur, lire un programme en PHP ou autre devient, avec l’expérience, aussi facile que lire un livre. Mais dans certains langages, ça se complique ! Voici un aperçu des langages les plus improbables qui soient.
Préambule
Il faut tout d’abord que vous sachiez de quoi je vais parler. Dans notre domaine, un nouveau type de langage de programmation a fait son apparition il y a une trentaine d’années : les langages ésotériques (ou exotiques). Ces langages sont imaginé pour rendre la programmation la plus difficile et incompréhensible qui soient. Cependant, bien qu’étant complètement illisible, ils restent ce qu’on appelle “Turing-Complet”, c’est à dire qu’ils permettent de représenter toutes les fonctions calculables au sens de Turing (pour ceux que j’ai déjà perdu, un petit peu de culture pendant votre pause café : http://fr.wikipedia.org/wiki/Turing-complet / http://fr.wikipedia.org/wiki/Machine_de_Turing)
Inutile, donc forcément indispensable, ces langages se rapprochent un peu de la poésie du non-sens. Voici donc un aperçu de langages exotiques pour vous rendre compte de la folie de certains développeurs !
Intercal
Le premier des langages exotiques a fait son apparition en 1972. Crée par 2 étudiants de l’université de Princeton, il a été crée comme une blague pour se moquer de certains aspects de la programmation des années 70. Leur documentation officielle regorge de perles, comme le choix du nom donnée à leur langage : “Le nom complet du compilateur est « Langage compilé n’ayant aucun acronyme prononçable », ce que, pour d’évidentes raisons, nous abrégerons en « INTERCAL »”.
Une des particularités de ce langage est la présence du mot-clé “PLEASE”. Si ce mot clé n’apparaît pas suffisamment dans le code source, le compilateur refusera de faire son travail (compiler, donc), prétextant que le code n’est pas assez poli. En contrepartie, si il est trop présent, il rejettera aussi la compilation, le considérant trop poli et de faire de la lèche …
Un petit exemple de ce que donne notre désormais célèbre “Hello, world!” en INTERCAL :
DO ,1 ← #13 PLEASE DO ,1 SUB #1 ← #238 DO ,1 SUB #2 ← #108 DO ,1 SUB #3 ← #112 DO ,1 SUB #4 ← #0 DO ,1 SUB #5 ← #64 DO ,1 SUB #6 ← #194 DO ,1 SUB #7 ← #48 PLEASE DO ,1 SUB #8 ← #22 DO ,1 SUB #9 ← #248 DO ,1 SUB #10 ← #168 DO ,1 SUB #11 ← #24 DO ,1 SUB #12 ← #16 DO ,1 SUB #13 ← #162 PLEASE READ OUT ,1 PLEASE GIVE UP
Brainfuck
Sans doute le plus célèbre des langages exotiques, le Brainfuck, comme son nom l’indique, a pour seul objectif d’être le plus minimaliste possible, et donc de retourner (sans mauvais jeu de mot, vous me connaissez) votre cerveau pour essayer de le comprendre.
Crée par Urban Müller en 1993, ce langage ne contient que 8 instructions, représentées par les symboles :
- >
- <
- +
- –
- .
- ,
- [
- ]
Et c’est tout.
Je vous épargne les explications de ces instructions (mais je vous donne un petit lien pour me faire pardonner).
Vous voulez afficher un « Hello World! » à l’écran. Mais rien de plus simple voyons !
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Une variante que j’affectionne plus particulièrement est le Ook!, qui est conçu pour être parfaitement lisible par un orang-outan :
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook? Ook! Ook. Ook? Ook?
Malbolge
« Vous qui entrez, abandonnez toute espérance ». Ce passage de la Divine Comédie de Dante Alighieri est parfaitement adapté pour décrire ce langage. Il porte le nom du 8è cercle des Enfers du même ouvrage, et est décrit ainsi : « Il est en enfer un lieu appelé Malebolge, tout de pierre couleur de fer, comme le cercle qui l’entoure. Droit au milieu de la campagne maligne, s’ouvre béant un puits large et profond, dont, en son lieu, on dira la structure. L’espace, de forme ronde, entre le puits et la haute rive solide, était, en descendant au fond, divisé en dix retranchements. Tels que les châteaux autour desquels on creuse, pour la défense des murs, de nombreux fossés, qui rendent sûre la partie qu’ils ceignent, tels paraissaient là ces retranchements ; et comme, en de pareilles forteresses, des seuils à la rive sont de petits pouls, ainsi du pied du précipice partent des rochers, qui coupent les remparts et les fossés jusqu’au puits, où tronqués ils s’arrêtent. «
Vous êtes prévenu : le Malbolge est conçu pour être le pire et le plus difficile des langages de programmation possible. Il était tellement difficile qu’il a fallu 2 ans au premier programme Malbolge pour apparaitre, et n’a même pas été écrit par un humain …
Un exemple de programme Malbolge qui affiche notre désormais célèbre « Hello World! » :
(=<`:9876Z4321UT.-Q+*)M'&%$H"!~}|Bzy?=|{z]KwZY44Eq0/{mlk** hKs_dG5[m_BA{?-Y;;Vb'rR5431M}/.zHGwEDCBA@98\6543W10/.R,+O<
Diabolique. Il n’y a pas d’autre mot. De quoi rendre fou la majorité des développeurs !
LOLCODE
Un de mes favoris. Inspiré de l’argot Internet et de nos fameux Lolcat, le LOLCODE est conçu pour être facile et amusant à écrire. Par exemple, pour implémenter une simple boucle affichant les nombres de 1 à 10, voici le code LOLCODE :
HAI CAN HAS STDIO? I HAS A VAR IM IN YR LOOP UP VAR!!1 VISIBLE VAR IZ VAR BIGGER THAN 10? KTHX IM OUTTA YR LOOP KTHXBYE
HAI (« Hi ») débute le code, CAN HAS (« Can I have ») demande d’importer la librairie Stdio, I HAS A déclare une variable appelé VAR, IM IN YR LOOP (« I’m in your loop ») débute la boucle, UP VAR!!1 incrémente notre variable VAR de 1, VISIBLE l’affiche, IZ VAR BIGGER teste si la valeur est plus grande que 10 et l’instruction KTHX (« Okay, thanks ») équivaut à un break standard. IM OUTTA YR LOOP (« I’m out of your loop ») finit la boucle et KTHXBYE (« Okay, thanks, bye ») termine le programme.
Facile à lire pour un habitué de l’Internet, ce langage a même été décliné en Doge, le fameux Meme Internet représentant un Shiba Inu :
OMGROFL
Un autre langage venant de la culture Internet, le OMGROFL est un langage exotique reprenant un grand nombre d’expressions bien connu des amateurs fréquentant les bas-fonds du net, comme :
- lol
- wtf
- rofl
- lmao
- brb
- liek
- uber
- rtfm
- …
Pour afficher notre fameux « Hello World! » (encore lui !), voici le code Omgrofl :
w00t a Hello, World! program by poiuy_qwert lol iz 72 rofl lol lol iz 101 rofl lol lol iz 108 rofl lol rofl lol lool iz 111 rofl lool loool iz 44 rofl loool loool iz 32 rofl loool loool iz 87 rofl loool rofl lool lool iz 114 rofl lool rofl lol lol iz 100 rofl lol lol iz 33 rofl lol stfu
Dark
Le langage Dark n’a qu’une vocation : être le langage le plus diabolique possible. Même les noms de fonctions de ce programme sont fondamentalement mauvaise : $suicide, qui force une valeur à se suicider mais laisse son corps, $void qui nettoie tous les corps, $genocide et $omnicide, $chaos qui affecte une valeur aléatoire selon les lois de la théorie du chaos, $tear qui arrache le premier caractère d’un message … Toutes les méthodes de ce langage font référence à la mort, au chaos et à l’entropie.
Une autre particularité est que chaque programme possède un paramètre initial, une santé mentale, fixé à 100. A chaque erreur de syntaxe, l’interpréteur Dark diminue la santé mentale de 1. A 0, l’interpréteur devient fou et compile n’importe comment. De quoi sérieusement douter de la santé mentale de son créateur !
+hello hell hello$twist sign hws hello$twist stalker io io$stalk io$personal hws$scrawl " Hello, world! hws$read io$echo hello$empty hello$apocalypse
Chef
Sans doute l’un des plus étranges, Chef est un langage de programmation dont le code source doit être écrit sous la forme … d’une recette de cuisine. Les spécifications sont plutôt complexes à expliquer, donc je vous laisse le lien pour jeter un coup d’œil.
J’allais quand même pas vous laisser sans notre petit Hello World!, dont voici la recette !
Ingredients. 72 g haricot beans 101 eggs 108 g lard 111 cups oil 32 zucchinis 119 ml water 114 g red salmon 100 g dijon mustard 33 potatoes Method. Put potatoes into the mixing bowl. Put dijon mustard into the mixing bowl. Put lard into the mixing bowl. Put red salmon into the mixing bowl. Put oil into the mixing bowl. Put water into the mixing bowl. Put zucchinis into the mixing bowl. Put oil into the mixing bowl. Put lard into the mixing bowl. Put lard into the mixing bowl. Put eggs into the mixing bowl. Put haricot beans into the mixing bowl. Liquefy contents of the mixing bowl. Pour contents of the mixing bowl into the baking dish. Serves 1.
Whenever
Ce langage exotique ne l’est pas du fait de sa syntaxe relativement simple, mais par son fonctionnement : le langage n’a aucun sens de l’urgence, et fais les choses quand il le sent, et dans l’ordre qu’il veut … Les lignes de codes sont toujours exécuté sauf quand le programme le décide. Pas besoin de déclarer de variable, le programme s’en fiche. Un vrai adolescent en quelque sorte !
Le programme va considérer les lignes de code comme une « To-Do List », et ainsi les exécuter comme il le souhaite. Un peu comme moi et ma liste de bonnes résolutions !
Précisions
La liste est bien plus longue, et j’ai volontairement passé des langages ne rentrant pas dans mon petit bloc de code, comme le Whitespace (où l’on code uniquement avec des espaces, des tabulations et des sauts de ligne), le Velato (où le code est représenté sous forme d’une partition de musique) ou le Shakespeare (où le code prend la forme … d’une pièce de théâtre).
Notez bien que ces langages, aussi farfelues soient-ils, ne sont quasiment pas utilisé. Ils ont été élaborés comme une blague, un défi intellectuelle, ou autre. Aucun développeur sain d’esprit ne programmerait dans la vie de tous les jours avec de telles langages. En outre, ce sont souvent des langages compilés, et qui réclame une version très spécifique de tel ou tel compilateur.
Alors maintenant, je peux vous assurer, que faire du PHP ou autre à côté, c’est équivalent à lire un album de Martine !