Espace (langage de programmation) - Whitespace (programming language)

Whitespace hello world programme avec coloration syntaxique
  onglets
  les espaces

Whitespace est un langage de programmation ésotérique développé par Edwin Brady et Chris Morris à l' Université de Durham (également développeurs des langages de programmation Kaya et Idris ). Il est sorti le 1er avril 2003 ( le poisson d'avril ). Son nom fait référence aux caractères d'espacement . Contrairement à la plupart des langages de programmation, qui ignorent ou attribuent peu de sens à la plupart des caractères d'espacement, l'interpréteur d'espacement ignore tous les caractères qui ne sont pas des espaces. Seuls les espaces , les tabulations et les sauts de ligne ont un sens. Une conséquence de cette propriété est qu'un programme Whitespace peut facilement être contenu dans les caractères blancs d'un programme écrit dans un autre langage, sauf éventuellement dans des langages qui dépendent d'espaces pour la validité de la syntaxe comme Python , faisant du texte un polyglotte .

Le langage lui-même est un langage impératif basé sur la pile . La machine virtuelle sur laquelle les programmes s'exécutent possède une pile et un tas . Le programmeur est libre de pousser des entiers de largeur arbitraire sur la pile (il n'y a actuellement aucune implémentation de nombres à virgule flottante) et peut également accéder au tas en tant que magasin permanent pour les variables et les structures de données .

Histoire

Whitespace a été créé par Edwin Brady et Chris Morris en 2002. Slashdot a passé en revue ce langage de programmation le 1er avril 2003.

L'idée d'utiliser des caractères d'espacement comme opérateurs pour le langage C++ avait été facétieuse cinq ans plus tôt par Bjarne Stroustrup .

Syntaxe

Les commandes sont composées de séquences d'espaces, de tabulations et de sauts de ligne. Par exemple, tab-space-space-space effectue l'addition arithmétique des deux premiers éléments de la pile. Les données sont représentées en binaire à l' aide d'espaces (0) et de tabulations (1), suivis d'un saut de ligne ; ainsi, space-space-space-tab-space-tab-tab-linefeed est le nombre binaire 0001011, qui est 11 en décimal. Tous les autres caractères sont ignorés et peuvent donc être utilisés pour les commentaires.

Le code est écrit sous la forme d'un paramètre de modification d'instruction (IMP) suivi de l'opération. Le tableau ci-dessous montre une liste de tous les IMP dans Whitespace.

LUTIN Sens
[Espace] Manipulation de la pile
[Tab][Espace] Arithmétique
[Tab][Tab] Accès au tas
[Saut de ligne] Contrôle de flux
[Onglet][Saut de ligne] E/S

Chaque IMP est suivi d'une opération définie pour cet IMP, et d'un paramètre si nécessaire. La liste des opérations prises en charge dans Whitespace est :

LUTIN Commander Paramètre Sens
[Espace] [Espace] Numéro Poussez le numéro sur la pile
[Espace] [LF][Espace] - Dupliquer le premier élément de la pile
[Espace] [Tab][Espace] Numéro Copiez le nième élément de la pile (donné par l'argument) en haut de la pile
[Espace] [LF][Tab] - Échangez les deux premiers éléments de la pile
[Espace] [SI SI] - Jeter le premier élément de la pile
[Espace] [Tab][LF] Numéro Faites glisser n éléments de la pile, en gardant le premier élément
[Tab][Espace] [Espace][Espace] - Une addition
[Tab][Espace] [Espace][Tabulation] - Soustraction
[Tab][Espace] [Espace][LF] - Multiplication
[Tab][Espace] [Tab][Espace] - Division entière
[Tab][Espace] [Tab][Tab] - Modulo
[Tab][Tab] [Espace] - Stocker en tas
[Tab][Tab] [Languette] - Récupérer du tas
[LF] [Espace][Espace] Étiqueter Marquer un emplacement dans le programme
[LF] [Espace][Tabulation] Étiqueter Appeler un sous-programme
[LF] [Espace][LF] Étiqueter Aller à une étiquette
[LF] [Tab][Espace] Étiqueter Aller à une étiquette si le haut de la pile est à zéro
[LF] [Tab][Tab] Étiqueter Aller à une étiquette si le haut de la pile est négatif
[LF] [Tab][LF] - Mettre fin à un sous-programme et transférer le contrôle à l'appelant
[LF] [SI SI] - Terminer le programme
[Tab][LF] [Espace][Espace] - Sortir le caractère en haut de la pile
[Tab][LF] [Espace][Tabulation] - Sortir le nombre en haut de la pile
[Tab][LF] [Tab][Espace] - Lire un caractère et le placer à l'emplacement indiqué par le haut de la pile
[Tab][LF] [Tab][Tab] - Lire un nombre et le placer à l'emplacement indiqué par le haut de la pile

Les opérations "copy" et "slide" ont été ajoutées dans Whitespace 0.3 et peuvent ne pas être prises en charge par toutes les implémentations.

Exemple de code

Ce qui suit est un programme d'espaces blancs commenté qui affiche simplement "Hello, world!" , où chaque espace , tabulation ou saut de ligne est précédé du commentaire d'identification « S », « T » ou « L », respectivement :

S S S T	S S T	S S S L
T	L
S S S S S T	T	S S T	S T	L
T	L
S S S S S T	T	S T	T	S S L
T	L
S S S S S T	T	S T	T	S S L
T	L
S S S S S T	T	S T	T	T	T	L
T	L
S S S S S T	S T	T	S S L
T	L
S S S S S T	S S S S S L
T	L
S S S S S T	T	T	S T	T	T	L
T	L
S S S S S T	T	S T	T	T	T	L
T	L
S S S S S T	T	T	S S T	S L
T	L
S S S S S T	T	S T	T	S S L
T	L
S S S S S T	T	S S T	S S L
T	L
S S S S S T	S S S S T	L
T	L
S S L
L
L

Notez que lorsque le code source Whitespace est affiché dans certains navigateurs, l'espacement horizontal produit par un caractère de tabulation n'est pas fixe, mais dépend de son emplacement dans le texte par rapport au prochain taquet de tabulation horizontal . Selon le logiciel, les caractères de tabulation peuvent également être remplacés par le nombre variable correspondant de caractères d'espacement.

Voir également

Les références

  1. ^ A b c d "espaces blancs" . Compsoc . Archivé de l'original le 18 juin 2015 . Consulté le 8 décembre 2015 .
  2. ^ Timothée (1er avril 2003). « Nouveau langage de programmation Whitespace-seulement » . Slashdot . Consulté le 23 janvier 2014 .
  3. ^ Stroustrup, Bjarne. "Généraliser la surcharge pour C++2000" (PDF) . Florham Park, NJ, États-Unis : AT&T Labs . Consulté le 23 janvier 2014 .

Liens externes