2010-03-12 8 views
20

Eventuali duplicati:
Why did we bother with line numbers at all?Perché BASIC aveva linee numerate?

Sono curioso di sapere il motivo per cui le prime versioni del linguaggio di programmazione BASIC avevano linea numerazione come in:

42 PRINT "Hello world!" 

Gli editor di testo indietro allora non aveva la numerazione delle linee?

EDIT: Sì, so che sono utilizzati per GOTO, ma perché? Intendo dire che le etichette erano troppo computazionalmente costose?

+13

Quando ho caricato la pagina, non c'erano risposte. Quando ho finito di digitare il mio, ce ne sono stati sei, incluso il mio. Risposta overflow. –

+3

Penso che potresti aver colpito il pulsante nostalgia qui ... Un sacco di * affezionati * ricordi dei tempi andati ... – NealB

+1

Duplicato: http: // stackoverflow.it/questions/541421/why-did-we-fast-with-line-numbers-all-tutti – gnovice

risposta

26

Molti microcomputer avevano un interprete BASIC nella ROM che iniziare al momento del boot. Il problema era che non c'era un editor di testo o un file system di cui parlare. Hai avuto un prompt interattivo per fare tutto attraverso. Se si desidera inserire una riga di codice, è stata appena digitata, iniziando dal numero di riga. Lo inserirà nel posto giusto nel tuo codice. per esempio:

 
>10 print "hello" 
>30 goto 10 
>20 print "world" 
>list 
10 PRINT "hello" 
20 PRINT "world" 
30 GOTO 10 
> 

(In questo esempio,> è il prompt BASIC)

Se si voleva cancellare una linea, è necessario digitare qualcosa come ERASE 20. Alcuni sistemi davvero fantastici ti hanno fornito un editor di riga (es. EDIT 10) E se non hai pianificato i numeri di linea e sono usciti (come inserisco una linea tra 10 e 11?) Alcuni sistemi ti davano un comando RENUM che rinumerare il codice (e regolare GOTOs e GOSUBs in modo appropriato).

Fun Times!

+7

Non solo, ma non c'era internet in quei giorni. Volevi accedere a un computer su cui eri stato spostato dove si trovava. Salita. Entrambi i modi. E quando Ferruccio dice di non avere filesystem, non c'è niente di simile a uno storage permanente sui primi sistemi di microcomputer. Spegnilo, tutto è sparito. Alla fine abbiamo avuto la possibilità di salvare i programmi su cassetta. A volte potresti anche ricaricare il programma dal nastro, se sei riuscito a ottenere il livello giusto. –

9

Sono stati usati come etichette per GOTO e GOSUB

Ti piace questa:

10 PRINT "HELLO WORLD" 
20 GOTO 10 

Non ci sono state le etichette nome in alcune prime versioni BASE

Sono stati anche richiesti se si voleva inserire una linea tra 2 linee di codice esistenti, perché nei primi tempi non c'erano editor di testo completi. Tutto doveva essere digitato nell'interprete "interattivo".

Quindi, se hai scelto:

15 PRINT "AND THE UNIVERSE" 

Il programma sarebbe diventato:

10 PRINT "HELLO WORLD" 
15 PRINT "AND THE UNIVERSE" 
20 GOTO 10 

Quando è stato eseguito fuori numeri di riga, è possibile eseguire uno strumento di "rinumerazione" per rinumerare tutte le linee nella vostra programma, ma nei primissimi giorni del Commodore 64 e di altri computer di casa, non avevamo nemmeno quello, quindi dovresti rinumerare manualmente. Ecco perché hai dovuto lasciare intervalli di 10 o più nei numeri di riga, in modo da poter aggiungere facilmente delle linee in mezzo.

Se si vuole provare l'interprete Commodore 64, controlla questo C64 emulatore scritto in Flash: http://codeazur.com.br/stuff/fc64_final/ (nessuna installazione richiesta)

+0

("Quindi se hai digitato") Puoi nominare l'editor di testo a cui ti stai riferendo? –

+1

Non c'era un editor di testo, solo una riga di comando dove dovresti digitare il tuo codice –

+0

Sì, ma c'è un nome per questo riga di comando? Non riesco a trovare alcun riferimento su Internet, niente screenshot, niente. –

3

I numeri di riga sono stati utilizzati in flusso di controllo. Non c'erano sottoprogrammi denominati. È dovuto usare GOSUB 60, per esempio, per chiamare la subroutine partire dalla riga 60.


Sul aggiornamento, non tutte le lingue avevano etichette, ma tutte le lingue aveva i numeri di riga in una sola volta. Un tempo, tutto era a schede perforate. BASIC è stato uno dei primissimi linguaggi interattivi, in cui è possibile digitare qualcosa e ricevere immediatamente una risposta. I numeri di linea erano ancora la tecnologia attuale.

Etichette sono una spesa extra. Devi tenere traccia della correlazione tra l'etichetta simbolica e il codice oi dati a cui si riferisce. Ma se ogni linea ha un numero di riga (e se tutti i trasferimenti di istruzioni di controllo di flusso si riferiscono sempre all'inizio di una riga), allora non è necessaria una tabella di simboli separata.

Inoltre, tenere presente che gli interpreti BASIC originali non avevano bisogno di una tabella di simboli per le variabili: c'erano 26 variabili denominate A-Z. Alcuni erano sofisticati e avevano An-Zn.Alcuni sono molto fantasiosi e hanno aggiunto una distinzione tra stringa, intero e virgola mobile aggiungendo "$" o "%" dopo la variabile. Ma non era richiesta alcuna tabella dei simboli.

+0

Il problema non era "radicale": gli assemblatori avevano etichette ben prima che Algol-60 li usasse. È la risoluzione "multiple-pass" delle etichette. I primi assemblatori (e compilatori) dovevano leggere l'intera sorgente del programma più volte per risolvere i nomi delle etichette. E 'stato solo lento. –

+0

@ S.Lott: mi sembra di aver perso il mio commento "ALGOL-60". –

+0

Motivo del downvote, per favore. –

2

IIRC, i numeri di riga erano principalmente utilizzati come etichette per le istruzioni GOTO e GOSUB, poiché in alcuni (più?) Aromi di BASIC non era possibile etichettare una sezione di codice.

10

La numerazione originale della linea BASIC era in realtà una parte integrante del linguaggio e utilizzata per il flusso di controllo.

I comandi GOTO e GOSUB prenderebbero la linea e la userebbero per il controllo del flusso. Questo era comune allora (anche se ora è scoraggiato).

+4

Mentre la risposta non è sbagliata, una risposta più completa indicherebbe che la mancanza di editor di testo interattivi ha reso la numerazione delle linee un male necessario; in modo che si potessero inserire linee aggiuntive di codice tra le linee inserite in precedenza. –

+0

@roygbiv: questa era davvero la ragione più importante dell'esistenza dei numeri di riga in BASIC –

+0

@Philippe: "un motivo importante", non il più importante. I programmi non erano interessanti senza GOTO o GOSUB. –

8

In BASIC, i numeri di riga indicano la sequenza.

Inoltre, molti editori precedenti non erano per i file, ma semplicemente per le linee ("line editor", ad esempio ed, the standard editor). Con la loro numerazione in questo modo, sapevi su quale linea stavi lavorando.

4

Erano etichette per dichiarazioni, in modo da poter GOTO il numero di riga. Il numero delle istruzioni non doveva necessariamente corrispondere ai numeri di riga fisica nel file.

+0

In effetti era comune e praticamente necessario lasciare spazi vuoti tra 5 e 10 per consentire di effettuare aggiunte senza dover rinumerare l'intero programma. – Buggabill

2

Sono stati utilizzati anche da l'editor - vale a dire che ha detto:

edit 100 

per modificare la linea 100.

+5

@Neil: hai avuto un _editor_? Non avevamo bisogno di nessun _editor_! Abbiamo appena battuto di nuovo la riga. –

+0

@John Tutte le versioni di BASIC che ho mai usato, dal BASIC originale di Dartmouth, avevano un editor di riga integrato. Certamente quelli di Microsoft (molte versioni) e quello su DEC-System 10 (che è più retrò che puoi ottenere) lo hanno fatto. –

+0

@Neil: era un "editor di riga" o era l'interprete? Era un programma separato? Come l'hai iniziato? –

2

Come altri hanno fatto notare, questi numeri di riga sono stati utilizzati come parte della subroutine.

Naturalmente, c'è una ragione per cui questo non è più fatto. Immagina di dire GOTO 20 alla riga 10, e in seguito ti rendi conto che devi scrivere 10 righe di codice dopo la riga 10. Improvvisamente ti stai scontrando contro 20, quindi devi spostare la subroutine più lontano (numeri più alti) e modificare il valore GOTO, o è necessario scrivere un'altra subroutine che salta più lontano nel codice.

In altre parole, è diventato un incubo del vero codice spaghetti e non è divertente da mantenere.

7

Nel corso della giornata tutte le lingue avevano numeri di sequenza, tutto era su schede perforate. C'era una linea per carta. I mazzi di carte hanno costituito il tuo programma.

Quando hai lasciato cadere le carte, le inseriresti in un ordinatore di carte che utilizzava quei numeri di sequenza.

E, naturalmente, erano referenziati dai costrutti del flusso di controllo.

+0

divertente e corretto! –

+0

Probabilmente dovresti fornire un link per dire quali sono le schede perforate, perché sulla base della maggior parte delle altre risposte, la maggior parte delle persone qui non ha familiarità con esse. – Gabe

2

Alcuni editor avevano solo una modalità "sovrascrittura" e nessuna "inserimento". Ciò ha reso estremamente doloroso il montaggio del codice esistente. Con l'aggiunta di questa caratteristica numero di riga, si potrebbe invece patchare il codice esistente da qualsiasi punto all'interno del file:

100 PRINT "Broken Code" 
200 PRINT "Foobar" 
... 
101 patch the broken code 
102 patch more broken code 

perché i numeri di linea non devono essere ordinati all'interno del file.

5

Sul C64, non c'era nemmeno un vero editor (almeno integrato). Per modificare una parte del programma, dovresti fare qualcosa come LIST 100-200, e quindi saresti in grado di modificare solo quelle linee che erano attualmente visualizzate sullo schermo (senza scorrere verso l'alto!)

+0

Hai qualche riferimento per questo 'editor'? –

+1

Sì: l'editor era fondamentalmente la memoria dello schermo, abbastanza comune su macchine a 8 bit. –

+3

Beh, faceva parte dell'interprete che è iniziato non appena è stato acceso il C64. Era parte della ROM non modificabile (e ti lasciava solo con circa 40k della 64k di RAM totale, perché prima doveva essere copiato nella RAM). È stato usato come shell di base (per caricare programmi, ecc.). Forse vuoi provare un emulatore C64 (http://en.wikipedia.org/wiki/List_of_computer_system_emulators#Commodore_64) - è divertente :-) –

7

A simple google reveals what wikipedia has to say about it:.

I numeri di riga sono stati un elemento necessario della sintassi in alcuni linguaggi di programmazione più vecchi come GW-BASIC [2] La ragione principale per questo è che la maggior parte dei sistemi operativi al momento mancava di editor di testo interattivi; poiché l'interfaccia del programmatore era solitamente limitata a un editor di riga, i numeri di linea fornivano un meccanismo attraverso il quale le linee specifiche nel codice sorgente potevano essere referenziate per la modifica e con le quali il programmatore poteva inserire una nuova linea in un punto specifico. I numeri di riga fornivano anche un comodo mezzo per distinguere tra codice da inserire nel programma e comandi da eseguire immediatamente quando inseriti dall'utente (che non hanno numeri di linea).

+0

@Helltone - Se questo non risponde alla tua domanda, allora nessuna delle risposte, rispondi la tua domanda. –

+0

@ S.Lott Non penso che sia arrogante chiedere qui. Molti di noi non hanno accesso a Kurtz. Fai? –

+0

@zneak - Il mio commento si riferisce al fatto che Helltone aveva downvoted il mio post con un commento che diceva "Questo non risponde alla mia domanda". Da allora ha cancellato quel commento. La mia risposta indica semplicemente che la mia risposta incapsula ciò che gli altri stanno dicendo, quindi etichettare questa risposta come "errata" sta implicitamente etichettando le risposte di tutti gli altri come errate. Non ha nulla a che fare con l'arroganza. –

2

E 'stato iscritto nel sulla riga di comando in molti casi (o era, il mio vecchio Commodore 64) quindi non ci potrebbe sempre essere un editor di testo, o se c'era, era piuttosto semplice .

Inoltre, è necessario eseguire GOTO e simili, oltre a inserire linee tra le altre.

cioè:

10 PRINT "HELLO" 
20 GOTO 10 
15 PRINT " WORLD" 

dove sarebbe andata nella logica 10 15 20

2

I numeri di linea erano una PARTE della lingua, in alcuni MOLTO presto, anche il sistema operativo era solo queste semplici linee. Tutto quello che avevi era una riga alla volta da manipolare. Prova a scrivere un sistema di contabilità usando i file di programma 1-4k e segmentandolo per dimensione per ottenere risultati. Per modificare hai usato i numeri di riga per dire cosa stavi modificando. Quindi, se hai inserito come:

10 PRINT "howdy" 
20 GOTO 10 
10 PRINT "WOOPS" 
15 PRINT "MORE WOOPS" 
20 
RUN 

si otterrebbe:

WOOPS 
MORE WHOOPS 

Il semilavorato 20 sarebbe effectivly cancellare quella linea.