Pourquoi avons-nous pris la peine avec les numéros de ligne du tout? [fermé]

StackOverflow https://stackoverflow.com/questions/541421

  •  23-08-2019
  •  | 
  •  

Question

Lorsque vous écrivez quelque chose en BASIC, vous devez utiliser les numéros de ligne. Comme:

10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10

Mais je me demande: qui est venu avec l'idée d'utiliser les numéros de ligne du tout? Il est une nuisance, et à gauche tout à fait un « écho » dans le monde en développement (jeu de mots)!

Était-ce utile?

La solution

L'idée à l'époque était que vous pouvez facilement ajouter du code partout dans votre programme en utilisant le numéro de la ligne appropriée. Voilà pourquoi tout le monde utilise les numéros de ligne 10, 20, 30 .. donc il y a de place:

10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
25 PRINT "HOME"

Sur les premières interfaces de base était disponible pour, il n'y avait pas d'éditeur brillant, même pas quelque chose comme vi ou emacs (modifier ou DOS, heh). Vous ne pouvez imprimer votre programme sur la console et vous ajoutez de nouvelles lignes ou les remplacer, en donnant le numéro de ligne appropriée en premier. Vous ne pouvez naviguer dans le « fichier » (le programme a été gardé en mémoire, bien que vous pouvez enregistrer une copie sur le disque) avec le curseur comme vous êtes habitué à nos jours.

Par conséquent, les numéros de ligne ne sont pas seulement nécessaires pour que les étiquettes GOTO infâme, mais bien besoin de dire l'interprète à quelle position dans le programme de flux d'édition.

Autres conseils

Il a une histoire de Loong-loong.

La numérotation des lignes est en fait de Dartmouth BASIC, qui était la version originale du langage de programmation BASIC et a été partie intégrante d'un soi-disant temps système de partage Dartmouth. Ce DTSS avait un IDE rudimentaire, que rien ne fut plus qu'une ligne de commande interactive.

Ainsi, chaque ligne tapé dans ce « IDE », et en commençant par un numéro de ligne, a été ajouté au programme, en remplaçant une ligne précédemment stockée avec le même nombre; quoi que ce soit d'autre était supposé être une commande DTSS et immédiatement exécuté.

Avant il y avait une telle chose comme un (terminal d'affichage vidéo) VDT, nous anciens programmés sur des cartes perforées. Les cartes perforées colonnes réservées 72-80 pour les numéros de séquence - si vous laissiez tomber votre jeu de cartes et ils sont tous sortis de l'ordre, vous pouvez mettre la plate-forme dans un trieur de carte qui commanderait les cartes basées sur les numéros de séquence. À bien des égards, les numéros de ligne de base étaient similaires à celles des numéros de séquence.

Un autre avantage dans le monde de base est que dans les vieux jours BASIC a été interprété comme il a été exécuté. L'utilisation d'étiquettes plutôt que des numéros de ligne séquentiels pour les branches nécessiterait un premier passage pour ramasser toutes les étiquettes et leurs emplacements, alors que si vous utilisez les numéros de ligne l'interprète sait si elle doit commencer à numériser vers l'avant ou vers l'arrière pour la destination.

De retour dans la journée, vous ne disposez pas d'un 2 éditeur dimensions comme emacs ou vi. Tout ce que vous aviez été la ligne de commande.

Votre programme a été stocké dans la mémoire et vous devez taper dans les commandes en ligne simple pour modifier les lignes simples.

Si vous étiez un dieu Unix, vous pouvez le faire avec ed ou quelque chose, mais pour BASIC sur un C-64, VIC-20 ou TRS-80 vous souhaitez simplement écraser la ligne.

Alors une session pourrait ressembler à:

$10 PRINT "Hellow World"
$20 GOTO 10
$10 PRINT "Hello World"

Et maintenant, le programme fonctionnerait correctement.

Certains ordinateurs centraux anciens avaient même bornes de la ligne sans écran. Votre session entière a été imprimé sur papier dans l'encre!

Le "Qui?" seraient les inventeurs, Kemeney et Kurtz.

Après avoir lu les réponses, j'ai vérifié entrée de Wikipedia pour "Dartmouth BASIC", et était surpris d'apprendre

  

Le premier compilateur a été produit avant que le système de temps partagé était prêt. Connu sous le nom CardBASIC, il était destiné à la carte-lecteur standard basé sur le système de traitement par lots.

Alors, il semble que Paul Tomblin "obtient la place".

Ils ont pris naissance FORTRAN, à partir de laquelle BASIC a été dérivé. Cependant, en FORTRAN uniquement des lignes référencées par d'autres lignes (comme cibles GOTO) numéros nécessaires. En BASIC, ils avaient un usage secondaire, qui devait permettre l'édition de lignes spécifiques.

La réponse de Paul Tomblin est le plus complet, mais je suis surpris que personne n'a mentionné qu'une grande partie de l'objectif initial du projet était de donner un débutant-friendly environnement interactif en utilisant timesharing. (La vision de Kurtz et Kemeny pour « l'accès universel pour tous les élèves » était très en avance sur son temps à cet égard.)

Le système de base qui a été développé pour atteindre cet objectif présenté télétype ASR-33 (et plus tard d'autres) terminaux d'impression. Lorsqu'il est connecté à un timesharing compatible OS, ces montage autorisés et l'exécution des programmes de base en mode interactif (contrairement à travailler avec des cartes perforées), mais ils ne sont pas le curseur adressable. Les numéros de ligne ont été un moyen de débutant convivial à la fois préciser l'ordre des instructions du programme et permettre l'édition sans ambiguïté en l'absence d'un éditeur d'écran. L'entrée Wikipedia pour « éditeur de ligne », explique plus loin, et ceux qui ont déjà essayé d'utiliser un éditeur de ligne (comme Un * x « ed ») peut comprendre pourquoi Kurtz et Kemeny devraient être remerciés pour épargner le débutant d'avoir à apprendre la cryptique séquences de commandes nécessaires pour l'édition de texte de cette manière.

Retour dans les années cinquante, quand haute langages de programmation étaient dans leurs débuts, il n'y avait pas les bornes, pas de rédacteurs en chef, pas de moniteurs (oui, non moniteurs), juste carte puncheurs et les lecteurs (pour l'écriture et la lecture du contenu des cartes dans la mémoire d'un ordinateur) et des imprimantes (pour des résultats d'impression, naturellement). Plus tard, la bande a été introduite, mais c'est une autre histoire.

Chaque carte de pointage a son propre numéro. Il y avait plusieurs raisons à cela; de purement les maintenir dans l'ordre, afin de déterminer la séquence d'exécution. Chaque carte était une ligne de code (en termes d'aujourd'hui). Depuis, à cette époque, il n'y avait pas des constructions comme if..then..else, ou quelle que soit la variante de similaire, la séquence d'exécution devait être déterminée en quelque sorte. Alors GOTO ont été introduites. Ils étaient la base de boucles. Le terme « code spaghetti » vient de cette période également, puisque le code mal écrit était relativement difficile à suivre, comme des spaghettis sur une plaque:)

Je suppose que cela vient de l'assembleur, où chaque instruction a une adresse qui peut être sauté par une autre instruction.

En outre, les premiers ordinateurs ne disposaient pas de mémoire, et le stockage d'un numéro de ligne ne prend que deux octets (si elle est faite correctement). L'écriture d'une étiquette prend plus de mémoire, d'abord à l'endroit où l'étiquette qui est définie, dans une commande de saut.

Enfin, dans le bon vieux temps il n'y avait pas de rédacteurs en chef de fantaisie. Le seul « éditeur » était une simple interface de ligne de commande, qui a traité tout en commençant par un numéro faisant partie d'un programme et tout le reste des commandes à exécuter immédiatement. Exemple le plus important devrait être le Commodore 64.

dialectes les plus récents de base n'ont pas le besoin de numéros de ligne plus longtemps.

de base, si vous ne disposez pas d'un numéro de ligne, comment pouvez-vous une préforme

GOTO 10 

qui était un moyen de sauter des lignes, une bonne façon qui a été trouvé ... il y a plus de 20 ans!

aujourd'hui, les lignes nous aider à attraper des erreurs / exceptions parce que les moteurs de débogage sont faits pour nous envoyer dans le message que nous avons eu une exception sur la ligne xxx et nous sauter tout de suite à lui!

Imaginez un monde sans numéros de ligne ... comment un journaliste est versée sans les lignes?

  

« Maintenant que vous savez le roman, vous devez écrire un résumé avec pas plus de 50 lignes »

rappelez-vous ceci? Même à l'école, nous apprenons sur les numéros de ligne!

si elle n'a pas été inventé, quelqu'un déjà inventé à nouveau afin que nous puissions l'utiliser bien:)

Toutes les versions de numéros de ligne de base nécessaires. QBasic, par exemple, pris en charge les étiquettes. Vous pouvez ensuite passer à ceux qui GOTO (en ignorant de Dijkstra « Aller à l'état considéré comme dangereux » pour le moment).

La réponse est déjà au-dessus. Paul Tomblin a écrit (avec une mise en garde à zabzonk).

En fait, je dirais que toute réponse qui ne mentionne pas « cartes perforées » est incomplète, si elle ne mentionne ni les cartes perforées, ni FORTRAN, il est faux. Je peux dire que c'est définitivement droit parce que mes parents les deux cartes perforées utilisées sur une base régulière (ils ont commencé avec FORTRAN 66 et 77), puis migré vers base et COBOL dans les années 80.

Dans les premiers jours, la plupart des programmes ont été conclus avec des cartes perforées. Les cartes perforées étaient généralement entrées dans l'ordre, en général une instruction par carte, avec des étiquettes (cibles JMP / JSR) étant une carte d'instruction séparée.

Pour modifier votre programme, vous avez remplacé la carte.

Plus tard implémentations ajouté un numéro de séquence en option sur l'extrémité droite de la ligne, de sorte que quand / s'ils sont sortis de l'ordre, ils pourraient être séquencées par un lecteur automatisé.

Fortran utilisé deux étiquettes cibles numériques sur la gauche (col 1-5) et a laissé un bloc réservé à droite (73-80) pour la séquence ou un commentaire.

Lorsque BASIC a été initialement écrit, il a été décidé de déplacer les numéros de séquence vers la gauche, dans le champ de l'étiquette de FORTRAN, et pour permettre l'empreinte d'écraser la mémoire de cartes avant ... comme un mode d'édition. Cela a été destiné à l'environnement de développement interactif, mais a travaillé aussi bien avec des cartes. Et les cartes ont été utilisées dans certaines mises en oeuvre au début pour diverses raisons.

Gardez à l'esprit: De nombreux ordinateurs ont été lecteur de carte et de l'interface de l'imprimante à travers la fin des années 1970. Même tho bases » en mode interactif sont disponibles, la carte poinçonné programmes de base ont été fréquemment utilisés. Étant donné que beaucoup simplement se nourrissaient dans l'IDE, ils ont travaillé exactement de la même façon. Y compris une carte besoin « Exécuter » à la fin. Dans ce cas, on pourrait simplement virer de bord une carte de correction et une autre carte Exécuter pour exécuter à nouveau avec une variation sur une variable; De même, dans les programmes complexes, en ajoutant simplement une ligne corrigée d'une carte avant la course était suffisante pour modifier les problèmes sans dépenser un temps précieux à trouver la carte errante lui-même.

J'aime l'église du robot sur Futurama, les choses ont été écrites comme des murs

10 SIN
20 GOTO HELL

Sur la Speccy vous ne pouviez pas modifier une ligne sans le numéro de ligne.

Je les trouve très utile lors de l'appariement. Je n'ai pas pointer sur une ligne quand ma paire a le clavier, je peux dire « sur la ligne 74, ne devrait pas vraiment être que getMoreBeer ()? »

L'éditeur d'origine pour DOS était un utilitaire merveilleux appelé edlin . Vous ne pouvez modifier une seule ligne. Pour rendre la vie encore plus intéressant dans de nombreuses versions de BASIC, vous pouvez taper des lignes hors service, ligne 10, 20, 30, 25, 5, L'exécution serait par numéro de ligne de ligne non par l'ordre d'apparition.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top