PILOT

langage de programmation

PILOT
Date de première version 1968
Paradigme impératif
Auteur John Amsden Starkweather
Typage implicite
Normes IEEE 1154-1991
Influencé par Computest (d)Voir et modifier les données sur Wikidata

PILOT (acronyme de Programmed Inquiry, Learning, Or Teaching (en français Recherche, Apprentissage, Enseignement Programmés) est un langage de programmation précurseur de l’apprentissage en ligne (E-learning) développé dans les années 1960[1].

PILOT est un langage de programmation impératif, similaire dans sa forme et sa structure aux langages Basic ou Fortran. Ses mots-clefs sont généralement abrégés sur un seul caractère pour les mots-clefs principaux, comme T pour "TYPE" pour afficher du texte ou A pour "ACCEPT", pour traiter des valeurs entrées par l'utilisateur.

Histoire modifier

PILOT a été développé par John Amsden Starkweather, un professeur en psychologie au centre médical de l'Université de Californie à San Francisco. En 1962 il développe un langage simple pour automatiser les tests d'enseignement appelé Computest.

À partir de 1968, il développe une suite à ce projet, nommée PILOT, pour différents ordinateurs de l'époque comme le SDS 940[2].

Syntaxe du langage[3] modifier

Une ligne de code en PILOT contient les éléments de syntaxe suivants, de gauche à droite :

  • une étiquette optionnelle (label)
  • une commande (généralement en version abrégée en 1 ou 2 lettres)
  • une lettre, qui peut être Y pour oui ("Yes"), ou N pour non ("No")
  • une expression conditionnelle entre parenthèses
  • deux points (:)
  • une ou plusieurs opérandes, dont la syntaxe dépend de la commande.

Aucun élément n'est obligatoire, pas même la commande. On peut donc utiliser des lignes vides pour aérer le code.

Étiquettes et variables modifier

  • Une étiquette est composée d'une astérisque (*), suivi d'un identifiant. (Exemples: *F, *LOOP, *CALC)
  • Une variable numérique est composée du signe dièse (#), suivi d'un identifiant. (Exemples: #X, #Toto, #X1Y2)
  • Une variable chaîne de caractère est composée du signe dollar ($), suivi d'un identifiant. (Exemples: $A, $NOM, $P1L0T)
  • Une variable système est composée du signe pour-cent (%), suivi d'un identifiant. (Exemples: %ANSWER, %MATCHED, %LEFT) Dans les premières implémentations, les variables systèmes ne sont que des variables numériques, les variables systèmes chaînes de caractères sont un ajout de la norme IEEE.

Un identifiant est constitué d'une suite de lettres et de chiffres et commence obligatoirement par une lettre. Le langage n'étant pas sensible à la casse, #toto, #ToTo et #TOTO désignent la même variable, tandis que #ANSWER, $ANSWER et %ANSWER sont trois variables différentes.

Afin de distinguer la fin d'une étiquette du début de la commande, il faut séparer les deux avec au moins un espace. Pour améliorer la lisibilité, l'usage est de placer les étiquettes sur leurs propres lignes, sans commande.

Commandes modifier

Dans la norme IEEE, les principales commandes (core PILOT) peuvent toutes être abrégées à leur première lettre. Dans les premières implémentations, seules ces raccourcis d'une lettre sont reconnus par l'interpréteur. (Les lignes commençant par R: sont des commentaires)

A - ACCEPT
Accepte des entrées dans un "tampon d'entrée". Exemples :
 R:La prochaine ligne entrée au clavier remplace le contenu du tampon
 A:
 R:La prochaine ligne entrée remplace le tampon, et la variable chaîne de caractères 'FREE'
 A:$FREE
 R:Les 3 prochaines lignes entrées sont assignées aux variables 'X', 'Y' et 'Z'
 A:$X,$Y,$Z
 R:La prochaine entrée numérique est assignée à la variable numérique 'Q'
 A:#Q

Dans les versions IEEE, le tampon d'entrée est disponible dans la variable système %ANSWER.

C - COMPUTE
Calcule et assigne des valeurs numériques. La plupart des implémentations de PILOT ne font que des calculs entiers, et n'ont ni tableau, ni d'autre structure de données. Exemple:
 R:Assigne la moyenne arithmétique de #X et #Y dans #AM
 C:#AM=(#X+#Y)/2
 R:Crée une chaîne $DATE à partir des valeurs numériques #DAY et #YEAR et de la chaîne $MONTH
 C:$DATE=#DAY/$MONTH/#YEAR

Les opérateurs numériques reconnus sont les 4 opérations de base: + addition, - soustraction, * multiplication et / division entière.

La seule opération disponible sur les chaînes de caractères est la concaténation, qui peut être utilisée avec des variables ou des chaînes constantes. Il n'y a pas de délimiteurs pour les chaînes constantes, donc en dehors des noms de variables, tous les caractères entre le = et la fin de la ligne sont considérés comme des chaînes constantes, y compris les caractères d'espacement avant la fin de la ligne.

Aucune notion de fonction n'existe, ni fonction prédéfinie, ni fonction utilisateur.

E - END
Fin de sous-programme ou (si en dehors d'un sous-programme) termine le programme. Toujours utilisé sans opérande.
 R:Calcule la moyenne de 2 valeurs.
 R:Entrées: #X et #Y contiennent les 2 valeurs.
 R:Sortie: #MOY contient la moyenne calculée.
 *MOYENNE
 C:#MOY=(#X+#Y)/2
 E:
J - JUMP
Saute vers une étiquette. Exemple:
 J:*RESTART
M - MATCH
Compare le tampon d'entrée avec des variables chaînes de caractères ou chaînes littérales. Exemple:
 R:Cherche dans le tampon le mot "VRAI", la valeur de MEXICO, ou le mot "JEUNE", dans cet ordre
 M:VRAI,$MEXICO,JEUNE

La première chaîne trouvée (s'il y en a une) est assignée à la variable système %MATCH ($MATCH sur les premières implémentations). Les caractères à gauche de cette chaîne dans le tampon sont assignés à la variable %LEFT, et les caractères à droite à la variable %RIGHT. ($LEFT et $RIGHT sur les premières implémentations.) Ce découpage de la chaîne de caractère en trois est la seule opération de recherche de sous-chaînes sur les chaînes de caractères, et elle n'est disponible que sur le tampon d'entrée.

Le drapeau de comparaison est positionné à 'oui' ou 'non', selon le résultat de la recherche. Toute instruction qui a un Y après la lettre de commande ne sera exécutée que si le drapeau est sur 'oui', autrement dit, si la dernière recherche a trouvé une des chaînes. Les instructions avec N ne sont exécutés que si le drapeau est sur 'non'. Pour les implémentations IEEE, le drapeau de comparaison est disponible dans la variable système %MATCHED, qui vaut 1 pour 'oui' et 0 pour 'non'.

N - NO
Équivalent de TN: (affiche si la dernière recherche a échoué)
 R:Exemple de programme d'apprentissage.
 T:Quelle est la capitale de la France?
 A:
 M:paris
 Y:Gagné!
 N:Perdu!
R - REMARK
L'opérande de R: est un commentaire, et cette instruction n'a donc aucun effet.
 R:Cette commande ne fait rien, à part commenter le code qui l'entoure...
T - TYPE
Affiche l'opérande en sortie. Exemples:
 R:La prochaine ligne affiche une chaîne littérale
 T:Merci pour votre aide.
 R:La prochaine ligne combine une chaîne littérale avec une chaîne variable et une variable numérique
 T:Bravo, $NOM, votre score est de #SCORE.
U - USE
Appelle un sous-programme. Un sous-programme commence à une étiquette et se termine avec E: Exemple:
 R:Appelle le sous-programme *MOYENNE
 U:*MOYENNE
Y - YES
Équivalent de TY: (affiche si la dernière recherche était fructueuse)
 R:Exemple de programme d'apprentissage.
 T:Quelle est la capitale de la France?
 A:
 M:paris
 Y:Gagné!
 N:Perdu!

Ce jeu de commandes étant très limité, la plupart des implémentations fournissent des commandes supplémentaires, souvent abrégées sur deux lettre au lieu d'une.

Expressions Conditionnelles modifier

S'il y a une expression entre parenthèses dans une instruction, c'est une expression conditionnelle, et l'instruction n'est exécutée que si le test est vérifié. Par exemple:

 R:Affiche un message en fonction de #score
 T(#SCORE>=10):Bravo! Vous avez #SCORE/20, c'est très bien!
 T(#SCORE<10) :Vous avez obtenu #SCORE/20. Encore un effort, vous pouvez faire mieux!

Variantes modifier

Les extensions au langage de base comprennent les tableaus et les nombres à virgule flottante (Apple PILOT) et une tortue graphique inspirée du langage Logo (Atari PILOT)[4],[5].

Entre 1979 et 1983 le Groupe d'Utilisateurs de PILOT du Royaume-Uni est dirigé par Alec Wood, un enseignant de la Wirral Grammar School for Boys. Plusieurs versions d'un mini PILOT en code machine sont produites pour les micro-ordinateurs de l'époque et une école en Écosse développe un tutoriel interactif en langue étrangère dans lequel les élèves se promenaient dans une ville en posant et en répondant à des questions en allemand, en français, etc. Un article paru dans le numéro de de "Computer Age" traite d'une première implémentation appelée Tiny Pilot et donne un listing complet des codes machine.

Des versions de PILOT implémentées sur les interpréteurs Basic des premiers micro-ordinateurs sont courantes vers la fin des années 1970s et le début des années 1980 et une variante de PILOT non-Turing-complète est publiée dans le magazine Byte sous le nom Waduzitdo par Larry Kheriarty comme une démonstration de ce dont un ordinateur est capable[6],[7].

En 1983, Vanilla PILOT pour le Commodore 64 ajoute la tortue graphique[8], de même que Super Turtle PILOT qui est publié sous forme de listing dans le numéro d' du magazine Compute![9].

En 1990, Tom Nielsen, EdD, développe eSTeam PILOT pour Atari ST. Basé sur la préversion (draft) de la norme IEEE, il inclut des fonctionnalités spécifiques Atari telles que le contrôle de périphériques Laserdisc et CDROM[10].

En 1991, l'Institute of Electrical and Electronics Engineers (IEEE) publie une norme pour PILOT: IEEE Std 1154-1991. Il a été abandonné en 2000[11]. Une implémentation de référence basée sur cette norme est implémentée par Eric Raymond, et maintenue pendant les 20 années suivantes[12].

En 2018, une implémentation amateure, psPILOT, basée en partie sur la norme IEEE, est codée en utilisant le langage de script PowerShell de Microsoft[13].

Notes et références modifier

  1. (en) Rob Linwood, « PILOT Resource Center », sur Sourceforge (consulté le )
  2. (en) Xiuzhi Zhou, « Register of the John A. Starkweather Papers, 1965-1985 », University of California, San Francisco library, (consulté le )
  3. (en) Eric Raymond, « ieee-pilot », sur GitLab, (consulté le ) l'implémentation-référence de la norme IEEE, comprend un fichier "tutor.p" est à la fois un programme exemple, et un didacticiel sur la syntaxe du langage.
  4. (en) Jim Conlan et Tracy Deliman, Atari PILOT for beginners, Reston Publishing, , 229 p.
  5. (en) « Pilot », sur AtariWiki (consulté le )
  6. Brian Connors, « Waduzitdo 2001 », (consulté le )
  7. (en) Larry Kheriarty, « WADUZITDO: How To Write a Language in 256 Words or Less », Byte,‎
  8. (en) « Vanilla PILOT, PILOT that comes with turtle graphics », Infoworld,‎ , p. 67-69 (lire en ligne, consulté le )
  9. (en) Alan Poole, « Super Turtle PILOT », COMPUTE!, no 89,‎ , p. 74 (lire en ligne, consulté le )
  10. (en) « Press Release: eSTeem PILOT », (consulté le )
  11. (en) « IEEE 1154-1991 - IEEE Standard for Programmed Inquiry, Learning, or Teaching (PILOT) », sur IEEE Standards Association (consulté le )
  12. (en) « Twenty years after », (consulté le )
  13. (en) « psPilot », sur GitHub, (consulté le )

Bibliographie modifier