Il BASIC (Beginner's All Purpose Symbolic Instruction Code), ideato nel 1960 da John George Kemeny e Thomas Eugene Kurtz al Dartmouth College per GE 225, fu eseguito per la prima volta al mattino del 1 maggio 1964 al MIT su un GE 235 con time sharing. Lo scopo del linguaggio era di mettere a disposizione degli studenti un linguaggio semplice, propedeutico ai più impegnativi FORTRAN o ALGOL. Le prime versioni furono dei compilatori in ambienti di time sharing, e le restrizioni dell’hardware influirono sulla sintassi, in particolare i nomi delle variabili furono limitati ad 1 carattere alfabetico, al più seguito da uno numerico, ciò permise di omettere spazi nelle istruzioni (a scapito della leggibilità) e di avere compilazioni più veloci. Fra le altre caratteristiche della prima versione il segno ↑, disponibile sulla telescrivente, per l’elevazione a potenza. I dati di input facevano parte del programma ed erano individuati dall’istruzione DATA, e resi disponibili per mezzo dell’istruzione READ.
La seconda edizione del Basic (1964) originò anche un CARDBASIC con istruzioni per leggere dati da schede perforate ed utilizzare le stampanti, in esso fu introdotta l’istruzione MAT per operare su matrici. Nella quinta edizione (1970) apparirono le istruzioni per accedere ai files sia ad accesso sequenziale, sia ad accesso casuale e le istruzioni CHAIN e COMMON per concatenare altri programmi Basic condividendo delle variabili.
La possibilità di funzioni e procedure appare nella sesta edizione (1971).
SBASIC
(Garland 1976) è una versione strutturata in cui sono eliminati le istruzioni
con i riferimenti alle linee del programma (GOTO, ON GOTO, GOSUB,
ecc…), i cicli sono realizzati con DO, LOOP e CONTINUE
(alla FORTRAN) ed è introdotta la SELECT CASE.
Nel 1970 Paul Allen, Bill Gates e il loro dipendente Monte Davidoff svilupparono il BASIC per il personal computer Altari, il programma fu venduto al MITS (Micro Instrumentation and Telemetry Systems). La versione occupava 4K di memoria.
Gates e Allen portarono il Basic su altre piattaforme quali Apple, Commodore e Atari. Nel 1977 Microsoft rilasciò Altair BASIC . Alla fine degli anni 70 fu incluso un interprete BASIC nel sistema operativo DOS della Microsoft Corporation col nome di GW-BASIC ; BASICA è il nome della versione contenuta nei PC IBM.
Microsoft rilasciò una versione con compilatore, QuikBasic , giunta fino alla versione 4.5, mentre una versione più evoluta, il PDS BASIC (Professional Development System) [1] , anche detta QuickBasic Extended giunse fino alla versione 7.1.
Nel 1985 Microsoft iniziò lo sviluppo di Visual Basic sia per DOS, di cui fu rilasciata una sola versione, sia per WINDOWS.
In Windows 98 fu incluso un interprete di VBScript interpreter. Visual BASIC for Applications entrò a far parte di Microsoft Office nel 1997.
Il giudizio di Edsger Wybe Dijkstra sul Basic, peraltro condiviso da molti, è piuttosto drastico: "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." (E’ praticamente impossibile insegnare buona programmazione agli studenti che sono stati esposti al BASIC: come potenziali programmatori essi sono stati mutilati al di là di ogni speranza di rigenerazione). |
Microsoft Visual Basic. Calcolo di un integrale col metodo di Monte Carlo.
' Microsoft VB 4 Dim Punti As integre Dim CkArea As Integer Randomize ' l'algoritmo calcola
l'integrale definito y = x^2 fra i punti X1=0 e X2=5 ' si generano coppie di
numeri a caso nell'intervallo 0 e 5 sull'asse x ' e 0 y = X2^2 sull'asse
y ' il valore
dell'integrale è il rapporto fra i punti che cadono nell'area ' sottostante la curva
ed il numero totale di punti X1 = 0 ' limiti area X2 = 5 ' d'integrazione ' integrale di y = x^2
fra 0 e 5 Ymax = X2 ^ 2 ' valore
massimo di y nell'area Punti = 10000 ' numero
punti estratti CkArea = 0 ' contatore
punti casuali nell'area AreaQuadrato = X2 * Ymax For I = 1 To Punti X = Rnd(1)
* X2 Y = Rnd(1)
* Ymax If X ^ 2 -
Y > 0 Then CkArea =
CkArea + 1 End If Next Print "Integrale
MonteCarlo = "; AreaQuadrato * CkArea / Punti Print "Integrale calcolato = "; 1 / 3 * X2 ^ 3 |
|
Nel
1994 Microsoft incorpora Visual Basic for Applications in Excel.
Sub GeneraIndice() ' ' Macro creata il
25/09/2002 da El Condor ' Dim joe As Hyperlink Dim Tabul As String * 1 Tabul = Chr$(9) 'ActiveDocument.TablesOfContents(1).UpdatePageNumbers ChDir
"C:\CONDOR\LinguaggiDiProgrammazione" Open "IndiceLinguaggi.txt" For Output As 1 For Each joe In ActiveDocument.Hyperlinks If
Left$(joe.Name, 4) = "_Toc" Then a$
= joe.Range ' tutti i titoli corrispondenti al cursore k = InStr(a$, Tabul) capitolo$
= Left$(a$, k - 1) a$ = Mid$(a$, k + 1) Titolo$
= Mid$(a$, 1, InStr(a$, Tabul) - 1) Print #1, capitolo$; Tabul$; Titolo$ End If Next Close cmd$ = "C:\fsf\bin\perl genindx.pl
Schemaindice.txt IndiceLinguaggi.txt IndiceLinguaggi.htm" ChDir
"C:\Condor\LinguaggiDiProgrammazione" Shell (cmd$) MsgBox "Fine
degenerazione indice" End Sub |
Liberty Basic è disponibile dal 1992. E' un Basic completo, con qualche aspetto artigianale: quale la non gestibilità dell'ambito delle variabili: handle, array e strutture sono sempre globali, e globali sono alcune variabili di sistema, in genere legate alla grafica. La grafica e le interfacce grafiche sono gestite tramite messaggi inviati a periferiche virtuali, un sistema se non altro autodocumentato. Supporta in modo semplice ed efficace gli sprite per realizzare giochi.
L’esempio che segue produce l’immagine grafica della simulazione di un servente di disco (simulazione eseguita con Python v. par.2.67 ).
'Liberty BASIC v2.02 ' grafico della
simulazione di un server di disco NumPunti = 0 NumPunti2 = 0 Dim MatRich(200,2) ' matrice con le richieste open "graf" for graphics_fs as #graf print #graf, "home" 'center the pen open "log.txt" for input as #flin [loop] if
eof(#flin) <> 0 then [finefile] input
#flin, item$ K1 =
instr(item$,"trk chiesta") K2 = instr(item$,"trk
servita") if K1 + K2
> 0 then if K1
> 0 then
NumPunti = NumPunti + 1
MatRich(NumPunti,1) = val(mid$(item$,K1+12)) else NumPunti2 = NumPunti2 + 1 MatRich(NumPunti2,2) = val(mid$(item$,K2+12)) end if end if goto [loop] [finefile] close #flin print #graf, "up; goto " + XPos$(1) +
YPos$(MatRich(1,1)) print #graf, "color red; down" 'penna
rossa giu' percorso = MatRich(1,1) for I=2 to NumPunti percorso = percorso +
abs(MatRich(I,1)-MatRich(I-1,1)) print #graf, "goto " + XPos$(I) + YPos$(MatRich(I,1)) next I print #graf, "place
10 500" print #graf,
"\Spostamenti richiesti: " + str$(percorso) print #graf, "up; goto " + XPos$(1) + YPos$(1400+MatRich(1,2)) print #graf, "color blue; down" 'penna blu
giu' percorso = MatRich(1,1) for I=2 to NumPunti percorso = percorso +
abs(MatRich(I,2)-MatRich(I-1,2)) print #graf, "goto " + XPos$(I) + YPos$(1400+MatRich(I,2)) next I print #graf, "place
10 265" print #graf,
"\Spostamenti effettuati: " + str$(percorso) print #graf, "place 240 25;font 14; color
black" print #graf,
"\Simulazione Server di disco" print #graf, "flush" 'make the graphics stick print #graf, "getbmp drawing 1 1 670 520"
bmpsave "drawing", "simula.bmp" print #graf, "when leftButtonDown [fine]" wait [fine] close #graf end function XPos$(X) XPos$ = " " + str$(X*6) end function function YPos$(Y) YPos$ = " " + str$(480-Y/6) end function |
|
Figura 19
PureBasic è un Basic multipiattaforma elegante e semplice, rilasciato nell’ottobre 2000 a cura di Frédéric 'AlphaSND' Laboureur. Produce un eseguibile ottimizzato e veloce. E’ dotato di molte librerie, fra cui librerie per interfacce grafiche, per sprites, per il networking e la multimedialità. Si possono includere istruzioni in assembler. Ha qualche carenza quale la mancanza di un trattamento delle date e l’elementare formattazione dei numeri; per contro si possono gestire abbastanza facilmente i processi concorrenti. L’esempio di programma PureBasic del paragrafo 1.4.4.7 utilizza dei processi concorrenti, ed esso, confrontato con gli esempi in questo capitolo, permette di rendersi conto delle (piccole) diversità del linguaggio di base, e delle grandi diversità nel realizzare funzioni evolute come la grafica e l’interattività.
O’Basic97 è un linguaggio di scripting vagamente ispirato al Basic per ambienti Windows della Celtech Software.
Accetta tipi di dato stringa e numeri, che individua rispettivamente co il suffisso $ è #, e permette di dichiarare strutture. Può gestire solamente degli oggetti predefiniti quali form, per gestire interfacce grafiche, printer, array, port, file, socket, ecc. Esistono procedure (Proc ... EndProc), che sono estensione di GOSUB ... RETURN, in quanto le variabili eventualmente utilizzate sono comunque globali ed il risultato di una funzione va posto nella variabile Risult$ o Risult# in funzione dell’essere stringa o numero.
L’esempio seguente è l’algoritmo TPK[2]:
.
' O'Basic97
Engine Version: 97.034 new a as NumArray For i# = 1 To 10
a.add 1 + Rnd(9)
' 10 numeri a caso EndFor For i# = 1 To 10
y# = SqRoot(Abs(a#[i#])) +
5 * a#[i#] * a#[i#]* a#[i#]
If y# > 400 Then
Signal$ = str(a#[i#])
+ " TOO LARGE"
Else
Signal$ = str(a#[i#]) + " " + str(y#)
EndIf
Stampa Signal$ Next msgbox("fine") Exit Proc
Stampa riga$
Print riga$ Print chr(13)
' cr
Print chr(10) ' lf EndProc |
Commodore
C64
Apple
II
Hewlett-Packard
HP-85
Compucolor anno 1975? sistema grafico con dischetti.
Olivetti M20 su processore Zilog 8001, con primitive per la grafica.
Sharp MZ 80 con sistema operativo a cassetta magnetica, e a dischetto
BASICA la versione su PC IBM. Inizio anni 80.
GW-Basic La versione venduta con il DOS.
MSX
BASIC
Quick
Basic
è
una versione con compilatore per il DOS BASIC.
Turbo basic è il Basic della Borland originato da Robert S. Zale.
AMOS BASIC per Amiga. Da Europress Software, scritto da François Lionet e Constantin Sotiropoulos, nel 1990 discende da STOS BASIC per Atari ST.
Applesoft BASIC
BASIC09 è un BASIC strutturato sviluppato da Microware per i processori Motorola 6809. Produce un codice per una macchina virtuale detto I-code . Un emulatore di questa macchina, RunB, esegue il codice. Sono state prodotte versioni di BASIC09 per OS-9/68000, col nome di Microware BASIC .
Blitz Basic BASIC per Amiga della Acid Software (Nuova Zelanda). Blitz BASIC 3-D e disponibile su PC, ed è orientato alla creazione di giochi in 3-D PC
Power
Basic (Robert S.
Zale) Compilatore con assembler inline.
C-BASIC
FutureBASIC
IBasic
Phoenix Object Basic . Una versione libera che include un costruttore di GUI ed è disponibile in ambiente Windows e Linux.
REALbasic
(MacIntosh)
STOS
BASIC
per Atari ST.
True
BASIC
Basic su Parrot E’ una semplice variante sulla macchina virtuale Parrot.
SmallBasic disponibile su molte piattaforme (Win32, DOS, Linux and PalmOS) sotto licenza GNU.
YABasic (Yet Another BASIC 1995-1996) una versione didattica di Basic. Il codice è compilato ed eseguito immediatamente.
Bywater BASIC (1993, Ted A. Campbell) Implementa un superinsieme dell’ANSI Standard per Minimal BASIC (X3.60-1978) ed un significativo sottinsieme dello ANSI Standard for Full BASIC (X3.113-1987).[1]
Da Donald E. Knuth e Luis Pardo, “the early development of programmino
languages”.
[2] PDS BASIC poteva produrre un eseguibile per OS/2 a differenza di VB-DOS e di QB4.5.