Article de reference

Langage de programmation ésotérique

Un langage de programmation ésotérique (parfois abrégé en esolang ) ou langage étrange est un langage de programmation conçu pour tester les limites de la conception des langage...

langage de programmation conçu pour tester les limites de la conception des langages de programmation, comme preuve de concept , comme forme d'art logiciel , comme interface de piratage pour un autre langage (en particulier les langages de programmation fonctionnelle ou procédurale ), ou comme une plaisanterie . L'emploi du terme « ésotérique » les distingue des langages utilisés par les développeurs professionnels pour écrire des logiciels. Les créateurs de la plupart des esolangs ne les destinent pas à la programmation courante, bien que certaines fonctionnalités ésotériques, comme la visualisation en direct du code, aient inspiré des applications artistiques. Ces langages sont souvent populaires auprès des hackers , des amateurs et des chercheurs en informatique .

L'utilisabilité est rarement un objectif pour les concepteurs de langages de programmation ésotériques ; souvent, leur conception aboutit à tout le contraire. Leur but habituel est de supprimer ou de remplacer les fonctionnalités conventionnelles du langage tout en conservant un langage Turing-complet , voire un langage dont la classe de calcul est inconnue.

Programme « Hello World ! » en INTERCAL

Le premier exemple, et toujours le plus emblématique, de langage de programmation ésotérique est INTERCAL , conçu en 1972 par Don Woods et James M. Lyon. Ces derniers affirmaient vouloir créer un langage de programmation différent de tous ceux qu'ils connaissaient à savoir FORTRAN , BASIC , COBOL , ALGOL , SNOBOL , SPITBOL , FOCAL , SOLVE, TEACH, APL , LISP et PL/I . Il parodiait des éléments des langages de programmation établis de l'époque

Pendant de nombreuses années, INTERCAL n'a été représenté que par des exemplaires papier du manuel INTERCAL. Sa renaissance en 1990 sous la forme d'une implémentation en C sous Unix a suscité un regain d'intérêt pour la conception intentionnelle de langages informatiques ésotériques.

langage de programmation compact orienté pile dont la syntaxe est conçue pour rendre le code intrinsèquement obscur, déroutant et illisible. Son compilateur ne pèse que 1024 octets. Ceci inspira Urban Müller à créer un langage encore plus petit, le désormais tristement célèbre Brainfuck , qui ne comporte que huit caractères reconnus. Avec Befunge de Chris Pressey (semblable à FALSE, mais avec un pointeur d'instructions bidimensionnel), Brainfuck est aujourd'hui l'un des langages de programmation ésotériques les mieux pris en charge, avec des exemples canoniques de pièges de Turing minimaux et de fonctionnalités inutilement obscures. Brainfuck est apparenté à la famille des machines de Turing P′′ .

Caractéristiques communes

Bien que les langages de programmation ésotériques diffèrent à bien des égards, ils partagent certains traits communs, tels que la parodie, le minimalisme et la volonté de rendre la programmation difficile. De nombreux langages ésotériques, comme Brainfuck et d'autres similaires, utilisent des caractères uniques comme commandes ; cependant, il n'est pas rare qu'ils se lisent ligne par ligne, à l'instar des langages de programmation conventionnels .

Représentations de données uniques

Les langages de programmation impératifs classiques permettent généralement de stocker les données dans des variables, mais les langages ésotériques peuvent utiliser différentes méthodes de stockage et d'accès aux données. Des langages comme Brainfuck et Malbolge n'autorisent la lecture des données que par l'intermédiaire d'un unique pointeur , qui doit être déplacé vers l'emplacement souhaité avant toute lecture. D'autres, comme Befunge et Shakespeare , utilisent une ou plusieurs piles pour stocker les données, ce qui conduit à un mode d'exécution proche de la notation polonaise inverse . Enfin, certains langages explorent des formes alternatives de représentation des nombres : la variante Boolfuck de Brainfuck n'autorise que les opérations sur des bits individuels, tandis que Malbolge et la variante TriINTERCAL d'INTERCAL remplacent complètement les bits par un système ternaire en base 3.

Représentations d'instructions uniques

Les langages ésotériques présentent également des manières uniques de représenter les instructions de programme. Certains langages, tels que Befunge et Piet , représentent les programmes en deux dimensions ou plus, le contrôle du programme pouvant se déplacer dans de multiples directions. Shakespeare y parvient en faisant ressembler tous ses programmes à des pièces de Shakespeare. Chef y parvient également en faisant de tous ses programmes des recettes. Chef est particulièrement remarquable car certains ont créé des programmes qui fonctionnent à la fois comme programme et comme recette, démontrant ainsi la capacité du langage à produire une double signification ; c'est ce qu'on appelle le multicodage. Les langages ésotériques multicodés, où les deux lectures du code s'influencent esthétiquement, ont été comparés à l'écriture par contraintes du mouvement Oulipo.

Difficultés à lire et à écrire

De nombreux langages de programmation ésotériques sont conçus pour produire un code profondément obscurci , le rendant difficile à lire et à écrire. L'objectif peut être de proposer un défi stimulant aux programmeurs : Malbolge, par exemple, a été explicitement conçu pour être complexe et comporte donc des fonctionnalités telles que du code automodifiable et des opérations très contre-intuitives. En revanche, certains langages ésotériques deviennent difficiles à écrire en raison d'autres choix de conception. Brainfuck est attaché à l'idée d'un jeu d'instructions minimaliste ; ainsi, même si ses instructions sont simples en principe, le code généré est difficile à lire pour un humain. La difficulté d' INTERCAL provient du choix d'éviter les opérations utilisées dans tout autre langage de programmation, ce qui découle de son origine en tant que parodie d'autres langages.

Parodie et satire

L'un des objectifs des langages de programmation ésotériques est de parodier les langages et les tendances existants dans le domaine de la programmation. Par exemple, le premier langage ésotérique, INTERCAL, a vu le jour comme une parodie des langages utilisés dans les années 1960, tels que APL , Fortran et COBOL . Les règles d'INTERCAL semblent être l'inverse de celles de ces autres langages. Cependant, le sujet de la parodie n'est pas toujours un autre langage de programmation établi. On peut considérer Shakespeare comme une parodie de la structure des pièces de Shakespeare, par exemple. Le langage Ook! est une parodie de Brainfuck , où les huit commandes de Brainfuck sont remplacées par divers cris d'orang-outan comme « Ook. Ook ? »

Exemples

Befunge permet au pointeur d'instruction de se déplacer dans plusieurs dimensions à travers le code. Par exemple, le programme suivant affiche « Hello World » en empilant les caractères dans l'ordre inverse, puis en les affichant dans une boucle qui parcourt "},"parts":[{"template":{"target":{"wt":"code","href":"./Template:Code"},"params":{"1":{"wt":">"},"2":{"wt":"befunge"}},"i":0}}] >les > : v ^ , _@

Il existe de nombreuses versions de Befunge, la plus courante étant Befunge-93, ainsi nommée en raison de son année de sortie.

calcul lambda binaire

Le lambda-calcul binaire est conçu dans une perspective de théorie algorithmique de l'information pour permettre le code le plus dense possible avec les moyens les plus minimaux, comprenant un auto-interpréteur de 29 octets, un crible de nombres premiers de 21 octets et un interpréteur Brainfuck de 112 octets.

Brainfuck

Brainfuck est conçu pour un minimalisme extrême et aboutit à un code obscurci, avec des programmes ne contenant que huit caractères distincts. Le programme suivant affiche « Bonjour, monde ! » :

+++++++>++++++++++>+++<<<-]>++.>+.+++++++ ..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+. "
++++++++++ [ > +++++++ > ++++++++++ > +++ <<< - ] > ++ . > + . +++++++ .. +++ . > ++ . << +++++++++++++++ . > . +++ . ------ . -------- . > + .

Tous les caractères autres que sont ignorés.langage de programmation orienté pile créé par David Morgan-Mar , conçu pour que les programmes ressemblent à des recettes de cuisine . Les programmes se composent d'un titre, d'une liste de variables et de leurs valeurs, et d'une liste d'instructions de manipulation de la pile. Un principe de conception humoristique stipule que « les recettes de programmes ne doivent pas seulement générer un résultat valide, mais aussi être faciles à préparer et délicieuses ». Morgan-Mar fait remarquer qu'un exemple de programme « Bonjour, monde ! » avec 101 œufs et FRACTRAN est une liste ordonnée de fractions positives et un entier positif initial . Le programme s'exécute en multipliant l'entier par la première fraction de la liste pour laquelle est un entier. L'entier est ensuite remplacé par et la règle se répète. Si aucune fraction de la liste ne donne un entier lorsqu'elle est multipliée par , le programme s'arrête. FRACTRAN a été inventé par le mathématicien John Conway .

INTERCAL

INTERCAL , abréviation de « Compiler Language With No Pronounceable Acronym », a été créé en 1972 comme une parodie pour satiriser certains aspects des différents langages de programmation de l'époque.

Putain de merde

JSFuck est un style de programmation JavaScript ésotérique , où le code est écrit en utilisant seulement six caractères : [`<script> ]`, (` <script>`, ` )<script>` !, `<script>` et ` +<script>`. Contrairement à Brainfuck, qui nécessite son propre compilateur ou interpréteur, JSFuck est du code JavaScript valide ; les programmes JSFuck peuvent donc être exécutés dans n’importe quel navigateur ou moteur de rendu interprétant JavaScript. Il a été utilisé dans plusieurs attaques de type cross-site scripting (XSS) contre des sites web comme eBay , en raison de sa capacité à contourner les filtres de détection de cross-site scripting.

LOLCODE

LOLCODE est conçu pour imiter le langage des lolcats . Voici un exemple de « Hello World » :

Bien que la sémantique de LOLCODE ne soit pas inhabituelle, sa syntaxe a été décrite comme un phénomène linguistique , représentant un exemple inhabituel de langage informel et d'argot internet dans la programmation.

Malbolge

Malbolge (nommé d'après le 8e cercle de l'Enfer ) a été conçu pour être le langage de programmation le plus difficile et le plus ésotérique. Entre autres caractéristiques, le code est auto-modifiable par conception et l'effet d'une instruction dépend de son adresse en mémoire.

Piet

Programme Piet qui imprime 'Piet'
Un programme « Hello World » à Piet

Piet est un langage conçu par David Morgan-Mar , dont les programmes sont des images bitmap qui s'apparentent à de l'art abstrait . L'exécution est guidée par un « pointeur » qui se déplace dans l'image, d'une zone colorée continue à la suivante. Les procédures sont exécutées lorsque le pointeur quitte une zone.

Il existe 20 couleurs dont le comportement est spécifié : 18 couleurs « colorées », ordonnées selon un cycle de teinte à 6 niveaux et un cycle de luminosité à 3 niveaux ; et le noir et le blanc, qui ne sont pas ordonnés. Lors du passage d’une couleur « colorée » à une autre, la procédure effectuée est déterminée par le nombre de niveaux de changement de teinte et de luminosité. Le noir ne peut pas être saisi directement ; lorsque le pointeur tente d’entrer dans une zone noire, les règles de sélection du bloc suivant sont modifiées. Si toutes les règles possibles sont testées, le programme se termine. Les zones situées en dehors des bords de l’image sont également traitées comme noires. Le blanc n’effectue aucune opération, mais permet simplement au pointeur de le traverser. Le comportement des couleurs autres que les 20 spécifiées est laissé à l’appréciation du compilateur ou de l’interpréteur.

Les variables sont stockées en mémoire sous forme d'entiers signés dans une seule pile . La plupart des procédures spécifiées traitent des opérations sur cette pile, tandis que d'autres traitent des entrées/sorties et des règles selon lesquelles le pointeur de compilation se déplace.

Piet a été nommé d'après le peintre néerlandais Piet Mondrian . Le nom initialement prévu, Mondrian , était déjà utilisé par un système de visualisation de données statistiques open source .

Shakespeare

Le langage de programmation Shakespeare (SPL) est conçu pour que les programmes ressemblent à des pièces de Shakespeare . Par exemple, l'instruction suivante déclare un point du programme accessible via une instruction de type GOTO :Acte I : Les insultes et les flatteries d'Hamlet.

Unlambda

Unlambda est un langage de programmation fonctionnelle minimaliste basé sur le calcul SKI , mais combiné avec des continuations de première classe et des E/S impératives (les entrées nécessitant généralement l'utilisation de continuations).

Velato

Velato a été créé par Daniel Temkin en 2009 et utilise des fichiers MIDI comme code source. Les programmes sont composés de notes de musique, chaque instruction étant déterminée par l'intervalle entre deux notes successives par rapport à une note fondamentale choisie. Cette conception permet à un code Velato valide de servir également de composition musicale.

Espace blanc

Programme « Hello World » avec coloration syntaxique et espaces blancsWhitespace utilise uniquement les caractères d'espacement ASCII (espace U+0020, tabulation U+0009 et saut de ligne U+000A), ignorant tous les autres caractères, qui peuvent donc être utilisés pour les commentaires. Ceci est l'inverse de nombreux langages traditionnels qui ne font pas de distinction entre les différents caractères d'espacement, traitant la tabulation et l'espace de la même manière. Cela permet également de dissimuler des programmes Whitespace dans le code source de programmes dans des langages comme le C.

contexte culturel

Le contexte culturel des langages ésotériques a été étudié par Geoff Cox, qui écrit que ces langages « déplacent l'attention de la commande et du contrôle vers l'expression culturelle et le refus » Il les perçoit comme similaires à l'art et à la poésie du code, tels que la mezangelle de Mez Breeze , une opinion partagée par d'autres acteurs du domaine . Daniel Temkin affirme que « les langages ésotériques sont des systèmes ouverts, naturellement collaboratifs et détachés de toute forme matérialisée unique », qui « remettent en question ou réaffirment des idées plus larges dans la culture de la programmation et dans la manière dont l'informatique est enseignée », y compris le style neutre et « professionnel » préconisé dans l'ouvrage d' Edsgar Dijkstra , *The Humble Programmer * .

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index