« INTERCAL » : différence entre les versions

Contenu supprimé Contenu ajouté
Remplacement du lien brisé vers le manuel de réference.
m Révocation des modifications de 82.127.182.126 (retour à la dernière version de Xqbot)
Ligne 10 :
 
[[Image:Jimbo Lyon.jpg|droite|vignette|Jimbo Lyon, un des auteurs d'INTERCAL.]]
Selon le manuel original des auteurs<ref name="manual72">[https{{lien brisé|consulté le=2013-04-10|url=http://3e8oops.orgse/pub~urban/pit/intercal.pdf]ps|titre=INTERCAL reference manual}}.</ref> :
</ref> :
{{Citation bloc|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 ».}}
 
Ligne 27 ⟶ 26 :
{{Citation bloc|Attention ! Ne confondez en aucune circonstance la grille avec l'opérateur d'interpolation, excepté en cas de circonstances pouvant porter à confusion !}}
 
Le manuel contient également une "[[Tonsille|amygdale]]", comme expliqué dans cette note de bas de page: "4) Comme tous les autres manuels de référence ont des annexes ([[Appendice iléo-cécalcæcal|appendices]] en anglais), il a été décidé que le manuel d'INTERCAL devrait contenir un autre type d'organe retirable."<ref name="manual72"/>
 
[[Image:INTERCAL Circuitous Diagram.svg|vignette|gauche|Le "circuit diagramme" du manuel de Référence INTERCAL, censé expliquer le fonctionnement de l'opérateur "select".]]
Ligne 41 ⟶ 40 :
Bien que le langage soit intentionnellement obtus et bavard, INTERCAL est néanmoins [[Turing-complet]] : pour peu qu'il dispose d'assez de mémoire, INTERCAL peut résoudre n'importe quel problème qu'une [[machine de Turing]] universelle puisse résoudre. La plupart des implémentations d'INTERCAL le font très lentement. Un test de performance basé sur un [[crible d'Eratosthène]], calculant tous les nombres premiers inférieurs à 65536, a été évalué sur un ordinateur [[Sun Microsystems|Sun]] SPARCStation-1. En C, il fallut moins d'une demi-seconde ; le même programme en INTERCAL prit un peu plus de dix-sept heures<ref name="stross">{{article|langue=en|titre=Intercal -- the Language From Hell|url=http://catb.org/~esr/intercal/stross.html|prénom=Charles|nom=Stross|date=1992-09|périodique=[[Computer Shopper (UK magazine)|Computer Shopper (UK)]]}}</ref>.
 
Il convient de noter qu'à peu près tous les langages de programmation autorisent des horreurs de [[notation]] aussi grandes ou pires que celles d'INTERCAL, comme le démontrent des concours comme l'[[International Obfuscated C Code Contest]]. Cependant, il s'agit généralmentgénéralement d'efforts intentionnels pour coder de manière illisible ce qui pourrait l'être de manière claire. Au contraire, la conception d'INTERCAL force quasiment tout code à être illisible.
 
Selon le manuel d'INTERCAL, "l'objectif en concevant INTERCAL était de n'avoir aucun antécédent", à supposer ni en fonctionnalités de contrôle de flux, ni en opérateurs de manipulation de données. Les concepteurs ont presque réussi ; le seul antécédent connu est une instruction machine<ref name="machine_instruction">[http://www.mailcom.com/besm6/instset.shtml#pack Broukhis, Leonid. "BESM-6 Instruction Set"]</ref> dans un ordinateur central [[BESM-6]] soviétique, sorti en 1967, et qui est effectivement équivalente à l'opérateur SELECT d'INTERCAL.
 
== Dialectes ==
L'INTERCAL Woods–Lyon original était très limité dans ses capacités d'[[entrée/sortie]] : les seules entrées acceptables étaient des nombres épelés en toutes lettres, et la seule sortie possible était une version étendue des [[chiffres romains]]. Un peu plus tard, il y eut une 'implémentation Atari', au sujet de laquelle des notes sont fournies dans le manuel de référence d'INTERCAL ; elle "diffère de la version originelle de Princeton principalmentprincipalement dans l'utilisation de l'ASCII plutôt que de l'EBCDIC'<ref name="manual72"/>.
 
La réimplémentation C-INTERCAL, disponible sur Internet, a rendu le langage plus populaire parmi les dévots de la programmation ésotérique<ref name="nickm"/>. Le dialecte C-INTERCAL possède quelques différences par-rapport à l'INTERCAL original et introduit quelques nouvelles fonctionnalités, comme une commande <code>COME FROM</code> ''("arrive de")'' et un moyen de réaliser de l'E/S de texte basé sur le Modèle de Texte de Turing<ref name="manualick">{{lien brisé|consulté le=2013-04-10|url=http://www.progsoc.uts.edu.au/~sbg/intercal/ick.html|titre=C-INTERCAL supplemental reference manual}}</ref>.
Ligne 89 ⟶ 88 :
Les commandes en INTERCAL commencent toutes par un 'identificateur de commande' ; en INTERCAL-72, ceci peut être <code>DO</code>, <code>PLEASE</code>, ou <code>PLEASE DO</code>, chacun desquels ayant la même signification en ce qui concerne le programme (mais l'utilisation de l'un d'entre eux en excès provoque le rejet du programme, une fonctionnalité non documentée d'INTERCAL-72 qui fut mentionnée dans le manuel du C-INTERCAL<ref name="manualick"/>), ou bien par une forme inversée (avec <code>NOT</code> ou <code>N'T</code> ajouté à l'identificateur)<ref name="manual72"/>. Backtracking INTERCAL, une variante moderne, autorise également des variantes comme <code>MAYBE</code> (''« peut-être »'', qui peut être combiné avec PLEASE ou DO) en tant qu'identificateurs de commande, ce qui introduit la notion de hasard<ref name="backtrack">[http://www.cse.unsw.edu.au/~malcolmr/intercal/backtracking.html Backtracking in Intercal]</ref>. Avant l'identificateur, un numéro de ligne optionnel peut être donné (un entier encadré par des parenthèses) ; après l'identificateur, un pourcentage de chance que la ligne soit exécutée peut être donné au format <code>%50</code>, lequel prend par défaut la valeur 100 %<ref name="manual72"/>.
 
En INTERCAL-72, les structures de contrôle principalsprincipales sont NEXT ''("suivant")'', RESUME ''("reprend")'', et FORGET ''("oublie")''. <code>DO (''ligne'') NEXT</code> branche le programme à la ligne indiquée, en se souvenant de la ligne suivante qui aurait été exécutée s'il n'y avait pas eu ce NEXT sur la pile d'appel (d'autres identificateurs que DO peuvent être utilisés sur n'importe quelle commande, DO est simplement donné ici comme exemple) ; <code>DO FORGET ''expression''</code> supprime les entrées égales à ''expression'' du haut de la pile d'appel (ceci est utile pour éviter l'erreur qui survient autrement lorsqu'il y a plus de 80 entrées), et <code>DO RESUME ''expression''</code> supprime les entrées ''expression'' de la pile d'appel et branche le programme à la dernière ligne mémorisée<ref name="manual72"/>.
 
C-INTERCAL fournit aussi l'instruction <code>COME FROM</code>, qui s'écrit <code>DO COME FROM (''ligne'')</code> ; le CLC-INTERCAL et les versions les plus récentes du C-INTERCAL fournissent également des versions calculatoires de COME FROM (<code>DO COME FROM ''expression''</code>) et NEXT FROM, qui fonctionne comme COME FROM mais sauvegarde également une adresse de retour sur la ''PROCHAINE'' pile<ref name="clc"/>.
Ligne 96 ⟶ 95 :
 
=== Divers ===
L'entrée (qui utilise l'instruction <code>WRITE IN</code>) et la sortie (qui utilise l'instruction <code>READ OUT</code>) n'emploient pas le format habituel ; en INTERCAL-72, WRITE IN gère l'entrée d'un nombre écrit en toutes lettres en langue anglaise (comme SIX FIVE FIVE THREE FIVE), et READ OUT l'imprime en [[chiffres romains]]<ref name="manual72"/>. Les versions plus récentes ont leur propre système d'E/S<ref name="clc"/>{{,}}<ref name="manualick"/>. Les commentaires peuvent être réalisés en utilisant les inverseurs d'identificateur de commande NOT ou N'T ; ceux-ci provoquent l'abstention d'exécution (ABSTAIN) de ces lignes de sorte qu'elles n'ont pas d'effet<ref name="manual72"/> (une ligne peut être en abstention même si elle ne possède pas une syntaxe valide ; les erreurs de syntaxe surviennent à l'exécution, et seulement à ce moment-là quand la ligne n'est pas en abstention.)<ref name="manual72"/>.
 
== Hello, world ==
Ligne 150 ⟶ 149 :
 
== Liens externes ==
* [http://www.catb.org/~esr/intercal/ Page principalprincipale d'INTERCAL] (en anglais)
* [http://www.muppetlabs.com/~breadbox/intercal/ Ressources pour INTERCAL sur Internet], incluant plusieurs implémentations (en anglais)
* [http://www.techworld.com.au/article/251892/-z_programming_languages_intercal Interview de Don Woods par Computerworld au sujet d'INTERCAL] (en anglais)
Ce document provient de « https://fr.wikipedia.org/wiki/INTERCAL ».