INTERCAL: Un langage plein d’humour

INTERCAL est une parodie de langage de programmation. Crée par deux étudiants de l’université de Princeton en 1972, INTERCAL est conçu comme une blague pour se moquer de certains aspects de la programmation des années 70.

La documentation officielle est pleine de dérisions, comme le choix du nom donné au 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 »”.

INTERCAL-72 (la version originale d’INTERCAL) connaissait seulement quatre types: le « spot » (entier 16-bit représenté par un .), le « double spot » (entier 32 bits représenté par un : ), la « queue » (tableau d'entiers 16 bits représenté par une ,), et l’hybride (tableau d'entiers 32 bits représenté par un ;).

De même, il y a seulement cinq opérateurs : INTERLEAVE (“intercaler”) / MINGLE (“mélanger”), SELECT (“sélectionner”), AND (“et”), OR (“ou”), XOR (“ou exclusif”).

Les commandes commencent toutes par un ‘identificateur de commande’ ; en INTERCAL-72, ceci peut être DO, PLEASE, ou PLEASE DO ; sachant qu’elles ont toutes les trois la même signification.

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, celui-ci ne compilera pas, le compilateur prétextant que le code n’est pas assez poli. En revanche, s’il est trop présent, ça ne marchera pas non plus, le compilateur considérant le code trop poli.

Certaines opérations, très faciles à réaliser dans d’autres langages, sont souvent très fastidieuses à écrire en INTERCAL. C’est un souhait des auteurs, simplement parce « qu’une personne dont le travail est incompréhensible est tenue en haute estime ». Ainsi, la conception d’INTERCAL force quasiment tout code à être illisible, comme l’atteste l’implémentation de « Hello, World! » :

1        DO ,1 ← #13
2 PLEASE DO ,1 SUB #1 ← #238
3 DO ,1 SUB #2 ← #108
4 DO ,1 SUB #3 ← #112
5 DO ,1 SUB #4 ← #0
6 DO ,1 SUB #5 ← #64
7 DO ,1 SUB #6 ← #194
8 DO ,1 SUB #7 ← #48
9 PLEASE DO ,1 SUB #8 ← #22
10 DO ,1 SUB #9 ← #248
11 DO ,1 SUB #10 ← #168
12 DO ,1 SUB #11 ← #24
13 DO ,1 SUB #12 ← #16
14 DO ,1 SUB #13 ← #162
15 PLEASE READ OUT ,1
16 PLEASE GIVE UP

La première ligne de ce code indique que l’on crée un tableau d’entiers de 16 bits contenu dans ,1 et composé de 13 éléments (# introduit un littéral et <- est l’opérateur d’assignation). Puis les lignes 2 à 14 remplissent le tableau en suivant ce schéma: DO tableau SUB #(indice du tableau) <- #(code du caractère). Ainsi, on insère chaque caractère de la phrase “Hello, World!” à un indice SUB (subscript en anglais) précis du tableau ,1. Enfin, on retourne le tableau rempli et on laisse la main aux lignes 15 et 16.

Pour conclure, selon le manuel d’INTERCAL, “l’objectif en concevant INTERCAL était de n’avoir aucun antécédent”. De par son originalité et sa complexité, on peut dire que les auteurs ont atteint leur but !

--

--