Le crépuscule du BASIC numéroté

Histoire du Langage Basic

Ordinateur

En 1983, peu de temps après que Compaq ait conçu Advanced BASIC pour fonctionner sur leurs ordinateurs Compaq sans ROM, Microsoft a commencé à travailler sur sa propre version sans ROM : GW-BASIC.

Le débat tourne toujours autour de la signification des lettres "GW" dans GW-BASIC. Gregory Whitten, mathématicien formé à Harvard et ancien architecte logiciel en chef, a été intimement impliqué dans le développement de Microsoft BASIC et de BASIC en général, avec un héritage remontant à 1970. Dans un e-mail publié publiquement à partir de 2005, les tentatives confuses de Whitten pour régler le débat "GW" a encore attisé les flammes de la confusion :

Si GW-BASIC porte le nom de quelqu'un, c'est probablement moi parce que j'ai développé les normes de langage Microsoft BASIC dans la gamme BASIC Compiler. L'interpréteur BASIC était beaucoup plus difficile à étendre et généralement suivi par la suite. L'autre histoire est qu'il signifie Gee-Whiz BASIC et que cela sonnait bien pour les OEM japonais [fabricants d'équipement d'origine] à l'époque car il avait des fonctionnalités graphiques ajoutées au langage.

Le nom GW-BASIC signifie Gee-Whiz BASIC. Le nom GW a été choisi par Bill Gates. C'est lui qui sait si c'était Gee-Whiz ou après moi car il a utilisé les deux façons.

Malgré certaines fonctionnalités des BASIC autonomes produits dans les années 1970 et au début des années 80, GW-BASIC est sans doute le nec plus ultra de la famille des BASIC numérotés de Microsoft remontant à l'Altair - et peut-être même du BASIC numéroté en général.

GW-BASIC a bricolé presque tout dans Advanced BASIC - à l'exception des opérations de cassette, qui n'étaient sans surprise pas prises en charge compte tenu de l'ascendance des disquettes - mais l'a fait comme un exécutable autonome, ne dépendant pas de la ROM; par conséquent, GW-BASIC a pu être distribué à grande échelle, et il était - emballé dans MS-DOS, GW-BASIC était préinstallé dans une surabondance de clones IBM, prêt à être codé par les utilisateurs à leur guise juste sous l'invite OK éternellement patient.

Le livre définitif sur GW-BASIC, The GW-BASIC Reference (1990) de Don Inman et Bob Albrecht (ce dernier a fondé la People's Computer Company et a également écrit un livre classique intitulé My Computer Likes Me When I Speak in BASIC, publié en 1972), ne cache pas à quel point GW-BASIC (et BASICA) était devenu omniprésent et influent :

"Comme il y a 20 ou 30 millions d'exemplaires de GW-BASIC entre les mains des utilisateurs d'ordinateurs, cette version de BASIC est devenue la référence mondiale. Même les BASIC compilés, tels que QuickBASIC de Microsoft et PowerBasic de Spectra Software, ont leurs racines dans GW-BASIC.

Microsoft a développé et IBM a publié plusieurs compilateurs pour IBM BASIC, tous appelés BASCOM [Basic Compiler], qui étaient des précurseurs des compilateurs QuickBASIC ; Microsoft avait déjà écrit des compilateurs BASIC pour Apple et le TRS-80. QuickBASIC et PowerBasic.

Fait intéressant, bien que leur texte soit de loin le travail le plus complet sur GW-BASIC jamais publié, ils admettent utiliser Tandy BASIC - qui "est également pratiquement le même que GW-BASIC et est fourni avec le Tandy 1000" - afin d'écrire le livre.

Ouvrez un livre de recettes typique à saisir (soi-disant en raison de ses pages et pages de recettes algorithmiques que l'utilisateur doit littéralement taper, ligne par ligne) du milieu des années 1980, et vous constaterez qu'en effet, IBM BASIC était la lingua franca.

À savoir : considérez Computer Monsters (1984) de Stephen Manes et Paul Somerson, un livre débordant de jeux créatifs, bien que textuels, "effrayants" et "d'horreur" tels que "Monster Memory", dont la description se lit comme suit : "Des monstres terribles viennent vous chercher. Il n'y a qu'une chose qu'ils ne supportent pas : les humains qui se souviennent exactement de leur apparence. Si vous avez une mémoire monstrueuse, vous survivrez. Sinon... eh bien, ne dis pas qu'on ne t'a pas prévenu !"

Comme la plupart des livres de cuisine dactylographiés, Computer Monsters s'inscrit dans une tradition inaugurée avec 101 Games in BASIC par David Ahl. Ahl note dans la préface de son livre qu'à quelques exceptions près, les jeux fonctionnent tous en BASIC 'standard'

La principale différence entre les différents systèmes informatiques semble résider dans le traitement des chaînes alphabétiques. Sur les systèmes Digital [Equipment Corporation], une variable de chaîne indicée, par exemple, A$(8) ou Cl$(15), fait référence à une variable dans un tableau ou une matrice. D'autres compilateurs BASIC peuvent ne pas avoir de tableaux de chaînes.

Ahl a écrit ce paragraphe alors qu'il travaillait chez Digital en 1973, des années avant que l'hégémonie de Microsoft sur BASIC ne se produise, donc supposer que les gens exécuteraient BASIC sur un équipement numérique était une hypothèse aussi bonne que n'importe quelle autre. (Également une bonne hypothèse : que les programmes seraient exécutés sur un compilateur BASIC, plutôt que sur un interpréteur.) Les programmes d'Ahl auraient tout aussi bien pu être exécutés sur un Teletype.

Mais l'histoire est différente dans "Welcome, Human!" préface de Computer Monsters, publiée onze ans plus tard. Une question au lecteur est posée sur la toute première page du livre : « Est-ce que ces programmes fonctionneront sur mon ordinateur ?

La réponse des auteurs : "Si vous avez un ordinateur personnel IBM ou un PCjr IBM, la réponse est OUI ! Tout ce que vous avez à faire est de saisir la liste des programmes. Vous ne devriez pas avoir à apporter de modifications du tout."

Pour plus de sécurité, vous voudrez peut-être taper WIDTH 40, cependant, si vous avez un moniteur couleur, pour régler correctement la largeur de la ligne imprimée. Si votre ordinateur ne produisait pas un affichage à quarante colonnes, les mots et les phrases pourraient être coupé à des endroits apparemment aléatoires, ce qui rend difficile la lecture de la sortie.)

Mais si vous possédiez un Apple II ; un Apple II Plus ; un Apple II ; un Atari 400, 800 ou XL ; un Coleco Adam; un Commodore 64 ou VIC-20 ; un ordinateur couleur Radio Shack TRS-80 ; un Texas Instruments 99/4A — eh bien, la réponse est : peut-être devrez-vous apporter quelques modifications aux programmes.

Après tout, il existe des différences entre ces machines. Certains ont des touches RETURN, tandis que d'autres utilisent ENTER ; certains ordinateurs peuvent produire des lettres majuscules, tandis que d'autres ne le peuvent pas. Même la façon dont un utilisateur sort d'un programme varie d'une machine à l'autre (par exemple, sur certains ordinateurs, appuyez sur la touche ARRÊT ; sur d'autres, appuyez sur CTRL ARRÊT, CONTROL C ou FCTN 4).

Si vous avez un Apple II avec uniquement Integer BASIC, ne vous embêtez même pas à taper les programmes - ils ne fonctionneront pas (rappelez-vous que Integer BASIC manque de capacité en virgule flottante); seul Applesoft fera l'affaire, et même dans ce cas, vous devrez encore apporter des modifications, impliquant principalement des instructions RANDOMIZE, qui ont généré des graines pour le générateur de nombres pseudo-aléatoires.

Même chose avec le Commodore, le Color Computer et le Coleco Adam (publié par le fabricant de jouets et de jeux vidéo Coleco Industries): RANDOMIZE ne fonctionnera pas comme annoncé, et vous devrez également jouer avec la fonction RND, qui a généré le nombres pseudo-aléatoire.

D'autres problèmes entravent également le Coleco, impliquant principalement des caractères d'affichage. L'Atari n'autorise pas les tableaux de chaînes traditionnels, donc les programmes avec eux doivent être révisés, et même les variables de chaîne devront être "DIMensionnées" (en utilisant l'instruction DIM) avant utilisation.

Le pire de tous - ou, du moins, le plus différent de la norme de facto IBM BASIC, selon votre point de vue - est Texas Instruments : il y a des caractères spéciaux nécessaires pour les instructions logiques booléennes, des règles uniques pour les instructions conditionnelles et différentes fonctions de manipulation de chaînes, qui est nécessaire de les employer.

Fait intéressant, la fonctionnalité de l'instruction RANDOMIZE semble avoir été un problème de longue date, bien avant IBM BASIC ; Le livre d'Ahl met également en garde les lecteurs à ce sujet :

"De nombreux programmes utilisent la commande RANDOMIZE pour démarrer le générateur de nombres aléatoires à un point aléatoire. Certains compilateurs BASIC ne reconnaissent pas RANDOMIZE et doivent être supprimés pour que le programme s'exécute."

Certes, les programmes de Computer Monsters n'exploitaient pas la plupart des fonctions les plus avancées que Microsoft avait ajoutées à IBM BASIC, mais les programmes du livre étaient également un cran au-dessus de ceux qui fonctionnaient sur Télétypes à Dartmouth dans les années 1960.

La communauté des programmeurs BASIC, qui manquait depuis tant d'années de commandes standardisées pour les graphiques, le son, le mouvement du curseur, les chaînes de caractères, etc., commençait enfin à accepter le mastodonte Microsoft BASIC ; par exemple, l'un des livres BASIC à apprendre par soi-même les plus populaires de l'époque était la programmation informatique de Donald McCunn, Computer Programming for the Compleat Idiot for the Apple, Commodore, IBM, TRS-80 and Microsoft BASIC. Dartmouth BASIC était devenu une réflexion provinciale après coup.

Les programmes de jeu BASIC utilisaient généralement des nombres aléatoires pour que le jeu reste intéressant et imprévisible. Microsoft BASIC avait sa propre méthode particulière, plutôt mystérieuse, pour générer des nombres pseudo-aléatoires à l'aide de l'instruction RND - pas vraiment des nombres aléatoires, puisque les chiffres étaient générés de manière déterministe en utilisant une fonction récursive qui nécessitait une graine de nombre initial (qui pouvait être saisie par l'utilisateur avec le RANDOMIZE ou tirée de l'horloge interne de l'ordinateur à l'aide de l'instruction RANDOMIZE TIMER) ; une graine entière particulière x génèrerait la même séquence de nombres pseudo-aléatoires à chaque fois.

John von Neumann a créé le premier algorithme générateur de nombres pseudo-aléatoires à la fin des années 1940 ; appelée la méthode du carré du milieu, cela fonctionnait comme ceci :

commencez par une graine de nombre à # chiffres, placez la graine au carré, puis prenez les n chiffres du milieu (en ajoutant des chiffres de tête si nécessaire pour vous assurer que le produit a n chiffres) comme numéro suivant dans la séquence.

L'algorithme du générateur de nombres pseudo-aléatoires d'IBM BASIC est sans aucun doute plus compliqué que la méthode du carré du milieu. Mais il est difficile de savoir précisément quelle fonction récursive IBM BASIC utilise.

Dans "A Theoretical and Empirical Comparaison of Mainframe, Microcomputer, and Pocket Calculator Pseudorandom Number Generators", publié dans un numéro de 1993 de la revue académique Behavior Research Methods, Instruments & Computers, l'auteur Patrick Onghena écrit que les langages de programmation Advanced BASIC (IBM, 1986), GW-BASIC (Microsoft, 1987) et QBASIC (Microsoft, 1991) fournissent la fonction RND, qui est initialisée par la commande RANDOMIZE avec un nombre compris entre -215 et 215-1, et qui renvoie un nombre simple précision pseudo-aléatoire entre 0 et 1. L'algorithme de génération n'est pas documenté dans le manuel. Nos lettres à Microsoft Inc. concernant l'algorithme restent sans réponse.

Lors d'une recherche de génération pseudo-aléatoire, une page sur le site Web de Microsoft se lit comme suit :

"Microsoft Basic utilise la méthode linéaire-congruentielle [un algorithme commun de génération de nombres pseudo-aléatoires] pour la génération de nombres aléatoires dans la fonction RND", bien que le "Basic" en question ne soit probablement pas GW-BASIC, mais probablement Visual Basic.

Ainsi, à moins que Microsoft ne publie le code source, le mystère de la génération de nombres aléatoires de GW-BASIC restera probablement cela - un mystère.

Les grands consommateurs de culture informatique dans les années 1980 ne pouvaient pas éviter les saisies, pas seulement dans les livres de cuisine comme Computer Monsters, mais aussi dans les magazines. Des périodiques comme The Rainbow, un mensuel axé sur l'ordinateur couleur TRS-80 ; Le magazine RUN , qui se concentrait sur le Commodore (la désormais célèbre ligne 10 PRINT est apparue dans le magazine en 1984); et Compute!, qui n'était pas spécifique à la plate-forme mais qui avait ses racines dans la Pet Gazette réservée à Commodore, comportait régulièrement des saisies BASIC pour leurs lecteurs. Compute! a également publié Computel's Gazette, qui était exclusif au Commodore.

Les saisies au clavier avaient un attrait unique dans un monde où les logiciels n'étaient pas à portée de main. Comme Harry McCracken, qui a écrit un long article pour le magazine Time célébrant le cinquantième anniversaire de BASIC, l'explique :

« Taper des programmes à partir de listes était un exercice intellectuel plutôt qu'un simple effort mécanique, en partie parce que vous finissiez souvent par les adapter à la version de votre ordinateur. de Microsoft BASIC." De plus, vous pourriez être tenté d'améliorer le code ; les listes de programmes ont démythifié et déconstruit le logiciel, augmentant votre confiance dans l'écriture de vos propres programmes de qualité professionnelle.

"Le câblage de ces programmes imprimés et mémorisés était parfois foiré, mais ils n'étaient pas scellés à la vue dans une boîte noire fermée", notent les auteurs du livre 10 PRINT. Le type-in était un outil pédagogique formant les futurs programmeurs; bien sûr, les inconvénients comprenaient les heures passées à saisir du code et la forte probabilité de faire des fautes de frappe, puisque chaque lettre, symbole et espace devait être au bon endroit.

Les fautes de frappe pourraient être quelque peu atténuées, mais pas complètement, par des routines de somme de contrôle telles que Computefs Automatic Proofreader, qui était un court algorithme de vérification des erreurs qui « relisait » votre frappe ligne par ligne en vous faisant comparer des ensembles de nombres « rem » ajoutés au fin des lignes de programme (par exemple, ":rem 22"). Mais de nombreuses erreurs de syntaxe mettaient fin à l'exécution du programme malgré tout.

Finalement, certains auteurs BASIC sont devenus plus créatifs, expérimentant le format de saisie. Au lieu de simplement écrire une description d'un programme, y compris un exemple d'exécution, et d'afficher une liste de code source, comme les livres de David Ahl - et leurs très nombreux successeurs, retombées et imitateurs (la famille TRS-80 à elle seule en avait des dizaines, comme l'ont fait le Commodore 64 et l'Apple II), ces auteurs ont enroulé des histoires de fiction autour de leurs listes de programmes, forçant un lecteur à s'engager dans le récit en exécutant les saisies associées.

Par exemple, Stuart et Donna Paltrowitz ont écrit une série de livres d'histoires informatiques dans des genres comme la science-fiction, le mystère et l'aventure. Comme ils l'expliquent dans l'introduction d'un de leurs livres.

Dans chaque histoire [chaque chapitre] il y a des programmes informatiques [en BASIC]. Il vous sera demandé de taper les programmes dans votre ordinateur, puis de répondre à quelques questions. L'ordinateur « répondra » et répondra à vos réponses. Les réponses de l'ordinateur vous surprendront et vous amuseront.

En effet, les livres d'histoires à saisir ont tiré parti de l'interactivité de l'ordinateur, ainsi que de l'omniprésence de BASIC et de la facilité de programmation BASIC, pour améliorer les livres de jeux imprimés uniquement, des œuvres de fiction interactive semblables à la série Choose Your Own Adventure.

Étant donné que la plupart des livres d'histoires à saisir n'étaient pas spécifiques à une marque d'ordinateur, leurs listes de codes avaient tendance à ne pas utiliser de fonctions graphiques ou sonores dépendantes du matériel, mais plutôt à base de texte. Les programmes de Computer Storybooks évitaient même les boucles et les instructions conditionnelles, le tout dans le but de fonctionner tel quel dans autant de dialectes BASIC que possible.

Même ainsi, il y avait encore des changements à apporter aux programmes de Computer Storybooks, comme pour l'ordinateur personnel Sinclair ZX Spectrum de Clive Sinclair, fabriqué conjointement par Sinclair et Timex Corporation et populaire en Europe dans les années 1980.

Bien que Sinclair BASIC, d'abord écrit pour le Sinclair ZX80 en 1979 par John Grant de Nine Tiles (une version 4K ROM entière uniquement) puis mis à jour en 1980 par le collègue de Grant Steve Vickers pour le ZX81 (une version 8K ROM à virgule flottante ; il y avait un bogue au début qui produisait une racine carrée incorrecte pour la décimale 0,25) et la couleur 16K ROM ZX Spectrum, ne s'écartait pas beaucoup de Microsoft BASIC - il y avait plusieurs différences notables, telles que les noms de variables autorisés à être des mots-clés et l'IDE détecter les erreurs de syntaxe presque en temps réel - les moyens de saisie au clavier différaient, avec une seule frappe suffisante pour saisir des mots-clés complets tels que LET et PRINT.

De plus, il n'y avait pas de caractère apostrophe disponible sur le clavier très compact du Spectrum. D'autres ordinateurs populaires en Europe, comme le Dragon 32/64, étaient suffisamment similaires aux ordinateurs populaires aux États-Unis - dans le cas du Dragon, le TRS-80 Color Computer - pour ne même pas avoir besoin d'être mentionnés dans Computer Storybooks.

D'autres livres d'histoires à saisir, comme la série Micro Adventure publiée par Scholastic, proposaient des saisies encore plus complexes intégrées dans un récit long.

Mais les saisies au clavier ont perdu de leur popularité à la fin des années 1980 - Compute! a cessé de les imprimer en 1988, tandis que The Rainbow a connu une mort tardive en 1993, en partie à cause de la complexité toujours croissante de programmes qui, dans l'ensemble, n'étaient plus écrits en BASIC, et aussi à cause simplement des coûts réduits des listes de programmes sur une disquette emballée ou même un CD-ROM plutôt que de les imprimer sur papier.

À ce moment-là, bien que Microsoft BASIC soit la norme linguistique de facto, GW-BASIC était également en voie de disparition.

Les versions ultérieures de GW-BASIC, telles que 3.20, et la version finale, 3.23, incluaient la prise en charge de l'adaptateur graphique amélioré (EGA) - le point culminant des capacités graphiques de GW-BASIC. Microsoft a même étendu GW-BASIC de manière tangentielle sous la forme de MSX BASIC, intégré à la ROM de l'ordinateur personnel MSX mais facilement extensible, une plate-forme informatique standardisée basée au Japon que Microsoft a participé à la construction.

Malgré les améliorations, cependant, c'était trop peu, trop tard : la programmation était passée de l'écran vide maladroit, du curseur clignotant, de l'environnement de développement intégré (IDE) basé sur la ligne de commande qui attendait avec impatience votre code non structuré numéroté en ligne.

En surface, GW-BASIC ressemblait encore au Dartmouth Time-Sharing System exécutant Dartmouth BASIC. Mais, contrairement à ces compilateurs BASIC relativement impitoyables des années 1960, l'IDE de GW-BASIC était flexible, avec un code BASIC aussi fongible qu'il ne le serait jamais sur un IDE numéroté en ligne. Même l'acte de numéroter les lignes, une compétence très perdue, était de nature algorithmique.

Dans le livre Bad Choices: How Algorithms Can Help You Think Smarter and Live Happier (2017), l'auteur Ali Almossawi classe les "écarts" que les programmeurs BASIC laissent généralement entre les numéros de ligne, tels que 10, 20, 25, 30, 100 et ainsi de suite - en tant qu'instance d'un algorithme de "tri de bibliothèque" ou de "tri d'insertion avec espacement", qui améliore le "tri d'insertion" - dans lequel l'ajout d'un élément dans une liste provoque une réaction en chaîne, se déplaçant sur tous les autres éléments par la suite — en ménageant des poches d'espace pour réduire le nombre de quarts de travail.

"Le premier langage dans lequel j'ai programmé était le BASIC. Lors d'une récente conversation avec un ami, je me suis souvenu d'un souvenir que j'avais presque oublié : les numéros de ligne dans ce langage de programmation avaient généralement des "espaces" entre eux", se souvient Almossawi.

"La ligne deux ne suivait pas la ligne un, plutôt la ligne vingt aurait pu suivre la ligne dix, et ainsi de suite. Cette convention permettait à un programmeur d'ajouter de nouvelles lignes entre les lignes existantes tout en évitant la corvée d'avoir à les renuméroter."

C'est un compromis espace-temps que la plupart des programmeurs BASIC, qu'ils en soient conscients ou non, ont fait. Comme l'observent les auteurs de 10 PRINT, "[la numérotation des lignes par 10] était une reconnaissance qu'un programme est dynamique, plutôt que fixe et parfait."

GW-BASIC était sans doute la réalisation la plus avancée, la plus dynamique et la plus complète de BASIC non structuré à numéro de ligne jamais réalisée, mais à la fin des années 1980, Microsoft avait mis GW-BASIC au pâturage, simplement en ne le regroupant plus avec MS-DOS.

Ceux qui souhaitent utiliser GW-BASIC sur des systèmes d'exploitation modernes ont deux bonnes options : exécuter le fichier exécutable d'origine à l'aide de l'émulateur MS-DOS DOSBox ou télécharger PC-BASIC, un émulateur de langage presque parfait qui "vise bogue pour bogue une compatibilité avec Microsoft GW-BASIC" et a été programmé en Python par Rob Hagemans. Microsoft a cependant inclus une (quelque peu) nouvelle version de BASIC dans MS-DOS appelée QBASIC, qui offrait une approche alternative à la programmation dans le langage.

 

 

 

 

 

 

 

Recherche personnalisée