Whitespace

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche

Whitespace
Programme "Hello World" en Whitespace avec la coloration syntaxique
Programme "Hello World" en Whitespace avec la coloration syntaxique

Date de première version Avril 2003
Auteur Edwin Brady et Chris Morris
Influencé par Brainfuck
Site web compsoc.dur.ac.uk/whitespaceVoir et modifier les données sur Wikidata

Le whitespace est un langage de programmation exotique diffusé le par Edwin Brady et Chris Morris de l'Université de Durham.

Comme caractères, il utilise les espaces, les tabulations et les retours à la ligne pour générer un programme dont le code est invisible.

Histoire[modifier | modifier le code]

Il s'agit plus d'une plaisanterie d'informaticiens (poisson d'avril) que d'un véritable langage de programmation opérationnel. Ce pseudo-langage, basé sur une pile, un peu comme le Forth (empiler et dépiler), est limité à quelques opérateurs simplistes et le minimum vital concernant les entrées/sorties.

L'idée d'utiliser des espaces blancs (espaces, tabulations) du C++ avait déjà été suggéré cinq ans auparavant par Bjarne Stroustrup[1]. Perl proposait dès 2001 le module Acme::Bleach pour programmer avec des espaces.

Syntaxe[modifier | modifier le code]

Les commandes sont composées de séquences d'espaces, de tabulations et de sauts de ligne. Tous les autres caractères sont ignorés et servent donc aux commentaires.

Les nombres s'écrivent à l'aide d'un signe (espace pour positif, tabulation pour négatif), puis la valeur absolue en code binaire (l'espace pour le zéro, la tabulation pour le 1), puis se termine par un saut de ligne[2]. Ainsi espace-espace-espace-tabulation-espace-tabulation-tabulation-saut de ligne représente le nombre binaire 0001011, correspondant à 11 en décimal.

Chaque instruction démarre par un IMP (Instruction Modification Parameter) suivi par une commande spécifique à l'IMP, puis potentiellement un paramètre[3],[4].

Liste des IMP[modifier | modifier le code]

IMP Signification
[espace] Stack Manipulation
[tabulation][espace] Arithmétique
[tabulation][tabulation] Accès au tas (Heap Access)
[saut de ligne] Contrôle du débit
[tabulation][saut de ligne] I/O

Liste des instructions possibles[modifier | modifier le code]

IMP Commande Paramètre Description
[Space] [Space] Nombre Push un nombre sur la pile
[Space] [LF][Space] - Duplique le haut de la pile
[Space] [LF][Tab] - Inverse les deux éléments du haut de la pile
[Space] [LF][LF] - Supprime le nombre en haut de la pile
[Tab][Space] [Space][Space] - Addition
[Tab][Space] [Space][Tab] - Soustraction
[Tab][Space] [Space][LF] - Multiplication
[Tab][Space] [Tab][Space] - Division entière
[Tab][Space] [Tab][Tab] - Modulo
[Tab][Tab] [Space] - Store dans le tas
[Tab][Tab] [Tab] - Récupère du tas
[LF] [Space][Space] Label Donne un nom (label) à la position dans le programme
[LF] [Space][Tab] Label Appelle la subroutine
[LF] [Space][LF] Label Jump vers le label
[LF] [Tab][Space] Label Jump vers le label si le haut de la pile est zéro
[LF] [Tab][Tab] Label Jump vers le label si le haut de la pile est négatif
[LF] [Tab][LF] - Termine la subroutine, et retourne à l'appelant
[LF] [LF][LF] - Termine le programme
[Tab][LF] [Space][Space] - Affiche le haut de la pile comme un caractère ascii
[Tab][LF] [Space][Tab] - Affiche le haut de la pile comme un nombre
[Tab][LF] [Tab][Space] - Lit un caractère et l'enregistre à la place décrite par le haut de la pile
[Tab][LF] [Tab][Tab] - Lit un nombre et l'enregistre à la place décrite par le haut de la pile

Exemples[modifier | modifier le code]

Par exemple, tabulation-espace-espace-espace effectue l'ajout arithmétique des deux premiers éléments de la pile.

Hello world[modifier | modifier le code]

Le programme suivant permet d'écrire « Hello world ».

Les lettres sont des commentaires, destinés à rendre lisible le code : S = espace ; T = tabulation ; L = ligne.

   	 	   
T	LS S S S S T	T	S S T	S TT	LS S S S S T	T	S T	T	S S 
T	LS S S S S T	T	S T	TS S L
S S S SS T	T	S T	T		T	LT	L
S S S S TS T	T	S S 
T	SS S S ST	S S S S S LT
S S S S  T	TT	S 	T	T	LT	L
S S S S  T	S T	T	T	
T	L S S S ST	 
S S S S S T	 S LT	L S S S S T	T	S S T	S S L
	L
S S S S  T	S S S S T	L
TL
S S L
L
L

Intérêt[modifier | modifier le code]

Même s'il s'agit d'une plaisanterie, l'étude du code peut se révéler profitable pour ceux ou celles qui se lanceraient dans l'écriture d'un interpréteur NPI (notation polonaise inversée) à la Forth[réf. souhaitée].

Notes et références[modifier | modifier le code]

  1. Bjarne Stroustrup, « Generalizing Overloading for C++2000 », Florham Park, NJ, USA, AT&T Labs (consulté le 23 janvier 2014)
  2. « Whitespace tutorial », sur hackage.haskell.org (consulté le 4 mars 2020)
  3. « Whitespace Tutorial » [archive du ], sur Compsoc (consulté le 8 décembre 2015)
  4. Whitespace tutorial « https://web.archive.org/web/20151101230744/http://compsoc.dur.ac.uk/whitespace/tutorial.html »(ArchiveWikiwixArchive.isGoogleQue faire ?),

Liens externes[modifier | modifier le code]