BCPL e portabilità dei programmi
In questa pagina riassumo l’esperienza che rese la portabilità “visibile” per me: BCPL, i codici intermedi e le procedure di bootstrapping che permettono a un compilatore di prendere vita su una nuova macchina.
BCPL: un linguaggio nato per il porting
BCPL (Basic Combined Programming Language), concepito e implementato da Martin Richards (Cambridge, 1967), fu pensato come linguaggio per scrivere compilatori e traduttori. Da questa intenzione deriva una qualità rara per l’epoca: il linguaggio e il suo compilatore furono progettati fin dall’inizio per essere piccoli, robusti e facilmente trasferibili da una piattaforma all’altra.
Per me, BCPL fu una dimostrazione pratica di un principio che sarebbe riapparso costantemente nei miei lavori successivi: la portabilità diventa possibile quando si separa chiaramente la parte indipendente dalla macchina dalla parte dipendente dalla macchina e si stabilisce fra loro una forma intermedia ben definita.
OCODE: la forma intermedia e la “macchina astratta”
L’elegante “stranezza” di BCPL, nella concezione di Richards, è la forma intermedia esplicita (OCODE), trattata come linguaggio assembly di una semplice macchina astratta. Il compilatore genera prima OCODE; poi, per ogni macchina di destinazione, è necessario o un traduttore OCODE → codice nativo oppure, più semplicemente all’inizio, un interprete OCODE. In questo modo, lo sforzo di porting si concentra in un componente piccolo e controllabile.
INTCODE e bootstrapping: “vita” su una nuova macchina
Nel 1974, la sorgente del compilatore BCPL arrivò a noi in una versione che utilizzava un ulteriore livello intermedio, INTCODE, introdotto da Richards per accelerare il porting. L’idea era pragmatica: invece di scrivere direttamente un backend completo, si comincia con un interprete minimale per INTCODE, sufficiente per eseguire il compilatore e ottenere rapidamente un’implementazione interpretativa funzionante.
Su FELIX dovemmo implementare un interprete INTCODE capace di eseguire il codice originale. Questa fase, apparentemente modesta, fu decisiva: un codice scritto per una macchina astratta poteva “germogliare” in un ambiente completamente diverso attraverso uno sforzo limitato ma ben mirato.
Dal laboratorio agli articoli
Da questa esperienza nacque una serie di articoli sulla portabilità e su BCPL, nei quali cercai di astrarre le lezioni del laboratorio in un vocabolario riutilizzabile: tipi di portabilità, barriere, strategie e compromessi.





