Luca Dan Șerbănați all'esame di maturità, 1961
Luca Dan Șerbănați nei primi anni Settanta
Luca Dan Șerbănați all'ultima lezione del quinto anno, aprile 1989

Luca Dan Șerbănați

Professore emerito alla Politehnica di Bucarest

Ricerca, insegnamento, industria e memorie

RO | EN | IT
Luca Dan Șerbănați a Venezia, 1990
Luca Dan Șerbănați a New York, 2005
Luca Dan Șerbănați

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.