Il capitolo è l’“anomalia fertile” della tesi: utilizzando l’esperienza della progettazione di un compilatore, sono passato a una visione generale dello sviluppo software. Esso apre la tesi proponendo un cambiamento di paradigma: parte dalla constatazione — ricorrente in quegli anni — che, a causa della complessità del software, spesso superiore ai limiti umani di comprensione, la produzione di programmi doveva diventare oggetto di una vera e propria ingegneria. In questo percorso, l’esistenza di metodi ingegneristici all’interno del corpus dell’informatica era assolutamente necessaria.
Partendo dall’esperienza dello sviluppo del compilatore ALGOL-60 conversazionale, nella tesi viene proposto un metodo di progettazione dei sistemi complessi di programmi centrato sul concetto di macchina astratta (MA) — modello matematico tratto dalla teoria degli automi [MA = (Q, Σ, Q₀)] — che, attraverso raffinamenti successivi vincolati da relazioni comportamentali o strutturali tra macchine, si avvicini progressivamente al prodotto finale. Nel capitolo si formalizzano le relazioni tra MA (omomorfismi, evoluzioni), programmi e realizzazioni, offrendo un quadro necessario per la verifica e l’ottimizzazione.
Il metodo proposto obbliga il progettista a descrivere le elaborazioni mediante macchine astratte (modelli vicini all’architettura dei calcolatori e ai linguaggi di programmazione), a raffinare le interfacce e a conservare per quanto possibile la “struttura orizzontale” (modulare) lungo la “struttura verticale” (le fasi della progettazione fino all’implementazione). Secondo questo metodo, la progettazione può essere vista come una gerarchia verticale (livelli di astrazione) di reti di MA (moduli orizzontali), armonizzando il sincronico con il diacronico, l’astratto con il concreto — dalla specifica all’implementazione. Il metodo può diventare un processo rigoroso, modulare, verificabile, anticipando così il Model-Driven Development.
La sintesi seguente condensa i contributi dei Capitoli II–VII (SICAL) e colloca il Capitolo I come fondamento metodologico. Per i dettagli tecnici completi si veda la sintesi estesa (PDF).
Formalizzazione della sessione interattiva (dialogo riga per riga), della struttura dei file (sorgente ALGOL-60, LIN, tabelle dei simboli versionate), del protocollo dei comandi (EDIT, LIST, RUN, SAVE) e della pedagogia del feedback sotto il secondo. Vengono stabiliti i requisiti funzionali e di prestazione per l’ambiente multi-console.
Scomposizione in processi (DEFJOB, JOB, istanze per console), integrazione con SIRIS-2, condivisione statica della memoria (tabelle LALR mappate in sola lettura), coordinamento della compilazione incrementale con risposta in tempo reale.
Grammatica ALGOL-60 adattata per l’analisi a livello di riga, generatore di tabelle LALR(1), traduzioni orientate alla sintassi mediante grammatiche di attributi (tipo L) verso codice intermedio LIN; ne risulta FI₁: albero decorato + LIN parziale.
Restrizioni semantiche statiche, struttura FI-II (FSII, FTSII, FTNII), “dirty propagation” sul grafo delle dipendenze dopo ogni modifica; valutazione incrementale con costo proporzionale all’area modificata.
Definizione del linguaggio intermedio LIN, effetti operativi su stack e heap, cache di blocchi LIN e riallocazioni locali dopo ricompilazione; traduttore TCE verso CALI per eseguibili reali.
Residenti assembler per la multiplexazione delle console, limiti di memoria (~64 KB), tempi di risposta: <200 ms (1 console), ~550 ms (3), <1 s (6) per 200–300 righe — dimostrazione che incrementalità e multiutenza possono coesistere su hardware modesto.
Il Capitolo I propone la modellazione della progettazione mediante macchine astratte e forme intermedie, mentre i Capitoli II–VII ne mostrano la concretizzazione in un sistema conversazionale completo. Questo ponte teoria→sistema fonda in seguito INTERFORM (1985–1989): orchestrato formalmente, con dati, attività, strumenti e stati che “parlano la stessa lingua”.
Il testo integrale del capitolo è disponibile in un’edizione digitale completa e pulita in rumeno e in inglese. Metto inoltre a disposizione una descrizione estesa (12 pagine), che presenta la struttura, le idee e i contributi all’ingegneria del software, oltre a una copia scannerizzata del capitolo.