Espace (langage de programmation) - Whitespace (programming language)
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
- Polyglotte , un programme valable dans plusieurs langues
- Stéganographie , la technique de dissimulation d'un message dans un autre message
-
Langages de règles hors-jeu , où les blocs sont exprimés par indentation d'espaces blancs
- Python , l'exemple le plus connu d'un langage avec des espaces blancs syntaxiquement significatifs
-
Langages de programmation ésotériques
- Brainfuck , qui se compose de seulement huit commandes simples et d'un pointeur d'instruction
- INTERCAL , le "langage de compilation sans acronyme prononçable"
- LOLCODE , qui est calqué sur une série de mèmes Internet
- Malbolge , qui est spécialement conçu pour être presque impossible à programmer dans
Les références
- ^ A b c d "espaces blancs" . Compsoc . Archivé de l'original le 18 juin 2015 . Consulté le 8 décembre 2015 .
- ^ Timothée (1er avril 2003). « Nouveau langage de programmation Whitespace-seulement » . Slashdot . Consulté le 23 janvier 2014 .
- ^ 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
- Site officiel
- Annonce de sortie sur Slashdot
- The Whitespace Corpus Une collection d'interpréteurs, de compilateurs et de programmes pour Whitespace
- Collection d'interpréteurs d'espaces blancs dans divers langages de script
- Acme::Bleach Un module Perl qui réécrit le corps de votre module en un encodage uniquement avec des espaces ("pour des programmes vraiment propres").