BASIC

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

.1       Microsoft VBA (Visual Basic for Applications)

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

.2       Liberty Basic

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

.3       PureBasic

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à.

.4       O’Basic97

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

.5             Macchine con Basic

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

.6 Vari BASIC

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.