BASIC devient structuré

Histoire du Langage Basic

Ordinateur

QBASIC est né des cendres de GW-BASIC, offrant aux programmeurs une version nouvellement structurée d'un ancien langage.

Au début des années 1980, BASIC était omniprésent dans les collèges et lycées américains, avec des micro-ordinateurs tels que le TRS-80 et l' Apple II démarrant directement sur le langage informatique, obligeant les étudiants à naviguer dans ces machines à l'aide de commandes BASIC.

BASIC protégeait ses utilisateurs des évènements à l'intérieur de leurs ordinateurs; les étudiants n'étaient pas tenus de maîtriser les mnémoniques de l'assemblage ou les complexités et les nuances de FORTRAN pour contraindre leurs ordinateurs à faire quelque chose d'utile.

BASIC était un langage convivial, la barrière à l'entrée dans le monde de la programmation informatique était faible, avec peu de compétences nécessaires pour écrire un petit programme intuitif et prêt à être exécuté. Tapez un programme à deux lignes comme celui illustré ci-dessous, exécutez-le et la sortie apparaît immédiatement à l'écran (ou, plus tôt, le télétype):

10 PRINT "TIME FLIES LIKE AN ARROW"
20 PRINT "FRUIT FLIES LIKE A BANANA"
RUN

TIME FLIES LIKE AN ARROW
FRUIT FLIES LIKE A BANANA
READY

Mais avec cette liberté semblable à celle d'un bac à sable, il y avait un inconvénient : le manque de structure.

D'autres langages de programmation, qui dans les années 1980 étaient enseignés en masse dans les universités - sans parler d'être utilisés dans les environnements industriels et universitaires - exigeaient généralement que les utilisateurs codent de manière structurée. L'une de ces langues était le Pascal.

Pascal a été créé par Niklaus Wirth, qui a nommé la langue d'après le mathématicien français du XVIIe siècle Blaise Pascal. Wirth a construit Pascal à partir d'ALGOL, l'un des premiers langages de programmation de haut niveau. Un comité de Zurich a conçu ALGOL à la fin des années 1950 pour qu'il soit indépendant de la plate-forme, c'est-à-dire qu'il ait une syntaxe et une structure universelles. Mais ALGOL n'a jamais atteint la popularité généralisée des HLL comme FORTRAN et COBOL.

L'informaticien suisse Niklaus Wirth, qui faisait partie du comité chargé de créer ALGOL, a publié une extension de ce langage, appelée Pascal, en 1970.

Pascal offrait un certain nombre d'avantages par rapport à ALGOL, notamment la vérification de type (un système de type qui assure le type de variable, les règles d'utilisation sont appliquées ; le mélange de types, comme les nombres réels et les entiers, peut entraîner des erreurs), la malléabilité avec les types de données (tels que les types de sous-gamme, qui restreignent les valeurs que les variables peuvent prendre, et les types complexes, construits à partir d'autres types de variables ), suppression des symboles au profit des mots-clés de style anglais et implémentation simplifiée de la plate-forme des compilateurs via un système intermédiaire appelé Pascal-P.

Pour répondre au besoin croissant de connaissances informatiques précoces, en 1984, l'Educational Testing Service (ETS) a adopté le Pascal comme langue de choix pour tester les élèves du secondaire en vue d'obtenir des crédits universitaires en Advanced Placement (AP) Computer Science.

ETS a choisi Pascal, plutôt que FORTRAN ou BASIC, en raison de l'approche structurée et fortement typée du langage ainsi que de sa popularité croissante et du respect croissant parmi les universitaires; les étudiants se spécialisant en informatique allaient de toute façon apprendre Pascal, alors pourquoi ne pas les exposer à un sous-ensemble AP du langage alors qu'ils étaient encore au lycée ?

Cette boucle de rétroaction, ainsi que des implémentations multiplateformes bien conçues (comme celles de Borland), ont fait de Pascal un langage préféré des éducateurs dans les années 1990. ETS a finalement abandonné Pascal au profit d'un sous-ensemble de C++ puis de Java; quoi qu'il en soit, Kurtz a qualifié les cours AP CS de "beaucoup trop compliqués".

Si Kurtz réussissait, il enseignerait des cours d'introduction à l'informatique avec une forme structurée de BASIC. Instruire les enfants en Java est "fou. C'est juste fou", a déclaré Kurtz, prenant particulièrement ombrage des règles de ponctuation de la langue, les comparant défavorablement avec FORTRAN.

Les théoriciens de l'éducation sonnaient l'alarme contre l'enseignement du BASIC aux étudiants presque dès la naissance du BASIC. Par exemple, dans l'article de 1971 "Science Teaching and Computer Languages", l'auteur Alfred M. Bork propose une anecdote révélatrice - et bientôt considérée comme représentative - sur les étudiants apprenant le BASIC :

... J'ai eu récemment plusieurs exemples de bons élèves, élevés en BASIC dans [leurs écoles], qui ont eu des problèmes psychologiques en passant du BASIC à une langue plus puissante. Cette expérience peut représenter une occurrence fortuite, ou ce peut être un phénomène observable pour toutes les langues. Au fur et à mesure que l'expérience se développe avec les langues, nous devons garder un contact étroit avec la «changeabilité». Une personne peut s'habituer à une langue pour qu'elle soit une « tétine » pour l'utilisateur, une retraite dans les moments de crise.

Bork était particulièrement consterné par la désinvolture de BASIC avec les sous-programmes. "La capacité de conceptualiser un gros problème comme une série de sous-problèmes solubles, faisant de petits problèmes un gros problème", est essentielle, écrit-il.

Mais "le BASIC est peut-être le plus faible à cet égard, car les sous-programmes ne sont possibles que par codage en ligne dans la plupart des formes de BASIC actuellement utilisées; cela semble pédagogiquement insatisfaisant."

En effet, la faiblesse de BASIC avec les sous-programmes n'est pas un hasard ; depuis les premières implémentations de Dartmouth BASIC, Kemeny et Kurtz admettent qu'ils n'ont fourni les mots-clés GOSUB/RETURN pour les sous-programmes qu'à contrecœur, qualifiant ostensiblement un sous-programme d'élément de luxe évitable dans le BASIC le premier manuel de l'utilisateur.

Étant donné que ces premières implémentations de BASIC ne pouvaient pas vraiment compartimenter les sous-programmes - en particulier, les sous-programmes ne pouvaient pas être nommés ou adressés avec autre chose qu'un numéro de ligne, et toutes les variables initialisées dans un programme étaient automatiquement de portée globale, jamais locale - le codage structuré était très difficile à retirer.

Ce n'est qu'en BASIC Sixième que de véritables sous-programmes, officiellement appelés «sous-programmes», ont vu le jour; mais à ce moment-là, les implémentations antérieures de Dartmouth BASIC avaient déjà proliféré en dehors de Dartmouth, laissant les avantages de cette version structurée stable largement isolés du campus de Dartmouth.

Dans son livre Mindstorms: Children, Computers, and Powerful Ideas (1980), Seymour A. Papert, défenseur de l'utilisation précoce de l'ordinateur dans les écoles et intimement impliqué dans la création du langage de programmation Logo, compare l'utilisation pédagogique par défaut de BASIC à la confiance dans la disposition du clavier QWERTY, arguant que les raisons de la domination de BASIC et QWERTY n'étaient pas rationnelles, mais simplement historiques.

Lorsque les ordinateurs étaient limités en mémoire et en vitesse, sans parler de leur prix élevé, l'utilisation de BASIC était légitime, car le langage n'imposait pas lourdement le matériel disponible. Pourtant, malgré l'omniprésence croissante des ordinateurs bon marché, Papert note que

... dans la plupart des lycées, [BASIC] reste presque synonyme de programmation, malgré l'existence d'autres langages informatiques qui sont manifestement plus faciles à apprendre et plus riches en avantages intellectuels qui peuvent découler de leur apprentissage. La situation est paradoxale. La révolution informatique vient à peine de commencer, mais engendre déjà son propre conservatisme.

... Les gens inventent des "rationalisations" pour justifier le statu quo.

Dans le cas du BASIC, le phénomène est allé beaucoup plus loin, au point de s'apparenter à une formation idéologique. Des arguments complexes sont inventés pour justifier les fonctionnalités de BASIC qui ont été initialement incluses parce que la technologie primitive les exigeait ou parce que les alternatives n'étaient pas suffisamment connues au moment où le langage a été conçu.

L'une de ces rationalisations, observe Papert, est que puisque la plupart des implémentations de BASIC offrent si peu de mots-clés, BASIC est un langage facile à apprendre. Mais ce n'est pas parce qu'un langage particulier, informatique ou autre, a peu de mots qu'il est nécessairement facile à comprendre ou à maîtriser.

S'attendre à ce que les élèves soient capables de naviguer avec succès dans les ordinateurs en apprenant uniquement le BASIC, explique Papert, équivaut à exposer les enfants uniquement aux traductions de poésie en pidgin anglais et à supposer qu'ils apprécieront toujours la gamme, la substance, l'étendue et le sens de la idées enchâssées.

Des critiques encore plus acerbes du BASIC sont relayées dans l'article "Programming Language Choice: A Positive Albeit Ambiguous Case for BASIC Programming in Secondary Science Teaching" (1986) de William W. Cobern. BASIC ne nécessite pas un style de programmation structuré, donc "la plupart des étudiants abordent les solutions de programmation BASIC à un problème avec peu de prévoyance ou de planification. Ils programment sur une base de" flux de conscience ".

Au fur et à mesure que les programmes s'allongent, le manque de planification se traduit généralement par ...code spaghetti", explique-t-il, car si vous imprimez le code des élèves et tracez une ligne à partir de chaque utilisation de GOTO jusqu'au numéro de ligne associé, le fouillis de lignes résultant sur le papier pourrait très bien ressembler à un bol de spaghetti. (Cobern note également que contrairement au BASIC, Pascal "exige une structure" et pourrait donc être une meilleure option pour les élèves du secondaire.)

Le code spaghetti a été aidé et encouragé par l'utilisation fréquente de l'instruction GOTO, qui effectuait un saut inconditionnel de n'importe quel numéro de ligne à n'importe quel autre numéro de ligne dans un programme - rendant ainsi fréquemment le code effectivement illisible, car tracer le chemin emprunté par l'interpréteur à travers un programme pourrait avoir d'innombrables rebondissements.

GOTO était le dernier refuge du programmeur débutant, et l'influent informaticien Edsger W. Dijkstra trouvait cette pratique déplorable. Dans l'article « Aller à l'instruction considérée comme nuisible » (1968), il déclare sans ambages : « Depuis un certain nombre d'années, je connais l'observation selon laquelle la qualité des programmeurs est une fonction décroissante de la densité des instructions GOTO dans les programmes qu'ils produisent."

GOTO est superflu et devrait être éliminé (sauf dans le langage machine), écrit-il, car "aller à l'instruction telle qu'elle est tout simplement trop primitif; c'est trop une invitation à gâcher son programme." Utilisez GOTO indifféremment - dans n'importe quel langage de programmation qui l'a rendu disponible, tel que BASIC ou FORTRAN - et une boucle sans fin pourrait en résulter.

Le plus célèbre et le plus dévastateur est la critique de Dijkstra du langage BASIC dans "How Do We Tell Truths that Might Hurt?" (1975). Après avoir écrit sur son inconfort face à la situation de l'informatique, Dijkstra pose une question : "Notre silence prolongé ne nuit-il pas à l'intégrité intellectuelle de l'informatique ?"

Répondant par l'affirmative, il énumère quelques "vérités désagréables", principalement liées à une variété de langages de programmation. Une de ces vérités est qu'Il est pratiquement impossible d'enseigner une bonne programmation à des étudiants qui ont déjà été exposés au BASIC : en tant que programmeurs potentiels, ils sont mentalement mutilés au-delà de tout espoir de régénération.

"Mentalement mutilé au-delà de tout espoir de régénération" - eh bien, c'est bien pire que les "problèmes psychologiques" causés par BASIC qu'Alfred M. Bork a documentés.

Mais ailleurs, Dijkstra a déployé une tendance élitiste en matière de programmation informatique en général : seuls les meilleurs programmeurs les plus talentueux doivent postuler, et les autres peuvent simplement faire autre chose. La programmation n'était pas pour tout le monde.

L'idée d'un langage comme BASIC, expressément conçu pour le prolétariat, était sans aucun doute antithétique à la vision du monde de Dijkstra. L'article de Harry McCracken dans Time cite la réaction de Kurtz à la critique selon laquelle BASIC n'était pas un moyen approprié d'apprendre la programmation informatique :

"Je vais prendre des risques et suggérer que la dégradation de BASIC par les professionnels n'était qu'un peu de jalousie - après tout, il nous a fallu des années pour développer nos compétences ; comment se fait-il que des idiots complets puissent écrire des programmes avec seulement quelques heures de compétence ?"

Il y avait des défenseurs du BASIC, comme le psychologue expérimental Eugene Galanter dans Kids and Computers (1983) : « BASIC vous permet d'écrire des programmes comme Mozart écrivait de la musique, en improvisant au fur et à mesure », ce qui signifie que la planification du programme et la programmation elle-même s'est souvent produite simultanément, presque dialectiquement, au prix d'une planification préalable rigoureuse.

Dans l'article de The Computing Teacher "Quand les enfants apprennent la programmation: antécédents, concepts et résultats" (1985), Ben Shneiderman a mené des études confirmant que les structures de programmation BASIC étaient plus conviviales que les autres langages. Un article dans Compute! décrit l'état des affaires BASIC dans les années 1980:

Les critiques de BASIC dénoncent souvent son manque de structure - il est non seulement possible, mais assez facile, d'écrire un programme BASIC si désorganisé que même le programmeur ne peut pas le déchiffrer facilement. D'un autre côté, la liberté de BASIC vis-à-vis des règles excessives favorisant la structure est la caractéristique même qui attire de nombreux programmeurs qui préfèrent un style plus libre.

Les langages structurés ont tendance à encourager la production de code plus lisible, mais ont aussi tendance à imposer plus de règles au programmeur. Il est peu probable que le débat sur la rigidité de la structure d'un langage de programmation se termine de si tôt.

Ainsi, une bataille rangée, des décennies dans la fabrication, s'est ensuivie: le BASIC dur-scrabble, langage pour les masses contre le monde de la programmation "respectable".

Le BASIC était positionné comme une sorte de Goliath du statu quo, et les voix de ses partisans étaient étouffées par la masse des critiques, portant leurs torches et leurs fourches, exigeant une fin rapide et violente de l'hégémonie du code d'instructions et la symbolique polyvalente du débutant vaguement procédurale et non structurée.

Pourtant, les livres BASIC non structurés à apprendre par soi-même se vendaient encore par dizaines de milliers. À partir de 10 PRINT : "BASIC était si canonique [de la fin des années 1970 aux années 1980] que certains livres de programmes BASIC n'ont même pas pris la peine de mentionner 'BASIC' sur leurs couvertures."

Un exemple de ces offres de 10 PRINT est le populaire What to Do After You Hit Return de Bob Albrecht : "Pas une seule fois l'acronyme BASIC n'est apparu sur la couverture avant ou arrière, indiquant peut-être que le langage était si répandu pour la programmation récréative qu'il n'était pas nécessaire d'être nommé."

L'écrivain scientifique pour enfants primé Seymour Simon a écrit un livre d'introduction à la programmation particulièrement populaire et prodigieusement illustré qui mentionnait cependant BASIC sur la couverture; intitulé The BASIC Book, il ne comptait que 32 pages aérées et était parfait pour l'élève du primaire. Dans ce document, Simon discute de plusieurs exemples de programmes simples numérotés en ligne écrits en BASIC générique, expliquant soigneusement des mots-clés tels que GOTO. Le livre BASIC a été publié en 1985.

Malgré la popularité durable du BASIC numéroté en ligne, Microsoft s'est rendu compte que le vent tournait. S'inspirant de Pascal, Microsoft a remodelé GW-BASIC en 1985, supprimant les numéros de ligne tout en révisant le langage pour permettre un style de programmation structuré et orienté procédure; de véritables sous-programmes (appelés sous-procédures) sont devenus disponibles, et des déclarations de variables et des types définis par l'utilisateur ont été ajoutés, entre autres améliorations.

Ce BASIC remanié, modernisé et simplifié s'appelait QuickBASIC, mais il n'était pas gratuit et n'était pas fourni avec un système d'exploitation. QuickBASIC n'était pas la première incursion de Microsoft dans le BASIC structuré.

Lorsque la société a sorti Macintosh BASIC en 1984 (mettant ainsi MacBASIC au pâturage) et AmigaBASIC en 1985 (remplaçant ABasiC de MetaComCo, qui était livré avec les premiers systèmes d'exploitation Commodore Amiga), qui étaient tous deux des implémentations très similaires, les rudiments de la programmation structurée avaient déjà prise en main: les numéros de ligne étaient facultatifs tandis que les étiquettes de style anglais (pour les sauts inconditionnels) étaient autorisées.

De plus, l'IDE avait progressé : il y avait maintenant des régions désignées séparément à l'écran dans lesquelles coder, exécuter des programmes et utiliser des outils de programmation.

Le premier compilateur QuickBASIC est sorti en août 1985 ; peu de temps après, un IDE a été fourni avec le compilateur, ainsi qu'un interpréteur à part entière ainsi que des améliorations supplémentaires dans les structures de contrôle.

Mais en 1991, Microsoft a également réalisé qu'un remplacement gratuit pour GW-BASIC était nécessaire - après tout, la programmation dans Microsoft BASIC est restée étonnamment inchangée depuis l'époque de l'Altair - et la société est tombée sur une solution évidente : QuickBASIC, en particulier le 1988 (mais pas la dernière) itération, version 4.5.

Mais pas le progiciel complet ; le compilateur et l'éditeur de liens QuickBASIC ont été supprimés, ainsi que quelques autres fonctionnalités. Le résultat s'appelait QBASIC (le «Q» signifiait «Quick») version 1.0, contenant un interpréteur et un IDE, fourni avec MS-DOS 5.0 et versions ultérieures ainsi que plusieurs itérations de Windows. GW-BASIC/BAS1CA n'était plus fourni avec MS-DOS.

QBASIC, comme la toute première version d'IBM PC DOS en 1981, proposait des exemples de programmes intégrés. Il y avait REMLINE.BAS, un utilitaire qui supprimait les numéros de ligne des anciens programmes BASIC; MONEY.BAS, un gestionnaire de finances personnelles ; NIBBLES.BAS, une version du jeu d'arcade Snake où le "serpent" et les "pellets", qui sont des nombres entiers, étaient tous fabriqués à partir de caractères ASCII; et GORILLA.BAS, parmi les jeux les plus étranges jamais distribués par Microsoft (bien que, certes, il ait une concurrence féroce, compte tenu de jeux comme DONKEY.BAS).

Une variante du jeu d'artillerie balistique, dans Gorillas, deux gorilles se tiennent perchés au sommet de gratte-ciel avec une réserve infinie de bananes explosives. L'objectif? En saisissant un angle et une vitesse précis, lancez une banane qui explose pour qu'elle frappe l'autre gorille et regardez le gorille survivant se lancer dans une étrange routine de célébration. Étant donné que le code source de Gorillas, qui utilisait de nombreuses fonctions graphiques, pouvait être examiné et modifié dans l'IDE QBASIC, le jeu servait d'outil pédagogique efficace.

L'IDE QBASIC est propre et bien conçu, avec des menus déroulants situés en haut de l'écran pour charger et enregistrer des programmes, copier et coller du texte dans le code, initialiser des fonctions et des sous-programmes, rechercher et remplacer du texte, afficher des sous-programmes et le corps des programmes dans un écran partagé (ou en passant à la fenêtre de sortie), en démarrant ou en poursuivant l'exécution d'un programme particulier, en déboguant dynamiquement des programmes et en sélectionnant des options (telles que la modification des couleurs de l'affichage).

De plus, lors du codage dans le "mode programme" de l'IDE, cliquer sur le "mode immédiat" - situé dans un panneau au bas de l'écran - exécute les commandes après la hâte (le mode immédiat correspond à peu près au mode direct d'entrée d'instruction dans GW-BASIC ).

Le curseur peut rapidement déplacer et modifier le code n'importe où sur l'écran d'une manière qui rappelle l'IDE BASIC du Commodore 64, mais avec le contrôle de la souris. L'interface QBASIC est à un pas de géant plus fonctionnelle que l'écran vide sans menu, avec le curseur clignotant, l'IDE basé sur la ligne de commande de l'ancien, mais elle n'est pas non plus assez intimidante pour effrayer le néophyte.

La vérification des erreurs s'est considérablement améliorée avec QBASIC. Exécutez un programme (en appuyant sur la touche F5) et s'il y a une erreur de syntaxe, le programme se terminera et mettra en surbrillance l'emplacement de l'erreur dans le code. Les points d'arrêt pourraient être activés ou désactivés, et la fonction "Trace" basculerait entre la fenêtre de sortie et le mode programme.

Les numéros de ligne étaient facultatifs dans QBASIC et jamais nécessaires. Au lieu de cela, chaque fois qu'un saut conditionnel ou inconditionnel (l'instruction GOTO était toujours autorisée) est requis, une étiquette de programme doit être créée.

Par exemple, le code suivant demande à l'utilisateur un nombre positif. Si un nombre négatif est entré, ce nombre est écarté au profit d'un nouveau, positif cette fois, que l'utilisateur entre (à l'infini, si l'utilisateur insiste pour être têtu) :

ENTRY:
PRINT "Enter a positive number: "
INPUT Num
IF Num < 0 THEN GOTO ENTRY
PRINT "You entered the number "; Num

L'étiquette dans le programme ci-dessus est appelée ENTRY et, comme toutes les étiquettes de programme, est suivie de deux-points (:). Le code spaghetti est toujours possible mais moins susceptible de se produire dans QBASIC que dans GW-BASIC, car au lieu d'avoir une adresse sur chaque ligne - c'est-à-dire sous la forme d'un numéro de ligne - de telles adresses (étiquettes) doivent maintenant être insérées à dessein tout au long du code avant que les sauts puissent prendre effet.

Bien sûr, l'élimination totale de l'instruction GOTO aurait considérablement réduit la probabilité de rencontrer du code spaghetti QBASIC, mais cela aurait également rendu QBASIC effectivement incompatible avec GW-BASIC.

La plupart des programmes GW-BASIC étaient compatibles tels quels avec QBASIC, ce qui signifie qu'un programme GW-BASIC pouvait être chargé et exécuté dans QBASIC et avoir de bonnes chances de fonctionner correctement sans aucune modification; par exemple, QBASIC laisse en place:

• les sauts inconditionnels sous la forme GOTO, GOSUB et RETURN ;
• la numérotation d'index de base non nulle des tableaux des BASIC d'autrefois ;
• la possibilité d'utiliser le mot-clé LET pour l'affectation des variables ;
• les fonctions mathématiques et de chaîne étendues ;
• la plupart des fonctions graphiques, y compris les instructions PUT et GET pour travailler avec les sprites ;
• les commandes de lecture et d'écriture de fichiers ;
• la panoplie de types de variables, mais QBASIC a ajouté une instruction de déclaration formelle qui permettait la « suppression » d'un caractère de type ajouté à la variable, bien que la déclaration de variable soit facultative. Au lieu d'initialiser une variable de chaîne de cette façon, comme cela a été fait dans GW-BASIC :

10 NAME$="GATES"

Une variable de chaîne serait à la place déclarée puis initialisée sans signe dollar ($) nécessaire :

DIM N AS STRING
N = "GATES"

En plus des chaînes, des entiers, des entiers longs et des variables simple et double précision peuvent également être déclarés et initialisés dans QBASIC sans avoir besoin des caractères de type de GW-BASIC (c'est-à-dire le % pour les entiers, ! pour les simples- précision et # pour les variables à double précision).

Mais les similitudes entre GW-BASIC et QBASIC impliquaient également que l'ancien style non structuré de programmation BASIC était toujours traitable par QBASIC pour les utilisateurs qui n'étaient pas encore à l'aise ou familiers avec le style de programmation structuré que des langages comme Pascal rendaient monnaie courante.

Écrire des programmes dans un style structuré et orienté procédure signifiait renoncer aux sauts inconditionnels ad hoc au profit de structures de blocs, de sous-programmes et de fonctions, de boucles FOR finies et de sauts conditionnels. Lorsque les utilisateurs étaient prêts à exploiter les aspects de programmation structurée de QBASIC, ils rencontraient ces améliorations :

• Aucun numéro de ligne requis ;
• Outre les sauts inconditionnels vers les étiquettes, les instructions DO...LOOP, IF...THEN, FOR...NEXT, SELECT CASE et DO...WHILE pour regrouper des blocs de code ;
• Les sous-programmes, appelés sous-procédures (SUB) dans QBASIC, qui étaient des blocs de code autonomes.

Dans les versions précédentes de Microsoft BASIC, les "sous-programmes" n'étaient que de manière informelle et nominale, car le code ne pouvait pas être isolé du reste d'un programme, toutes les variables étant automatiquement de portée globale sans exception (c'est-à-dire que les variables pouvaient être consultées et modifiées n'importe où dans un programme).

Avant QBASIC, il n'était pas nécessaire de passer une sous-routine à la valeur d'une variable, car toutes les variables étaient accessibles partout.

Ce n'est pas le cas dans QBASIC, où les sous-procédures peuvent prendre des paramètres, et toutes les variables créées à l'intérieur des sous-procédures ont une portée locale (c'est-à-dire qu'elles ne sont accessibles que dans la sous-procédure), tandis que les variables non transmises du module principal à la sous-procédure sont par défaut inaccessibles dans la sous-procédure, bien qu'en utilisant explicitement le mot clé SHARED à l'intérieur de la sous-procédure, une variable accessible une seule fois dans le module principal devienne globale.

Considérez la sous-procédure suivante, qui prend un argument :

SUB Cnt (Value)
Value = Value + 1
PRINT Value END SUB

Dans le module principal, la ligne

Cnt 6

affichera le nombre 7, puisque 6 a été passé en argument à la sous-procédure Cnt - une sous-routine dont le seul but est d'incrémenter la valeur passée d'une unité et d'afficher ce nombre à l'écran:

• Les fonctions sont similaires aux sous-procédures, mais elles nécessitent au moins un paramètre et doivent retourner une valeur au module principal.

En programmation informatique, une routine récursive est une procédure, une sous-routine ou une fonction qui s'appelle elle-même ; essentiellement, la sortie suivante dépend de l'entrée précédente. Il est, en théorie, possible de transformer n'importe quel algorithme qui a une structure itérative (c'est-à-dire des boucles) en une structure récursive.

Il est exceptionnellement difficile d'écrire un véritable code récursif dans les dialectes non structurés de première génération de BASIC, car une "condition de terminaison" (ou "cas de base"), qui est nécessaire pour empêcher une routine récursive de devenir incontrôlable, ne peut pas être définie sans avoir accès aux variables locales.

Mais un problème de Compute! Le magazine de 1982 présente un moyen possible d'écrire du code récursif avec du BASIC non structuré en utilisant une approche de pile premier entré, premier sorti (FIFO) afin de résoudre le casse-tête des tours de Brahma (ou Hanoï) :

L'ordinateur doit être capable de se souvenir des "adresses de retour"... Ainsi, avant GOSUBbing, "l'adresse" à laquelle RETURN est placée sur la pile de l'ordinateur et plus tard retirée de la pile par RETURN. Il y a une limite au nombre d'adresses de retour qui peuvent être poussées sur la pile.

Ce n'est normalement pas un problème puisque la plupart des sous-programmes reviennent directement via RETURN, soulageant la pile du numéro d'adresse. Les sous-programmes récursifs et auto-appelants, cependant, ne sont pas RETURNing. C'est GOSUB-GOSUB-GOSUB, etc. À moins que la récursivité ne soit soigneusement gérée, la pile pourrait rapidement se remplir d'adresses de retour et on dit alors qu'elle déborde.

Inutile de dire que la programmation de cette manière détournée et indirecte est un gâchis contre nature. Mais comme certaines variables, telles que celles des sous-procédures, peuvent avoir une portée locale, QBASIC (et QuickBASIC) - comme Pascal et la plupart des autres langages structurés - est plus que capable d'exécuter rapidement et facilement des routines véritablement récursives.

Jetons un coup d'œil à un exemple de fonction récursive dans QBASIC pour générer des factorielles. En mathématiques, un factoriel, désigné par un entier positif suivi d'un point d'exclamation (!), est le produit d'un nombre entier et de tous les nombres entiers en dessous ; par exemple, 5 ! est égal à 5 X 4 X 3 X 2 X 1, soit 120.

 Nous pouvons coder une fonction factorielle de manière récursive en QBASIC comme suit :

FUNCTION Fact (n)
    IF n = 0 THEN
        Fact = 1
    ELSE
        Fact = n * Fact(n - 1)
    END IF
END FUNCTION

Notez la condition de fin (ou cas de base) dans le code : si la variable n est égale à 0, alors la fonction Fact renvoie 1.

Appelez Fact en mode immédiat en tapant

? Fait(5)

et l'écran de sortie affiche 120.

Microsoft n'a plus inclus QBASIC dans Windows à partir de Windows 2000, lorsque DOS a été effectivement retiré. QB64, un compilateur BASIC autonome (écrit en BASIC) qui est entièrement compatible avec l'ancien code QBASIC mais étend le langage, prend le relais et poursuit la tradition QBASIC sur une variété de matériels et de systèmes d'exploitation modernes.

Microsoft n'a pas été impliqué dans la conception ou le développement de QB64. L'impulsion pour QB64 a été expliquée dans une interview de développeur de 2008 dans le défunt magazine en ligne BASIC Pcopy! (le titre du magazine fait référence à une déclaration graphique BASIC qui copie le contenu d'un écran à un autre).

"Je pense que les versions plus modernes de BASIC (comme Visual Basic) sont beaucoup trop complexes pour les débutants", a expliqué Rob (le développeur, son surnom est Galleon).

"VB vous confronte à un million d'options et il peut être difficile pour les nouveaux programmeurs de comprendre comment faire interagir les objets sélectionnés dans la barre d'outils. Il existe bien sûr de nombreux dérivés de BASIC, chacun avec un objectif particulier. L'objectif de QB64 est sur la compatibilité QBASIC et l'extension de cette capacité." (Ceux qui souhaitent exécuter le fichier exécutable QBASIC d'origine doivent télécharger l'émulateur MS-DOS DOSBox.)

Peut-être sans surprise, la prolifération des dialectes BASIC s'est poursuivie avec la génération structurée et orientée procédure de la programmation BASIC; bien que QBASIC soit le plus populaire, en raison de sa distribution gratuite dans MS-DOS et des premières versions de Windows, ce n'était pas la seule implémentation BASIC structurée.

Un autre particulièrement populaire était Borland Turbo Basic, qui est devenu plus tard PowerBASIC. Turbo Basic a ses racines dans BASIC/Z, un compilateur écrit par Robert S. Zale, un entrepreneur iconoclaste et un homme de la Renaissance qui possédait et dirigeait des magasins de musique et une agence d'assurance tout en apprenant lui-même le langage d'assemblage.

Zale a écrit BASIC/Z au milieu des années 1980, qui a suscité l'intérêt de Borland ; Borland a fait appel à Zale pour créer Turbo Basic pour l'entreprise. À la fin des années 1980, cependant, Borland a abandonné le produit, ce qui a incité Zale à acheter les droits de Turbo Basic. Il a changé son nom en PowerBASIC, mettant à jour le compilateur au fil des ans pour fonctionner avec des systèmes d'exploitation en constante évolution.

En Grande-Bretagne, il y avait le BBC Microcomputer System d'Acorn Computers, un ordinateur 8 bits du début des années 1980 qui a succédé à l'ordinateur domestique Acorn Atom. Le BBC Micro avait une technologie MOS 6502 avec BBC BASIC stocké dans la ROM. BBC BASIC a une histoire d'origine unique.

La British Broadcasting Corporation (BBC) a créé une émission centrée sur la programmation informatique et avait besoin d'un ordinateur - et d'un langage de programmation - pour la remplir. Un système exécutant Microsoft BASIC a été rejeté comme n'étant pas à la hauteur de son public, alors la BBC a fait le tour, considérant Dragon, mais s'est finalement associée à Acorn.

La société était très avancée dans le développement du Proton, qui allait succéder à l'ordinateur Atom. La BBC a aimé le Proton et, après avoir travaillé avec Acorn pour rendre le BASIC du Proton (une évolution du BASIC d'Acorn) plus compréhensible, plus proche de l'anglais et plus structuré, le Proton a été renommé BBC Micro et a fait ses débuts sur The Computer Program spectacle en janvier 1982.

L'ordinateur a été un succès instantané; les écoles britanniques se sont précipitées pour équiper leurs laboratoires informatiques de BBC Micros pendant que les enfants apprenaient le dialecte BASIC sans Microsoft. BBC BASIC a été porté sur IBM PC en 1986 et Windows en 2001, mais le langage n'a jamais pris pied aux États-Unis et n'a pas non plus eu beaucoup de succès dans le reste de l'Europe.

SuperBASIC était un autre dialecte BASIC structuré à émerger de la Grande-Bretagne. Sinclair Research, la société d'électronique britannique qui a lancé le ZX Spectrum au début des années 1980, avait de grands projets pour sortir un ordinateur SuperSpectrum.

En plus du matériel et des périphériques mis à niveau, l'ordinateur comporterait également une nouvelle version de BASIC développée par l'ingénieur logiciel Janice Rosemary Jones. Elle a été recrutée par Tony Tebby, diplômé en physique d'Oxford et codeur autodidacte, pour apporter une partie de la même structure basée sur les procédures présente dans BBC BASIC à SuperBASIC.

Malgré l'effondrement du projet SuperSpectrum, SuperBASIC a été inclus dans la ROM du prochain ordinateur de Sinclair: le Sinclair QL (Quantum Leap) haut de gamme de 1984, dont Tebby a conçu le système d'exploitation appelé QDOS.

Mais QDOS avait des routines spéciales pour l'intégrer à SuperBASIC, ce que Tebby a déclaré plus tard être "une terrible erreur [qui] a compromis l'intégrité du système d'exploitation". Le QL a été interrompu deux ans plus tard, Jones a quitté Sinclair et est devenu un romancier primé (sous le nom de plume Jan Jones), et SuperBASIC a toujours ses fans aujourd'hui.

Le milieu des années 1980 a également vu l'émergence de Locomotive BASIC, intégré à la ROM de la série d'ordinateurs britanniques Amstrad CPC (Colour Personal Computer). Amstrad, une société d'électronique, a été fondée par Alan Sugar, qui jusqu'au début des années 1980 n'avait pas montré beaucoup d'intérêt pour les ordinateurs.

Mais ensuite, Sugar a vu le succès du ZX Spectrum et a changé d'avis. "Nous devions passer à autre chose et trouver un autre secteur ou produit pour nous ramener à la croissance des bénéfices", écrit-il dans son autobiographie.

La société a commencé à développer l'ordinateur en 1983, qui aurait une interface moniteur, clavier et cassette tout en restant relativement peu coûteux. Le développement du produit a commencé de manière désastreuse. Au début, le processeur 6502 a été choisi pour faire fonctionner la machine, mais cela s'est avéré trop lourd à gérer : le chef de l'équipe, Paul Kelly, a abandonné le projet.

Une nouvelle équipe de développement a été constituée, composée d'amis d'enfance Roland Perry et William Poel, tous deux déjà très impliqués dans le monde de l'informatique. Perry avait un certain nombre de contacts qui, selon lui, pourraient aider Amstrad à terminer la machine. "Je connaissais beaucoup de gens travaillant dans ce domaine, et je savais exactement ce qui était nécessaire en termes de composants", se souvient-il. "Vous avez besoin d'un interprète Basic, vous avez besoin d'un générateur de sons, vous avez besoin d'une certaine résolution sur l'écran.

Beaucoup d'ordinateurs ne pouvaient faire que quatre couleurs avec une résolution limitée, et je voulais faire mieux que ça." Perry s'est déplacé à travers l'Angleterre, sortant le clavier et le lecteur de cassettes de l'Amstrad et demandant contact après contact qu'il avait dans l'informatique et l'électronique comment ils allaient construire le reste de la machine.

Perry a reçu d'excellents conseils d'un ami d'Acorn, qui lui a dit de contacter Locomotive Software. Arrivé à Locomotive en tant que représentant d'une "grande entreprise britannique" sans nom tout en essayant de cacher les intentions d'Amstrad, le logo Amstrad sur l'étui du clavier a été remplacé par le mot "Arnold", un anagramme du prénom de Perry, Roland.

Au moment de la visite de Perry, Locomotive avait presque terminé Mallard BASIC pour le deuxième processeur BBC Micro Z80 (une unité d'extension pour l'ordinateur); Mallard BASIC était un interprète Business Basic conçu pour la vitesse et ainsi nommé d'après la locomotive à vapeur la plus rapide au monde, la London and North Eastern Railway 4468 Mallard.

Acorn a choisi Locomotive au lieu de Microsoft pour écrire l'interpréteur du Z80 pour deux raisons: des coûts inférieurs et la promesse de Locomotive de coder un système de fichiers indexé afin que le logiciel de base de données ne soit pas nécessaire. Amstrad a été impressionné par Locomotive, ils ont donc engagé la société pour construire un interpréteur BASIC pour le CPC. Mallard BASIC avait été codé en assembleur Z80.

Bien que Locomotive ait déclaré pouvoir réécrire Mallard pour le processeur 6502, ils ont néanmoins encouragé Amstrad à simplement opter pour le Z80 pour le CPC ; après tout, les délais approchaient rapidement et Locomotive pouvait rapidement fournir à Amstrad une version améliorée de Mallard BASIC orientée vers le divertissement personnel plutôt que les affaires.

Ainsi, plusieurs mois plus tard, Locomotive BASIC a été gravé dans la ROM de l'Amstrad CPC : la moitié de la mémoire a été utilisée pour le Mallard BASIC original, et l'autre moitié pour les améliorations CPC uniquement.

Locomotive BASIC disposait d'un riche ensemble de commandes graphiques et sonores facilement accessibles via des mots-clés (tout en étant séparés du micrologiciel, de sorte que même d'autres langages informatiques de haut niveau pouvaient accéder à ces mêmes fonctionnalités multimédias, les utilisateurs n'ayant pas à interagir directement avec le matériel)— y compris la possibilité de travailler avec un maximum de huit fenêtres ainsi qu'un son stéréo multicanal - mais il manquait certaines fonctionnalités de programmation structurées standard de l'époque (par exemple, des numéros de ligne étaient nécessaires).

Les commandes d'interruption logicielle EVERY et AFTER de l'interpréteur étaient particulièrement puissantes, permettant d'appeler des sous-programmes à des intervalles spécialement programmés. Bien que le CPC soit mort en 1990, Mallard BASIC, fonctionnant sur le système d'exploitation CP/M Plus, a survécu dans la gamme d'ordinateurs personnels Z80 Amstrad PCW.

De retour aux États-Unis, cependant, Kemeny et Kurtz travaillaient dur sur leur propre BASIC.

 

 

 

 

 

 

 

Recherche personnalisée