Quel est le langage de programmation informatique BASIC ?


ETA : Note : Comme Richard H. Schwartz va écrire sur la version originale de Dartmouth, la mise en garde est que j'écris sur la première version que j'ai utilisée, qui était sur un PDP 8, je crois, faisant fonctionner quatre télétypes.

Le langage de programmation BASIC (Beginner's All-Purpose Symbolic Instruction Code) a été inventé en 1964 pour permettre aux non-programmeurs d'utiliser des ordinateurs.


Un programme BASIC consistait en une série de lignes. Chaque ligne comportait trois parties :

  1. Un numéro de ligne numérique, interprété comme un nombre décimal. Les lignes du programme étaient toujours en séquence par rapport à ce numéro.
  2. Un verbe alphabétique (bien que les BASIC ultérieurs aient rendu le verbe LET facultatif).
  3. Le reste de la ligne, qui était analysé de manière assez ad hoc sans délimiteurs (comme le FORTRAN).

Le BASIC ne disposait que de variables constituées d'une seule lettre et d'un chiffre facultatif. Au début, seuls les nombres à virgule flottante étaient autorisés. Plus tard, un caractère suivant dans une variable pouvait déterminer son type, car d'autres types ont été introduits (chaînes de caractères vers 1965). L'interprétation était purement dynamique, sans conventions lexicales entre les lignes, mais elle permettait à un développeur attentif de faire quelque chose qui ressemblait un peu aux blocs, qui avaient été introduits dans Algol 60. De nombreuses fonctionnalités étaient inspirées de FORTRAN II, et comme FORTRAN, les espaces n'étaient pas pertinents.


BASIC était répandu sur les mini-ordinateurs et les premiers micro-ordinateurs. Il présentait des caractéristiques intéressantes qui le rendaient attrayant sur les petites machines. Il n'était pas nécessaire de disposer d'un éditeur de texte. En tapant une ligne avec un numéro de ligne, on remplaçait l'instruction existante portant ce numéro de ligne ou on insérait la ligne au bon endroit. Cependant, cela signifiait qu'au fur et à mesure qu'un programme prenait de l'ampleur, on manquait souvent d'endroits où placer de nouvelles lignes. Il fallait alors renuméroter le programme, ce qui changeait tous les numéros de ligne pour qu'ils soient des facteurs de 10, bien que des paramètres permettent de modifier cela. (Le RENUM du TRS-80 n'était pas intégré. Vous deviez l'acheter et le charger à partir d'une cassette.)

Il n'y avait pas de structures de données à part la matrice, qui heureusement était multidimensionnelle. Les premières versions de BASIC avaient des opérations matricielles, qui ont été abandonnées assez rapidement dans les implémentations ultérieures. Certaines implémentations, comme le BASIC original de Microsoft, n'avaient qu'un seul tableau et aucune installation multidimensionnelle.

Il n'y avait pas de passage d'argument/paramètre, seulement un GOSUB qui pouvait transférer le contrôle à une certaine ligne, et une instruction RETURN rencontrée transférait à nouveau à l'instruction suivant le GOSUB. Le moyen de base du transfert de contrôle était le GOTO. La seule chose qui pouvait ressembler à une structure de contrôle lexicale moderne était la boucle FOR, mais comme le contrôle était purement dynamique, il pouvait avoir l'air tout aussi chaotique qu'un tas de GOTO. Il y avait deux instructions IF, dont l'une transférait le contrôle à une ligne, et l'autre, avec THEN, pouvait être utilisée pour faire un bloc pseudo-lexical.

L'entrée et la sortie de texte étaient intégrées aux instructions PRINT et INPUT. Un type d'instruction, l'instruction DATA, était ignorée dans le flux de contrôle. Elle pouvait être utilisée pour fournir un seul flux de données auquel accédaient les instructions READ. Au cours des dernières années, les gens ont appris à pervertir l'instruction DATA pour faire des choses comme contenir du code machine et des séquences de terminal. Cela rendait LISTing un programme ennuyeux, mais il faisait le travail.

Avec les micro-ordinateurs, les versions de BASIC ont commencé à incorporer des instructions PEEK et POKE pour permettre un accès arbitraire à la mémoire. CALL permettait d'exécuter un morceau de code machine.

Des langages bien plus tardifs ont été conçus qui s'appelaient "Basic". Il s'agit surtout de langages qui ne font qu'emprunter une partie de la syntaxe de BASIC mais qui sont beaucoup plus modernes, avec un scoping lexical et le passage de paramètres aux arguments, et même des classes et autres.

Ceux qui connaissent ces langages trouveront sans doute le BASIC susmentionné plutôt horrible, et il l'était en effet. Cependant, il enseignait une sorte de discipline qui fait tristement défaut de nos jours, et il ne m'a probablement pas causé une quantité significative de dommages permanents au cerveau.

C'est probablement un accident que ce langage ait si bien pris. Il n'était même pas nécessaire de suivre cette voie en raison des ordinateurs de faible puissance. Des versions simples de langages de type LISP étaient aussi faciles à mettre en œuvre à l'époque, en mode immédiat sans avoir besoin d'un éditeur de texte et d'une étape d'analyse séparée. Cependant, l'édition d'un programme existant était assez facile avec le système BASIC, à tel point que lorsque j'ai implémenté mon premier langage semi-moderne, MOUSE, j'ai choisi d'utiliser un système de numérotation des lignes même si les numéros de ligne n'étaient pas utilisés dans le langage, et c'était aussi quelque chose avec lequel les gens étaient familiers.