BCPL linguaggio di programmazione | |
---|---|
Autore | Martin Richards |
Data di origine | 1966 |
Paradigmi | Procedurale,imperativo,strutturato |
Tipizzazione | Senza tipo (basata sul word) |
Influenzato da | CPL |
Ha influenzato | B,C,Go[1] |
Modifica dati su Wikidata ·Manuale |
IlBCPL (BasicCombinedProgrammingLanguage) è unlinguaggio di programmazione sviluppato daMartin Richards dell'Università di Cambridge nel1966.
Richards sviluppò il linguaggio in seguito alle difficoltà che aveva incontrato nell'utilizzo del suo predecessore, ilCombined Programming Language. Il primocompilatore del nuovo linguaggio di programmazione venne implementato mentre lo studioso si trovava alMIT, nella primavera del1967. Il linguaggio venne presentato per la prima volta allaSpring Joint Computer Conference nel al 1969. L'architettura del BCPL influenzò pesantemente il linguaggioB, da cuiDennis Ritchie in seguito sviluppò ilC.
Nel1979 esistevano implementazioni di BCPL per almeno 25 diverse architetture, venendo progressivamente soppiantato dal linguaggio C.
Le caratteristiche di pulizia, potenza e portabilità rendono semplice la realizzazione di compilatori compatti. Alcunisistemi operativi vennero scritti, completamente o in parte, utilizzando BCPL (ad esempio ilTripOS o l'AmigaOS). La principale caratteristica che rendeva il compilatore particolarmenteportabile risiedeva nel fatto che esso era logicamente diviso in due parti: la prima parte (front end) si occupava di analizzare il codice sorgente e di generare un codice intermedio (O-code) per unamacchina virtuale, la seconda (back end) traduceva l'O-code nel codice per laCPU bersaglio, su cui il programma doveva girare. In questo modo, quando era necessario scrivere un compilatore per una nuova CPU, era sufficiente riscrivere ilbackend. Questa tecnica divenne in seguito molto comune (ad esempio inPascal oJava), ma il BCPL fu il primo linguaggio a specificare una macchina virtuale a questo scopo.
Il linguaggio si caratterizza per avere un unicotipo di dati, il tipoword (un numero fisso dibyte, di solito scelto per allinearsi con la parola della macchina). L'interpretazione del dato veniva fatta in base al tipo di operatori utilizzati: ad esempio, utilizzando il segno di addizione+, i dati venivano sommati come se si trattasse dinumeri interi, mentre l'operatore! didereferenziazione trattava i dati comepuntatori. Allo scopo di rendere la cosa possibile, l'implementazione del BCPL non prevedeva iltype checking.
La filosofia del BCPL può essere riassunta in queste righe, liberamente tradotte dal libro "BCPL, the language and its compiler":
Questi esempi completi e compilabili sono presi dalla distribuzione del BCPL di Martin Richards.
Stampa del fattoriale:
GET "libhdr"LET start() = VALOF{ FOR i = 1 TO 5 DO writef("fact(%n) = %i4*n", i, fact(i)) RESULTIS 0}AND fact(n) = n=0 -> 1, n*fact(n-1)
Soluzioni delrompicapo delle otto regine:
GET "libhdr" GLOBAL { count:200; all:201 } LET try(ld, row, rd) BE TEST row=all THEN count := count + 1 ELSE { LET poss = all & ~(ld | row | rd) UNTIL poss=0 DO { LET p = poss & -poss poss := poss - p try(ld+p « 1, row+p, rd+p » 1) } }LET start() = VALOF{ all := 1 FOR i = 1 TO 12 DO { count := 0 try(0, 0, 0) writef("Number of solutions to %i2-queens is %i5*n", i, count) all := 2*all + 1 } RESULTIS 0}
Controllo di autorità | LCCN(EN) sh85012591 ·J9U(EN, HE) 987007282416805171 |
---|