# BASIC

Il BASIC è un linguaggio di programmazione ad alto livello sviluppato nel 1964 presso il Dartmouth College sul calcolatore GE-225 dai professori John George Kemeny e Thomas Eugene Kurtz.
La parola è l'acronimo della frase in lingua inglese Beginner's All-purpose Symbolic Instruction Code ovvero - in italiano - "codice simbolico di istruzioni adatto a ogni esigenza dei principianti". L'acronimo corrisponde anche all’aggettivo inglese basic («semplice»,«fondamentale»). Il primo programma in questo linguaggio venne eseguito il 1º maggio 1964 alle ore 4:00 a.m.

## Storia
### Il contesto storico e il Dartmouth BASIC

Fino agli anni sessanta i computer erano ingombranti, estremamente costosi e difficili da programmare. Erano acquistati da industrie, istituti governativi o università. Data la loro scarsa potenza elaborativa, i linguaggi di programmazione erano orientati alla massima efficienza sacrificando la facilità di scrittura del codice e la sua leggibilità. Questi fattori, uniti alla difficoltà di poter accedere ad un computer, relegavano l'uso di queste macchine a poche persone e per particolari compiti. Nel 1959 il Dartmouth College acquistò un proprio computer, un LGP-30, affidato al reparto informatico sotto la direzione di Kurtz.
Gli utenti non potevano avere un accesso libero alla macchina, ma dovevano inserire i loro programmi nel sistema che li eseguiva poi nell'ordine in cui li aveva ricevuti. Dall'inserimento all'ottenimento dei risultati poteva quindi passare un discreto lasso di tempo (ore ma anche giorni). Per ovviare a questo problema Kemeny e Kurtz iniziarono a sviluppare un sistema di timesharing per poter consentire l'accesso a più utenti contemporaneamente e l'esecuzione di più programmi simultaneamente. Per permettere ciò l'università acquistò anche un nuovo computer, un GE-235, e 30 terminali GE Datanet-30 che furono dislocati in vari ambienti di Dartmouth grazie ai quali gli studenti potevano inserire i loro programmi nell'unità centrale in modo rapido e semplificato. Il sistema supportava inizialmente anche altri linguaggi come il FORTRAN e l'ALGOL, ma Kurtz e Kemeny studiarono un altro linguaggio che fosse più semplice da imparare e di uso generale, sviluppando così il BASIC.
Negli anni seguenti, con il nascere di diverse versioni del linguaggio, il BASIC sviluppato originariamente da Kemeny e Kurtz fu indicato come Dartmouth BASIC.

### L'avvento degli home computer e l'Altair BASIC

Nonostante il linguaggio fosse già usato su diversi minicomputer, la sua diffusione era limitata dall'elevato costo dei computer che li rendeva oggetti da professionisti. La situazione cambiò con la presentazione del MITS Altair 8800 (un computer venduto in scatola di montaggio) all'inizio del 1975: i 439$ necessari per acquistarlo erano un prezzo alla portata di molti, tanto che ad agosto di quell'anno MITS ne aveva già venduti 5.000.
La diffusione del computer fece crescere la richiesta di un linguaggio di programmazione alla portata di molti. Il BASIC, grazie all'opera di divulgazione che avevano condotto i suoi autori negli anni passati, si era ritagliato un posto su diverse riviste del settore, dove i lettori pubblicavano i propri listati. Inoltre molti linguaggi dell'epoca richiedevano un editor per la scrittura del codice, grandi quantitativi di memoria per l'interprete e sistemi di memorizzazione quali floppy disk per i programmi. Il BASIC richiedeva piccoli quantitativi di memoria, aveva un editor integrato per la scrittura del codice e semplici istruzioni, risultando quindi adatto a macchine con limitate risorse quali l'Altair 8800.
Uno dei primi dialetti BASIC ad apparire per i computer basati sull'Intel 8080, una delle prime CPU in circolazione, come l'Altair 8800, fu il Tiny BASIC, scritto da Dennis Allison su richiesta di Bob Albrecht, un membro dell'Homebrew Computer Club che successivamente avrebbe fondato la rivista Dr. Dobb's Journal, su cui apparve il codice sorgente completo del Tiny BASIC nel 1976. Fu però con l'introduzione dell'Altair BASIC nel 1975, un interprete che risiedeva in soli 4 kB di memoria scritto da Bill Gates e Paul Allen, che questo linguaggio iniziò a diffondersi in maniera marcata, grazie anche alle numerose copie pirata del software, circa il 90% di quelle in circolazione.
Distribuito inizialmente solo per l'Altair 8800, l'Altair BASIC fu, in seguito alla rescissione del contratto di esclusiva con MITS, commercializzato come Microsoft BASIC dalla Microsoft, una società fondata da Gates ed Allen nel 1975, anche per altre piattaforme hardware. Del Microsoft BASIC fu distribuita anche una versione denominata MBASIC per il sistema operativo CP/M, uno dei più diffusi dell'epoca. Grazie alla popolarità di questo sistema, usato su macchine di successo quali l'Osborne 1, anche la popolarità del Microsoft BASIC crebbe e Microsoft iniziò a distribuire sempre più versioni del suo interprete.
Nel 1977 furono presentati tre importanti home computer per i quali i loro costruttori scelsero come linguaggio integrato nel firmware il BASIC. Essi erano il Commodore PET, l'Apple II e il Radio Shack TRS-80: il primo contiene una versione adattata al MOS 6502 del Microsoft BASIC; il secondo integra l'Applesoft BASIC, successore dell'Integer BASIC e sviluppato con Microsoft; il terzo offre, a seconda dei modelli, un BASIC derivato dal Tiny BASIC oppure un interprete derivato dall'Altair Extended BASIC, una versione con più funzionalità dell'Altair BASIC di Microsoft. Questi BASIC sono molto simili dato che i primi 50 token, usati per memorizzare i comandi in una forma salvaspazio, sono gli stessi. Altre società che entrarono nel mercato degli home computer svilupparono la propria versione del BASIC: Atari per i suoi computer a 8 bit sviluppò l'Atari BASIC, una versione studiata per risiedere in una cartuccia da 8 kB. BBC pubblicò il BBC BASIC, sviluppato da Acorn Computers, che integra molte istruzioni aggiuntive. Molti home computer degli anni ottanta hanno il BASIC residente nella ROM che viene eseguito direttamente all'avvio della macchina.
Con il crescere della sua popolarità molte riviste iniziarono a pubblicare listati di programmi in BASIC che gli utenti potevano riscrivere a casa sui propri computer, come Commodore Computer Club, dedicata ai modelli Commodore, o Sinclair Computer, per quelli Sinclair. Furono editi anche libri di listati in Microsoft BASIC, essendo questo dialetto il più diffuso e quindi il più adattabile da una macchina all'altra. Alcuni famosi libri di listati sono quelli pubblicati da David Ahl: BASIC Computer Games, More BASIC Computer Games e Big Computer Games. Microsoft realizzò anche l'AmigaBASIC per i computer Commodore della serie Amiga, una versione del linguaggio che supporta l'interfaccia grafica di quelle macchine.

### L'era dei personal computer

Nel 1981 IBM presentò il PC IBM 5150; il sistema operativo era stato realizzato da Microsoft, che fornì anche diversi interpreti BASIC: IBM Cassette BASIC (BASIC C), residente in ROM, così detto perché capace di supportare le operazioni di lettura/scrittura su nastri magnetici; IBM Disk BASIC (BASIC D), che supportava invece le unità a dischi; IBM BASICA, o Advanced BASIC, evoluzione del BASIC D; GW-BASIC, compatibile con il BASICA ma che non richiedeva il BIOS originale IBM per poter funzionare; QuickBASIC, una versione derivata dal GW-BASIC, che non richiedeva i numeri di riga, integrava una IDE di sviluppo e poteva compilare i programmi; QBasic, derivato dal QuickBASIC ma senza compilatore. Anche altre società produssero delle versioni del BASIC per i PC IBM. Una di esse fu Borland, famosa per il suo Turbo Pascal, che pubblicò il Turbo Basic come versione compilata del linguaggio (il suo autore pubblica ancora il Turbo Basic sotto il nome di PowerBASIC).
Questi linguaggi introducevano molte estensioni ai BASIC sviluppati per gli home computer, come il supporto per la grafica, la manipolazione delle stringhe migliorata, nuovi tipi di dati, supporto per le unità a dischi e, soprattutto, i costrutti per la programmazione strutturata, come il supporto alle variabili locali e le strutture di controllo. Le nuove capacità grafiche di questi linguaggi aprirono la strada alla creazione dei videogiochi per PC. Uno dei primi in tal senso si può considerare Donkey (noto anche come DONKEY.BAS dal nome del file), un simulatore di guida scritto da Neil Konzen, un dipendente Microsoft, e Bill Gates per mostrare ciò che il linguaggio ed un PC potevano fare.
Con il continuo aumento della diffusione dei PC crebbero anche i programmi offerti da altri per cui gli utenti lentamente passarono dallo stato di amatori che si autoscrivevano il software di cui avevano necessità a quello di utilizzatori di applicazioni reperibili normalmente in commercio. Con il diminuire dell'interesse degli utenti nella programmazione diminuì anche l'uso dei linguaggi di programmazione: a questa tendenza non sfuggì neanche il BASIC, la cui diffusione iniziò a calare nonostante le numerose versioni in circolazione.

### Dalla fine del XX secolo ad oggi

Il BASIC tornò in auge all'inizio degli anni novanta quando Microsoft presentò il Visual Basic nel 1991, anche se questo linguaggio si discostava molto dal BASIC originale, essendo più orientato agli oggetti ed alla programmazione ad eventi: l'unico punto di contatto con il BASIC originario era la sintassi simile, che non definisce più il linguaggio stesso dato che una parte dello sviluppo di un'applicazione viene eseguita con la tecnica del drag and drop, ossia il trascinamento dei widget che andranno a comporre l'interfaccia grafica direttamente sulla finestra dell'applicazione. Il codice serve solo a gestire gli eventi generati ad esempio dalla pressione di un pulsante grafico e non più a scrivere il gestore stesso di tale evento, preimpostato nell'ambiente di sviluppo.
Nonostante il Visual Basic possa essere considerato come una evoluzione del linguaggio, rimangono pochi dei segni distintivi del primo Dartmouth BASIC, come la numerazione delle righe, adesso opzionale. Ed anche se indicato dal suo stesso nome come un linguaggio per "principianti", il Visual Basic permetteva la scrittura di applicativi anche complessi, come programmi per l'ufficio e piccoli giochi, che non risentivano della lentezza derivante dall'essere un linguaggio interpretato, dato che i computer che potevano eseguire i sistemi Windows 3.1/95 su cui giravano le prime versioni del Visual Basic erano sufficientemente potenti per eseguire anche programmi con una maggiore richiesta di risorse.
Nel corso degli anni sono comparsi diversi dialetti BASIC, tra cui il True BASIC, il diretto discendente del Dartmouth BASIC pubblicato da una società fondata dallo stesso Kurtz, il REALbasic, (REALbasic negli anni si è evoluto ed ora si chiama Xojo) un linguaggio multipiattaforma che può compilare eseguibili per macOS, Windows e Linux, Gambas, un dialetto del BASIC open source per Linux molto simile al Visual Basic con una IDE che ricalca quella di quest'ultimo, il FreeBASIC, un progetto opensource compatibile con il QuickBASIC ma che introduce anche nuove funzionalità proprie.

## Descrizione

Il BASIC, almeno nelle versioni di Kemeny e Kurtz che costituiscono il cosiddetto "Dartmouth BASIC", fu progettato per essere un linguaggio semplice da imparare. Per questo si differenziò dalla maggior parte dei linguaggi suoi coetanei enfatizzando la semplicità d'uso piuttosto che la potenza espressiva. Nacque infatti, come dice il suo nome, per poter essere usato anche da principianti (il 75% degli studenti dell'Università di Dartmouth era iscritto a facoltà umanistiche). Le istruzioni erano poche e non complesse. Il BASIC offriva inoltre (non per scelta degli autori, ma solo perché era figlio del suo tempo) pochi costrutti strutturati, quindi orientati alla creazione di programmi chiari e comprensibili. Fu pensato inoltre come un linguaggio algoritmico, adatto cioè a programmare algoritmi. Fu anche progettato per essere un linguaggio facilmente trasportabile su calcolatori diversi dal GE-225 su cui giravano le prime versioni. Concepito e realizzato originariamente come linguaggio compilato, molte delle sue versioni più note fanno tuttavia uso di interpreti.
Una delle più famose versioni è il Microsoft BASIC, sviluppato da Bill Gates, Monte Davidoff e Paul Allen come Altair BASIC per l'Altair 8800, poi evolutasi nel GW-BASIC per il primo MS-DOS. I microcomputer e gli home computer degli anni settanta ed ottanta, come l'Apple II, gli ZX80/ZX81/ZX Spectrum, i famosi VIC-20 e C-64, gli MSX, integravano nel loro firmware un interprete BASIC.

### Programmi usati

In ambiente Microsoft Windows per programmare in linguaggio BASIC è molto usato REALbasic che cerca di rispecchiare il più possibile la controparte di Microsoft. In ambiente GNU/Linux è senza ombra di dubbio il software open source Gambas il migliore per programmare in BASIC. Permette inoltre di sviluppare l'interfaccia di un programma sia utilizzando le GTK, quindi programmi integrati perfettamente nel desktop manager GNOME sia utilizzando le Qt perfette per l'integrazione in KDE. Il programma è distribuito sotto licenza GNU ed è completamente gratuito. Nel 2007 è nato QB64, un compilatore retrocompatibile col QuickBASIC che aggiunge le più moderne funzionalità.

## Esempi di codice
### Hello world

Il seguente esempio stampa il famoso testo "Hello world", uno dei più semplici programmi che chi impara un nuovo linguaggio di programmazione, generalmente scrive come primo passo verso il suo apprendimento:

### BASIC non strutturati

Il seguente è un esempio di un programma in BASIC scritto senza l'utilizzo dei costrutti della programmazione strutturata. Il linguaggio utilizzato è il GW-BASIC, ma il codice si può convertire anche per altri dialetti con minime modifiche:

### BASIC strutturati

I BASIC di seconda generazione, come il QuickBASIC e il PowerBASIC, introdussero una serie di nuove caratteristiche nel linguaggio, primo fra tutti il supporto alla programmazione strutturata ed orientata alle procedure: i numeri di riga erano omessi e rimpiazzati dalle "etichette", dei segnalibri usati dalle istruzioni GOTO per i salti, e le funzioni e le subroutine sostituite dalle procedure, porzioni di codice richiamabili da altri punti del programma.

### BASIC orientati agli oggetti

La terza generazione di dialetti BASIC, come il Visual Basic (di cui è anche disponibile la versione Smallbasic per i principianti), il REALbasic, l'OpenOffice.org Basic e Gambas, ha introdotto il supporto alla programmazione orientata agli oggetti ed il paradigma della programmazione ad eventi. Molte procedure e funzioni precostituite sono adesso rappresentate da metodi degli oggetti standard piuttosto che da operatori.
L'esempio seguente è scritto in Gambas:

### Variabili e array

Il Dartmouth BASIC supportava nomi di Variabili lunghi 1 sola lettera, eventualmente seguita da una sola cifra numerica. Nomi validi erano perciò A e A1 ma non AA. Altri dialetti, come l'Altair BASIC 4K consideravano solo i primi 2 caratteri del nome per cui VARIABILE1, VARIABILE2 e VA facevano riferimento alla stessa variabile.
I primi dialetti del BASIC non supportavano tutti i tipi di dati. Ad esempio, il Dartmouth BASIC e l'Altair BASIC supportavano sia i numeri interi che in virgola mobile, mentre l'Integer BASIC, il primo BASIC offerto con i computer Apple I e Apple II, supportava solo i numeri interi.
Le stringhe sono indicate con il suffisso "$" posto dopo il nome della variabile e sono racchiuse all'interno di una coppia di virgolette.
Gli array possono contenere numeri interi, in virgola mobile o stringhe ed avere più dimensioni.
Il seguente esempio crea una variabile stringa ed un array di 10 elementi (l'indice parte da 0). Per accedere poi all'elemento n usiamo la notazione A(n).
Si possono usare variabili a doppio indice:

## Elenco di comuni parole chiave del BASIC

L'elenco che segue riporta alcune comuni parole chiave utilizzate nel BASIC:

### Manipolazione dei dati

* LET (comando): assegna un valore (che può essere anche il risultato di un'espressione) ad una variabile
* DATA (istruzione): introduce un elenco di valori che possono essere assegnati sequenzialmente dal comando READ.

### Controllo del flusso

* IF..THEN..ELSE (istruzione): usate per eseguire confronti o prendere decisioni.
* FOR..NEXT (istruzione): ripete una porzione di codice per un certo numero di volte. Nel ciclo viene usata una variabile che agisce da contatore.
* WHILE..WEND e REPEAT..UNTIL (comandi): ripete una porzione di codice mentre la condizione di controllo è vera (ciclo WHILE..WEND) o finché non diventa vera (ciclo REPEAT..UNTIL). La condizione viene verificata all'inizio del ciclo (WHILE..WEND) oppure alla fine (REPEAT.UNTIL).
* GOTO (comando): salta nel programma ad un determinato numero di riga o ad una specifica etichetta.
* GOSUB (comando): salta ad eseguire una determinata porzione di codice, continuando ad eseguire il programma dall'istruzione successiva il GOSUB non appena viene incontrato il comando RETURN. Il GOSUB era usato per implementare le subroutine.
* ON..GOTO/GOSUB (comando): esegue un salto in base al verificarsi di una determinata condizione.

### Input/output

* PRINT (istruzione): visualizza un messaggio sullo schermo o su un altro dispositivo di output.
* INPUT (istruzione): chiede all'utente di inserire un valore che sarà memorizzato in una variabile. Può includere un messaggio di testo.
* TAB o AT (funzione): imposta la posizione dove stampare il prossimo carattere.

### Vari

* REM (da Remark): introduce un commento del programmatore (il nome del programma, la spiegazione delle variabili utilizzate, le istruzioni d'uso del software). Tutto ciò che compare dopo il REM è ignorato dall'interprete o dal compilatore.

## Varianti
### Dartmouth BASIC

Il Dartmouth BASIC nacque come linguaggio compilato. Era basato su elementi ripresi dall'Algol-6 e dal FORTRAN II con nuove aggiunte scritte per favorire la programmazione da parte dei nuovi utenti del sistema di timesharing, utenti iscritti a facoltà non matematiche con limitate conoscenze di programmazione.
Il Dartmouth BASIC fu scritto seguendo alcuni principi:
* fosse facile da usare dai principianti;
* fosse un linguaggio di uso generale;
* fosse interattivo;
* avesse delle caratteristiche più avanzate per gli utenti più esperti;
* avesse messaggi di errore chiari;
* fosse rapido nell'eseguire piccoli programmi;
* fosse astratto dall'hardware (non richiedesse, cioè, la conoscenza delle specifiche della macchina su cui girava);
* isolasse l'utente dal sistema operativo.
Kemeny e Kurtz non registrarono il linguaggio distribuendolo liberamente ma lo presentarono anche ad altri istituti scolastici favorendone la conoscenza. In questo modo il BASIC si diffuse rapidamente finendo per essere adottato da diversi costruttori di minicomputer quali la serie PDP di DEC ed il Nova di Data General. Il Dartmouth BASIC fu usato anche nell'HP Time-Shared BASIC, venduto tra la fine degli anni sessanta e l'inizio degli anni settanta, e nel sistema operativo Pick: questi ultimi utilizzi usavano una versione interpretata del linguaggio.
Alcuni anni dopo la sua diffusione, il Dartmouth BASIC fu oggetto di pesanti attacchi da parte di alcuni programmatori, in special modo Edsger Dijkstra, che esprimevano una dura presa di posizione contro l'utilizzo incondizionato delle istruzioni di salto del linguaggio, colpevoli di portare alla scrittura di codice illeggibile e di bassa qualità. La lettera non menzionava nessun linguaggio ma era chiaro il riferimento al Dartmouth BASIC, che del GOTO, non avendo costrutti di programmazione strutturata, faceva un abbondante uso.
In un altro suo scritto del 1975 Dijkstra puntava nuovamente il dito contro l'uso del GOTO citando però esplicitamente il linguaggio BASIC.
Quello che segue è un esempio di Dartmouth BASIC preso dal manuale di riferimento redatto nel 1964 che risolve 2 equazioni lineari a 2 incognite: