Nota: Dato che Richard H. Schwartz scriverà sulla versione originale di Dartmouth, l'avvertenza è che io sto scrivendo sulla prima versione che ho usato, che era su un PDP 8, credo, con quattro telescriventi.
Il linguaggio di programmazione BASIC (Beginner's All-Purpose Symbolic Instruction Code) fu inventato nel 1964 per permettere ai non programmatori di usare i computer.
Un programma BASIC consisteva di una serie di linee. Ogni linea aveva tre parti:
- Un numero di linea numerico, interpretato come un numero decimale. Le linee del programma erano sempre in sequenza rispetto a questo numero.
- Un verbo alfabetico (anche se i BASIC successivi hanno reso il verbo LET opzionale).
- Il resto della linea, che veniva analizzata in modo abbastanza ad hoc senza delimitatori (come il FORTRAN).
BASIC aveva solo variabili composte da una singola lettera e una cifra opzionale. All'inizio erano ammessi solo numeri in virgola mobile. Più tardi, un carattere successivo in una variabile poteva determinare il suo tipo, dato che furono introdotti altri tipi (stringhe dal 1965). L'interpretazione era puramente dinamica, senza convenzioni lessicali tra le linee, ma permetteva ad uno sviluppatore attento di fare qualcosa che assomigliava un po' ai blocchi, che erano stati introdotti nell'Algol 60. Molte delle caratteristiche erano ispirate al FORTRAN II, e come il FORTRAN, gli spazi erano irrilevanti.
BASIC era diffuso sui minicomputer e sui primi microcomputer. Aveva alcune caratteristiche interessanti che lo rendevano attraente sulle piccole macchine. Non era necessario avere un editor di testo. Digitando una linea con un numero di linea o si sostituiva l'istruzione esistente con quel numero di linea o si inseriva la linea al posto giusto. Questo, tuttavia, significava che quando un programma diventava più grande, uno spesso finiva i posti dove mettere nuove linee. Questo richiedeva che il programma dovesse essere rinumerato, il che cambiava tutti i numeri di linea in modo che fossero fattori di 10, sebbene i parametri permettessero di cambiare questo. (Il RENUM sul TRS-80 non era integrato. Bisognava comprarlo e caricarlo da una cassetta.)
Non c'erano strutture dati tranne la matrice, che fortunatamente era multidimensionale. Le prime versioni del BASIC avevano operazioni di matrice, che sono state eliminate dalle implementazioni successive piuttosto rapidamente. Alcune implementazioni, come l'originale Microsoft BASIC, avevano solo una matrice e nessuna struttura multidimensionale.
Non c'era il passaggio di argomenti/parametri, solo un GOSUB che poteva trasferire il controllo ad una certa linea, e un'istruzione RETURN incontrata avrebbe trasferito di nuovo all'istruzione che seguiva il GOSUB. Il mezzo di base per il trasferimento del controllo era il GOTO. L'unica cosa che poteva assomigliare ad una moderna struttura di controllo lessicale era il ciclo FOR, ma poiché il controllo era puramente dinamico, poteva sembrare altrettanto caotico di un mucchio di GOTO. C'erano due istruzioni IF, una delle quali trasferiva il controllo ad una linea, e l'altra, con THEN, poteva essere usata per fare un blocco pseudo-lessicale.
L'input e l'output di testo erano incorporati nelle istruzioni PRINT e INPUT. Un tipo di dichiarazione, la dichiarazione DATA, era ignorata nel flusso di controllo. Poteva essere usato per fornire un singolo flusso di dati a cui si accedeva con le istruzioni READ. Negli ultimi anni, la gente imparò a pervertire l'istruzione DATA per fare cose come contenere codice macchina e sequenze di terminali. Questo rendeva l'elencazione di un programma fastidiosa, ma portava a termine il lavoro.
Con i microcomputer, le versioni del BASIC iniziarono a incorporare dichiarazioni PEEK e POKE per permettere l'accesso arbitrario alla memoria. CALL permetteva l'esecuzione di un pezzo di codice macchina.
Molto più tardi furono progettati linguaggi chiamati "Basic". Questi sono stati per lo più linguaggi che prendono in prestito parte della sintassi del BASIC ma sono molto più moderni, con scoping lessicale e passaggio di parametri agli argomenti, e anche classi e simili.
Chi conosce questi linguaggi troverà senza dubbio il suddetto BASIC piuttosto orribile, e in effetti lo era. Tuttavia, ha insegnato una sorta di disciplina che è tristemente carente al giorno d'oggi, e probabilmente non mi ha causato una quantità significativa di danni cerebrali permanenti.
È stato probabilmente un caso che questo linguaggio abbia preso piede così bene. Non era nemmeno necessario andare in questa direzione a causa dei computer di bassa potenza. Versioni semplici di linguaggi simili al LISP erano altrettanto facili da implementare all'epoca, in modalità immediata senza la necessità di un editor di testo e di una fase di parsing separata. Tuttavia, modificare un programma esistente era molto più facile con il sistema BASIC, tanto che quando implementai il mio primo linguaggio semi-moderno, MOUSE, scelsi di usare un sistema di numerazione delle righe anche se i numeri di riga non erano usati nel linguaggio, ed era anche qualcosa con cui la gente aveva familiarità.