ALGOL

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Disambiguazione– Se stai cercando altri significati, vediAlgol.
ALGOL
linguaggio di programmazione
Data di origine1958
Utilizzolinguaggio general-purpose
ParadigmiProcedurale,Imperativa,Strutturata
TipizzazioneForte
Influenzato daFortran
Ha influenzatoSimula,C,CPL,

Pascal,Ada

ALGOL(abbreviazione diALGOrithmicLanguage,ossia linguaggio algoritmico) è unlinguaggio di programmazionesviluppato nel1958.In un certo senso fu una reazione alFortran;introdusse concetti fondamentali come lostack dei record di attivazionee per certi versi si può considerare capostipite di una grande famiglia di linguaggi di notevole successo, dalPascalalC.

Per una trentina d'anni è stato lostandardde factocon cui si rappresentavano glialgoritmi.L'ALGOL utilizza blocchi diistruzionidelimitati da coppie dibeginedend(come il Pascal); è stato il primo linguaggio ad usare questasintassimolto utilizzata anche in didattica: frammenti di sintassi simile all'ALGOL sono tuttora utilizzati a volte come notazione per gli algoritmi chiamataPidgin Algol.

Esistono tre versioni ufficiali di ALGOL:ALGOL 58,ALGOL 60edALGOL 68.Di queste, solo ALGOL 60 si è diffusa (Niklaus Wirthbasò il proprioAlgol-Wsull'ALGOL 60 prima di cominciare a sviluppare ilPascal). I nomi ufficiali delle versioni di ALGOL sono dovuti all'anno di pubblicazione. L'ALGOL 58 era conosciuto originariamente comeIAL(l'acronimo diInternationalAlgorithmicLanguage.)

L'ALGOL è stato sviluppato congiuntamente da un comitato di informatici statunitense ed europeo. Esistono tre differenti sintassi: una sintassi di riferimento, una sintassi per la pubblicazione ed una per l'implementazione. Le differenti sintassi permisero di usare differenti parole chiave e convenzioni per i punti decimali (punti o virgole) a seconda della lingua utilizzata.

John Backussviluppò il metodo di descrizione dei linguaggi di programmazione dettoBackus normal form(BNF) specificatamente per l'ALGOL 58. È stato rivisto ed ampliato daPeter NaurnellaBackus-Naur formper l'ALGOL 60. Sia Backus che Naur fecero parte del comitato che creò l'ALGOL 60. L'ALGOL 60 ispirò molti dei linguaggi che seguirono; la citazione canonica a questo proposito è dovuta aC. A. R. Hoare:"ALGOL fu un grande progresso sui suoi successori". La citazione completa è: "Qui c'è un linguaggio così avanzato che non è solo un miglioramento rispetto ai predecessori ma anche rispetto ai propri successori" ma l'aforisma è più conosciuto. A volte viene attribuito erroneamente aEdsger Dijkstra,conosciuto per le acute osservazioni, che collaborò all'implementazione del primocompilatoreper ALGOL 60.

IlB5000dellaBurroughs Corporationed i suoi successori eranomacchine a stackprogettate per essere programmate mediante varianti estese dell'ALGOL 60, conosciute comeElliot ALGOL;effettivamente il lorosistema operativochiamato MCP (Master Control Program) era scritto in Elliot ALGOL fin dal 1961. LaUnisys Corporationvende ancora computer che discendono dal B5000, utilizzano l'MCP e supportano vari compilatori di Elliot ALGOL.

ALGOL 60 ufficialmente non possedeva istruzioni di I/O; le varie implementazioni necessariamente dovettero implementarle ma il modo variava da un'implementazione all'altra. ALGOL 68 offrì invece una completa libreria di istruzioni ditransput(il termine usato da ALGOL 68 per indicare l'Input/Output).

L'ALGOL 60 era dotato di due modalità di passaggio dei parametri: il più comune è dettopassaggio per valore,l'altro chiamatopassaggio per nomenon è mai stato adottato da nessun altro linguaggio di programmazione successivo. Il passaggio per nome aveva alcune limitazioni rispetto alpassaggio per riferimento,facendone una caratteristica indesiderata nella progettazione del linguaggio. Per esempio, è impossibile con l'ALGOL 60 sviluppare una procedura che scambi i valori di due parametri se i parametri sono passati mediante una variabile intera ed un array indicizzato mediante la stessa variabile intera.

L'ALGOL 68 è stato definito mediante un formalismo chiamato grammatica a due livelli creato daAdriaan van Wijngaardene dal quale ha preso il nome. Legrammatiche di Van Wijngaardenutilizzano unagrammatica libera dal contestoper generare un insieme infinito di produzioni che permettono di riconoscere un particolare programma in ALGOL 68; sono in grado di esprimere il tipo di richieste che in molti altri standard di linguaggi di programmazione vanno sotto il nome di semantica e devono essere espresse in linguaggio naturale non ambiguo ed in seguito implementati nei compilatori come codicead hoccollegato col parser del linguaggio formale.

Esempio di programma (ALGOL 60)

[modifica|modifica wikitesto]

Il modo in cui deve essere scritto il testo in grassetto dipende dalla particolare implementazione (es. 'INTEGER' in luogo di 'integer').

procedureAbsmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
valuen, m;arraya;integern, m, i, k;realy;
commentThe absolute greatest element of the matrix a, of size n by m
is transferred to y, and the subscripts of this element to i and k;
beginintegerp, q;
y:= 0; i:= k:= 1;
forp:=1step1untilndo
forq:=1step1untilmdo
ifabs(a[p, q]) > y then
beginy:= abs(a[p, q]);
i:= p; k:= q
end
endAbsmax

Poiché ALGOL 60 non possiede istruzioni di I/O native, non esiste una versione di "Hello World"portabile. Il codice seguente può essere eseguito sull'implementazione di ALGOL per imainframeBurroughs A-Series ed è tratta daquesto sito.URL consultato il 6 novembre 2017(archiviato dall'url originaleil 4 febbraio 2010).:

BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:11];
REPLACE E BY "HELLO WORLD!";
WHILE TRUE DO
BEGIN
WRITE (F, *, E);
END;
END.

Un esempio alternativo che utilizza le primitive di I/O dell'Elliott ALGOL è presentato qui di seguito. In realtà l'Elliott ALGOL usa caratteri differenti per 'inizio-stringa' e 'fine-stringa':

programHiFolks;
begin
print‘Hello world’;
end;

Collegamenti esterni

[modifica|modifica wikitesto]
Controllo di autoritàLCCN(EN)sh85003475·BNE(ES)XX541596(data)·J9U(EN,HE)987007293928505171
 Portale Informatica:accedi alle voci di Wikipedia che trattano di informatica