|||

Si Terry Pratchett avait inventé un langage de programmation, il se serait appelé…

Le pionnier des langages de programmation « pour de rire »

Pour faire suite au billet sur les langages de programmation « WTF », je suis tombé –heureusement, ou malheureusement, allez savoir– après coup sur un article mentionnant un langage appelé INTERCAL.

INTERCAL est un langage de programmation créé en 1972 par deux étudiants de Princeton, Don Woods et James «Jimbo» Lyon, et se voulait être une mise en dérision des travers des langages utilisés à l’époque.

Comme pour le précédent billet, je ne vais pas creuser la question purement technique, car je n’en ai pas le niveau, mais ce que j’ai trouvé intéressant dans INTERCAL, outre qu’il est considéré peu ou prou comme le père des langages de programmation exotiques, c’est que ses auteurs ont eu une approche très pataphysicienne de leur création.

D’ailleurs, là où Alfred Jarry expliquait que la Pataphysique s’écrivait avec une apostrophe pour « éviter un calembour facile », les auteurs d’INTERCAL expliquent l’origine du nom du langage ainsi :

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 ».

Un calembour facile que l’on cherche encore, d’évidentes raisons incompréhensibles. La pataphysique est partout.

L’introduction du manuel original d’INTERCAL, daté de 1973 (disponible en ligne au format PDF), s’ouvre sur cet avertissement surréaliste1 :

Les noms que vous allez vous efforcer d’ignorer sont vrais. Cependant, les événements ont été modifiés de manière significative. Toute ressemblance avec un quelconque langage de programmation représenté ici, vivant ou mort, n’est que pure coïncidence.

Le ton est donné dès l’introduction de la première page ; INTERCAL est une magnifique parodie.

Mais la joyeuse pocharde ne s’est pas arrêtée à un manuel, qui serait déjà en soit un joli travail, car le langage est non seulement fonctionnel, mais a connu des portages récents, dont deux sont encore maintenus actuellement, le C-INTERCAL et le CLC-INTERCAL. Autre diplôme à porter au crédit de ce langage pourtant fait pour n’être pas spécialement utilisable, il est Turing-complet, c’est à dire reconnu comme utilisable dans l’absolu.

Si l’on continue d’explorer les délices du manuel d’INTERCAL, on trouve des assertions proches d’un absurde Monty pythonesque, comme cet avertissement :

Attention ! Ne confondez en aucune circonstance la grille avec l’opérateur d’interpolation, excepté en cas de circonstances pouvant porter à confusion !

On découvre également que les deux auteurs ont su détourner les codes sémantiques déjà bien ancrés parmi les programmeurs. On découvre par exemple que le manuel ne possède pas d’annexes mais des amygdales2.

Les deux auteurs se sont également amusés à rebaptiser les signes classiques de la programmation. On découvre par exemple qu’un point . s’appelle un spot (ou une tâche), le double point : est un double spot, la virgule , est une queue et le point-virgule ; est… un hybride.

Plus prosaïquement, le dièse # est une grille, et, logiquement, le signe égal = est une demi-grille.

Allez, une petite sélection des plus rigolos :

Signe Nom
! Wouah
? Quoi
" Oreilles de lapin
% Double-zéro-sept
- Ver de terre
_ Ver de terre écrasé
~ Zigouigoui
* Splaf
$ Plein d’argent
@ Tourbillon
^ Requin (ou aileron de requin)

Notez que l’esperluette & est le seul caractère à garder son nom d’origine, car comme le soulignent les auteurs ; « Que pourrait-on trouver de plus stupide comme nom ? »

INTERCAL est également un langage dont la structure impose d’être bavard. En effet, il faut être impératif, en commençant sa ligne d’instruction par l’ordre Fait…! (DO), et parfois user de politesse, en commençant une instruction par S’il te plait… (PLEASE). En outre, on finit un programme en demandant simplement au compilateur d’abandonner (PLEASE GIVE UP).

D’après le manuel, l’utilisation du mot-clé PLEASE n’a aucune incidence sur le programme lui-même, mais si le compilateur ne le rencontre pas assez souvent dans le corps du programme, il va considérer le programmeur comme n’étant pas assez poli, et arrêter la compilation sur un message d’erreur3.

Notons que dans la toute première version d’INTERCAL, qui se programmait à l’aide de cartes perforées, les nombres devaient être encodés en toutes lettres, c’est à dire en les épelant et non en utilisant les chiffres arabes, et les retours donnés par le programme ne se faisaient qu’à l’aide de chiffres romains.

En outre, le compilateur (dénommé ick) possède intrinsèquement des comportements étranges. Par exemple, la réaction normale d’un compilateur qui rencontre un élément de code qu’il ne sait pas interpréter est de s’arréter et générer une erreur, permettant au programmeur de localiser et corriger ce qui ne va pas.

De son côté, ick se contente d’ignorer l’erreur. Ce qui rend la chasse au bug particulièrement ardue, mais qui permet une chose elle aussi étonnante ; l’insertion de commentaires au sein du programme se fait n’importe où n’importe comment, pourvu que le compilateur le considère comme une erreur…

C’est absolument n’importe quoi…

Car, finalement, comme le soulignent les deux rigolos dans le manuel4 :

Le principal avantage d’INTERCAL sur les autres langages de programmation réside dans sa stricte simplicité. Il possède peu de capacités et donc peu de restrictions à garder à l’esprit. Puisqu’il s’agit d’un langage excessivement simple à apprendre, on serait porté à penser que c’est un langage idéal pour l’initiation de programmeurs novices. Étonnamment, peut-être, mais le fait est qu’il est plus susceptible de pousser un novice à chercher un autre plan de carrière.

Pour finir, quelques lignes de code en INTERCAL, le classique « Hello world » :

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

Sources :


  1. Traduction personnelle.↩︎

  2. Annexe en anglais se dit « appendice », ce qu’on rapproche en français d’un organe, et pourquoi pas, une amygdale…↩︎

  3. Poussant la facétie à son comble, cette fonctionnalité était volontairement non documentée dans le premier manuel.↩︎

  4. Traduction personnelle.↩︎

Dans les épisodes précédents… Ce qui se lit à mon oreille… Les podcasts du Festival Autres Mondes
Dernières entrées Writever 2024 — Septembre L’éclat de Coquille — Septembre, tome 2 L’éclat de Coquille — Septembre, tome 1 Writever 2024 — Août L’éclat de Coquille — Août, tome 2 L’éclat de Coquille — Août, tome 1 Writever 2024 — Juillet L’éclat de Coquille — Juillet, tome 2 L’éclat de Coquille — Juillet, tome 1 Writever 2024 — Juin L’éclat de Coquille — Juin, tome 2 L’éclat de Coquille — Juin, tome 1 Writever 2024 — Mai L’éclat de Coquille — Mai, tome 2 L’éclat de Coquille — Mai, tome 1 Writever 2024 — Avril L’éclat de Coquille — Avril, tome 2 L’éclat de Coquille — Avril, tome 1 Writever 2024 — Mars Le bulletin de la Coquille — Mars Constat d’abandon Writever 2024 — Février Writever 2024 — Janvier Un dernier billet avant la fin du monde Un état du temps qui passe… Les Chants de Sennaar Le point écriture de la rentrée Jordan Mechner, Replay Le petit voyage en Crète — Les T-shirts Le petit voyage en Crète — Chapitre Final Le petit voyage en Crète — Chapitre 10