• Home
  • Nous contacter

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab

Le blog d'Adfab
Outils

Les langages de programmation WTF

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 :

ku-xlarge

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 !

utf8

18/03/2014 66 MIN READ BY: Guillaume DEPLANQUE 1 COMMENT
SHARE
LIRE LA SUITE

Guillaume DEPLANQUE

Calculez la bande passante disponible en javascript

Cordova et limites des web workers

VOUS POURRIEZ AIMER

Outils Industrialiser son environnement de développement

Outils Oh-my-zsh tapez moins pour écrire plus

Outils Photoshop et la perfection au pixel près

Outils Polymer – partie 1

L'actualité AdFab Outils Migration d’un projet de SVN à GIT

Outils Le Second Screen, complément a la télévision?

A propos d’Adfab

Nous sommes un studio de production digitales et d’innovation digitales au service des agences et des annonceurs
Nous recherchons le scintillement dans les regards et le plaisir de réalisations sur-performantes
Nous sommes techno-agnostiques
Nous sommes Adfab

Le blog d'Adfab
Copyright © 2018 Adfab Connect