Il Basic Combined Programming Language (BCPL) viene sviluppato da Martin Richards presso l’Università di Cambridge intorno al 1966.
Martin Richards
Come si intuisce dal nome, il BCPL ha una derivazione diretta dal CPL, rispetto al quale Richards cerca di eliminare la complessità e la scarsa pulizia della sintassi. Il primo compilatore è pronto nella primavera 1967, mentre il linguaggio viene ufficializzato nel 1969 durante lo “Spring Joint Computer Conference”.
Richards riesce a rendere il linguaggio appetibile e leggero, tanto che i compilatori sono estremamente compatti, fino al punto di necessitare (almeno così sembrerebbe) di soli 16 KB di memoria. Tale ottimizzazione viene raggiunta grazie alla suddivisione logica del compilatore in due componenti: frontend, che si occupa di analizzare il codice sorgente e di generare il codice intermedio O-code per una macchina virtuale, e backend che traduce l’O-code nel codice assembly della piattaforma specifica. Quando è necessario scrivere un compilatore per una nuova CPU è sufficiente riscrivere il backend: in pratica il BCPL è il primo linguaggio ad introdurre il concetto, seppur allo stato embrionale, di macchina virtuale!
Il linguaggio si caratterizza per avere un unico tipo di dati, il tipo word, definito da un numero fisso di byte di solito scelto per allinearsi con la word della macchina. L’interpretazione del dato viene fatta in base al tipo di operatori utilizzati: utilizzando il segno di addizione “+”, ad esempio, i dati vengono sommati come se si trattasse di numeri interi, mentre l’operatore di dereferenziazione “!” tratta i dati come puntatori. Tutto ciò è pensato per semplificare l’implementazione del BCPL, evitando di introdurre la funzionalità di “type checking”.
Nel 1979 la diffusione è tale che esistono implementazioni di BCPL per almeno 25 diverse architetture hardware, ed il successo è così penetrante da essere utilizzato per la scrittura di parti rilevanti di alcuni sistemi operativi, tra cui TRIPOS ed il mitico AmigaOS. Inoltre il BCPL influenza profondamente il linguaggio B e, di conseguenza, il linguaggio C.