Langages informatiques étranges : guide de terrain du hacker

Pourquoi construisons-nous des radios ou des horloges alors que vous pouvez les acheter ? Pourquoi faisons-nous clignoter les LED sans raison apparente ? Pourquoi essayons-nous d’extraire une image supplémentaire de nos cartes vidéo ? Nous ne savons pas pourquoi, mais nous le savons. C’est peut-être la même attitude que la plupart des gens auraient lorsqu’ils se renseignent sur les esolangs – langages de programmation ésotériques – nous ne savons pas pourquoi les gens les créent ou les utilisent, mais ils le font.

Nous ne parlons pas de langages grand public qui agacent les gens comme Lisp, Forth ou VBA. Nous ne parlons pas de langages plus anciens qui semblent cryptés aujourd’hui comme APL ou Prolog. Nous parlons de langues qui sont faites pour être… eh bien… étranges.

INTERCAL

Nous devons commencer par le début. INTERCAL. Cela a commencé comme une blague en 1972 et l’acronyme est prétendument pour Compiler Language With No Pronounceable Acronym. Cependant, il n’y a eu aucune mise en œuvre réelle jusqu’en 1990 environ. Il y en a maintenant deux : C-INTERCAL et CLC-INTERCAL.

Puisque INTERCAL est une parodie, il fait des choix très étranges. Par exemple, les opérateurs au niveau du bit comme AND fonctionnent avec deux arguments, mais l’un des arguments est inversé. Autrement dit, le bit supérieur d’un opérande correspond au bit inférieur du deuxième opérande. Dans un clin d’œil à la convention sociale, il existe un modificateur connu sous le nom de S’IL VOUS PLAÎT que vous devriez parfois utiliser lorsque, par exemple, la lecture de données comme dans « VEUILLEZ LIRE DANS ». Si vous ne l’utilisez pas assez souvent, la compilation échouera en vous avertissant que le programme n’est pas suffisamment poli. Cependant, si vous l’utilisez trop souvent, vous obtiendrez également une erreur indiquant que votre programme est excessivement poli.

À l’origine, l’implémentation utilisait EBCDIC, elle utilise donc certains caractères qui n’apparaissent pas sur les systèmes ASCII 7 bits conventionnels. Cela a forcé certaines substitutions de caractères et maintenant, avec Unicode, certaines versions autoriseront les caractères à l’ancienne si vous les préférez. Le manuel INTERCAL renomme presque tous les caractères spéciaux pour plus de confusion. Un guillemet simple est une « étincelle » et le signe égal est un « demi-maille ». Seule l’esperluette reste indemne.

Veulent en savoir plus? Fais attention à ce que tu souhaites.

FAUX et Brainf ** k

Avance rapide jusqu’en 1993 avec la naissance de FALSE, un langage de pile conçu pour être illisible. En guise de consolation, le compilateur n’avait besoin que de 1 024 octets. Cela a inspiré un langage encore plus minimal, Brainf**k. Il n’y a que huit caractères nécessaires dans un programme BF.

Brainf ** k a engendré de nombreux langages similaires comme Befunge et JSF ** k. Si vous n’avez entendu parler que d’une seule langue dans cet article, c’est probablement celle-ci.

À quoi cela ressemble-t-il? Extrait du Wiki de la langue ésotérique :

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

C’est Hello World, au fait !

Logique combinatoire binaire et Unlambda

Nous connaissions autrefois un professeur d’université qui avait l’habitude de dire « maximiser la variable booléenne » quand il voulait dire « mettre le bit à 1 ». Nous pensons qu’il aimerait BCL. Si vous voulez exprimer vrai en BCL, vous écrivez K(KK). Faux? K(K(SK)). C’est pire à partir de là. Voici XOR : S(S(S(SS)(S(S(SK)))S))K.

Cependant, c’est binaire, donc S est vraiment 01 et K est 00 et la parenthèse gauche est un seul 1. Super étrange et a apparemment une application dans certaines études de mathématiques théoriques.

Il en existe plusieurs versions, toutes légèrement différentes. Unlambda, par exemple, utilise beaucoup de caractères différents. Voici un programme « chat » dans Unlambda :

```s`d`@|i`ci

Espace blanc

La plupart des langages de programmation ne se soucient pas des espaces blancs et vous pouvez les utiliser librement ou non. C’est-à-dire qu’en C on peut écrire :

x=10*2 ;

ou:

x = 10

*

2 ;

Le compilateur s’en moque. Python est différent. Les niveaux d’indentation sont importants. Whitespace pousse cela à l’extrême. Le programme entier est écrit en tabulation, espace et saut de ligne, et tout est ignoré. Cela peut sembler étrange, mais il est intéressant de noter que cela vous permet de cacher un programme dans un autre programme – tant qu’il ne s’agit pas d’un programme Python.

Le premier caractère d’espace vous indique ce que signifie le suivant. Par exemple, toutes les séquences de contrôle de flux commencent par un saut de ligne. La manipulation de la pile commence par un espace. Un onglet et un saut de ligne introduisent les opérations d’E/S. Un onglet et un espace sont pour les mathématiques et deux onglets gèrent l’accès au tas.

Les nombres pairs sont en binaire où un espace est positif, une tabulation est négative. Après cela, un espace vaut 0 et une tabulation vaut 1.

LOLCODE

Alors que les espaces blancs sont peut-être encore moins compréhensibles que Brainf ** k, certaines langues essaient d’imiter des choses lisibles particulières. Exemple : LOLCODE qui a des programmes qui correspondent aux légendes des mèmes LOLCAT. Apparemment, les LOLCAT étaient la principale raison pour laquelle Internet a été inventé, après tout.

Pourquoi supposons-nous que les chats parlent comme ça ? Nous n’en sommes pas sûrs, mais nous avons le sentiment que le récit à l’intérieur du cerveau d’un vrai chat ressemble plus à : « Il est certainement difficile de trouver de bons serviteurs de nos jours ! » Les anciens Égyptiens adoraient les chats et les chats ne l’ont pas oublié.

Voici un programme pour compter jusqu’à 10 :

HAI 1.3
IM IN YR loop UPPIN YR var TIL BOTH SAEM var AN 10
VISIBLE SMOOSH var AN " " MKAY!
IM OUTTA YR loop
KTHXBYE

Rock star

Peut-être que vous n’êtes pas fan des LOLCATs mais que vous aimez la musique rock. Eh bien, Rockstar est le langage de programmation qu’il vous faut. Les noms de variables peuvent être presque n’importe quoi et les données ont des types comme « mystérieux ».

Nous supposons que pour être un bon codeur dans cette langue, vous devez faire pousser vos cheveux, marmonner et posséder au moins un vêtement en spandex. À bien y penser, cela décrit pas mal de programmeurs que nous connaissons.

Parmi les choses intelligentes qu’il fait, les nombres sont exprimés dans la longueur des mots, et de nombreuses constructions de programmation ont des corrélats « évidents » en anglais. Ainsi, « Hate is water » attribue 5 à la variable « Hate ».

Voici Fizbuzz écrit en Rockstar :

Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart

Give back your heart

Desire is a lovestruck ladykiller
My world is nothing 
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top

If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top

If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top

Whisper my world

Shakespeare

Si la musique rock est trop banale pour vous, il y a toujours SPL, le langage de programmation de Shakespeare. Comme le barde, le langage de programmation n’est pas connu pour son économie de mots.

Les nombres sont particulièrement délicats en SPL. Les noms ont une valeur de -1 ou 1 selon leur gentillesse (par exemple, les arbres et les fleurs valent 1 tandis que les cochons valent -1). Les adjectifs se multiplient par 2. Ainsi, « menteur stupide orphelin de père gros lâche malodorant à demi-esprit » est -1 (lâche) * 2 * 2 * 2 * 2 * 2 * 2 = -64.

Autour de la fontaine à eau Hackaday, nous avons pensé à écrire une nouvelle version de ce langage où tous les programmes prennent la forme d’une conversation entre le barde et Sir Francis Bacon. Nous l’appellerons Shake ‘n Bake.

Voici juste une partie du programme de script Hello World de 89 lignes :

The Infamous Hello World Program.

Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.


Act I: Hamlet's insults and flattery.

Scene I: The insulting of Romeo.

[Enter Hamlet and Romeo]

Hamlet:
You lying stupid fatherless big smelly half-witted coward!
You are as stupid as the difference between a handsome rich brave
hero and thyself! Speak your mind!

You are as brave as the sum of your fat little stuffed misused dusty
old rotten codpiece and a beautiful fair warm peaceful sunny summer's
day. You are as healthy as the difference between the sum of the
sweetest reddest rose and my father and yourself! Speak your mind!

You are as cowardly as the sum of yourself and the difference
between a big mighty proud kingdom and a horse. Speak your mind.

Speak your mind!

[Exit Romeo]

Scene II: The praising of Juliet.

[Enter Juliet]

Hamlet:
Thou art as sweet as the sum of the sum of Romeo and his horse and his
black cat! Speak thy mind!

Malbolgé

Malbolge a été conçu pour être difficile à utiliser. Apparemment, le premier programme à imprimer hello world nécessitait qu’un autre programme informatique recherche tous les programmes possibles jusqu’à ce qu’il trouve la bonne séquence. Si vous ne reconnaissez pas la référence, Malbolge est une faute d’orthographe de Malebolge, le 8e cercle de l’enfer chez Dante Enfer.

Malbolge utilise une machine virtuelle de base trois. Il n’y a que quelques instructions, y compris la rotation à droite et l’opération « folle » qui change les bits d’une manière définie dans une table et – pour autant que nous sachions – n’a aucun rapport avec une opération mathématique normale, et est essentiellement un cryptage. Malbolge est si horrible qu’il y a des tentatives comme Dis qui ont été faites pour être « un peu moins pervers ».

Piet

Avez-vous déjà remarqué que dans les films de science-fiction, les extraterrestres communiquent presque toujours en utilisant une sorte de son que nous pouvons entendre ? Soit ils parlent anglais, soit ils parlent quelque chose qui ressemble à Andy Kaufmann faisant un personnage. Vous voyez rarement des extraterrestres qui font clignoter des lumières, émettent des phéromones ou émettent des ondes radio à basse fréquence pour communiquer. Toutes les langues de cette liste utilisent des caractères de quelque sorte que ce soit sous forme de chiffres, de symboles ou de mots. Sauf Piet. Les programmes de Piet sont de l’art abstrait du genre créé par Piet Mondrian.

Une seule unité de code est un codel et des blocs de codels ont la même couleur. Le « compteur de programme » peut se déplacer en deux dimensions, bien sûr. Si Piet interprétait, par exemple, le rouge comme un ajout et le vert comme un saut, alors ce serait une autre forme de symboles. Mais ce n’est pas comme ça que ça marche. Au lieu de cela, l’interprète regarde le changement de teinte et d’intensité entre les couleurs. Ainsi, une étape de teinte et aucun changement de luminosité est une opération d’ajout. Mais si la couleur devient plus foncée, c’est soustraire. Voici bonjour tout le monde à Piet. Ne nous demandez pas de vous l’expliquer !

Pourquoi? Pourquoi?

Cela ne vaut pas la peine de se demander pourquoi les gens créent ou utilisent ces langues. Pourquoi les gens achètent-ils des pierres pour animaux de compagnie ? Pourquoi les gens collectionnent-ils les timbres-poste ? Ils font juste. Pourtant, apprendre un peu l’une de ces langues originales peut vous faire sortir de votre zone de confort et ce n’est pas toujours une mauvaise chose. En outre, beaucoup de gens diraient que l’écriture d’un assembleur pour un PIC ou un AVR n’est que légèrement moins énigmatique que Malbolge et de nombreux lecteurs de Hackaday le font.

Quant à nous, nous nous en tiendrons à des langages de programmation plus pratiques. Forth semble énigmatique, mais il est génial et peut créer des programmes très lisibles entre les mains d’un expert. Cependant, nous plongeons occasionnellement dans ces langues pour le plaisir.