CP/M + Turbo Modula-2: un’accoppiata interessante

Nei precedenti articoli su CP/M abbiamo parlato di vari aspetti di questo sistema operativo dal punto di vista di un programmatore: un ambiente di sviluppo (Turbo Pascal) e aspetti relativi alla gestione dello schermo e dei tipi di terminale. Questa volta prendiamo in considerazione un insolito compilatore per un linguaggio di programmazione oggi altrettanto insolito: Turbo Modula-2 di Borland.

La storia di questo compilatore è particolare: non è mai stato ufficialmente rilasciato da Borland e non è mai uscito dalla fase alpha. L’autore del compilatore è nientemeno che Martin Odersky, CEO di Typesafe e inventore del linguaggio Scala. Ci troviamo quindi di fronte a un prodotto appartenente a un passato quasi remoto, scritto da un protagonista dell’informatica contemporanea e probabilmente anche futura.

Ho trovato che studiare e scrivere qualcosa con questo compilatore potesse essere un ottimo esercizio di ricerca storica.

Modula-2: il linguaggio

Modula-2 nasce nel 1977 a opera di Niklaus Wirth, lo stesso papà del Pascal. Con il Pascal infatti condivide molte keyword nonché la struttura del codice e buona parte della sintassi. La principale innovazione consiste invece nell’introduzione del concetto di modulo, da cui il nome. Un modulo è una unità di codice compilato che può essere condivisa e linkata ad altri moduli per formare così il codice eseguibile finale.

Si tratta di un concetto oggi praticamente scontato in qualsiasi linguaggio e ambiente di sviluppo ma che nasce e si sviluppa in quell’epoca. Il predecessore Pascal infatti (parliamo della definizione del linguaggio, non di compilatori in particolare) non prevede questo tipo di struttura. Rispetto al suo predecessore inoltre prevede concetti come quello di puntatore a procedura (lo stesso concetto di puntatore a funzione del C) nonché alcune semplificazioni sintattiche.

Il compilatore di Borland

Un interessante post di Lawrence Woodman fa un excursus sul pacchetto di Borland (che risale all’anno 1986) evidenziandone una serie di caratteristiche:

  • Può produrre codice nativo o “m-code” (interpretato dal runtime incluso nel .COM finale generato)
  • Compilando in codice nativo la velocità di esecuzione sembra notevolmente più alta sia della controparte m-code che di un equivalente programma in Turbo Pascal
  • Possibilità di effettuare chiamate dirette al sistema operativo CP/M

I test effettuati si limitano però a brevi listati che effettuano calcoli matematici. Ho avuto modo di utilizzarlo scrivendo del codice mediamente complesso per realizzare un semplice videogame (cosa che sarà approfondita in articoli successivi), mi sono quindi scontrato con dei bug del compilatore dovuti proprio al fatto che si tratta essenzialmente di un prodotto rimasto nella fase alpha. Il principale di questi bug è che…

  • compilando in codice nativo, al crescere della dimensione del sorgente, l’utilizzo della memoria necessaria per la compilazione cresce velocemente, per cui per un modulo di dimensioni media (non un banale benchmark, per intenderci) causa un errore di out of memory

Per cui, il mio consiglio se si vuole sviluppare qualcosa di mediamente complesso, è di compilare in “M-Code”: le dimensioni del compilato si mantengono ridotte e non si va in out of memory. Le prestazioni saranno penalizzate ma pazienza! siamo nell’ambito del retrocomputing, non nel grid computing 🙂

In Rete è disponibile il manuale del compilatore in formato PDF, consiglio vivamente di scaricarlo.

Utilizzo di Turbo Modula-2

Consiglio fortemente l’utilizzo di YAZE su un moderno PC o Mac per sperimentare con Turbo Modula-2: include già nel pacchetto una distribuzione pre-installata e funzionante del compilatore, e permette di trasferire file dall’ambiente emulato all’ambiente host in modo molto semplice. Elenco una serie di suggerimenti e di informazioni su questo setting:

  • Il tipo di terminale utilizzato è il classico ANSI/VT-100
  • L’ambiente di Turbo Modula-2 è preinstallato sul drive M:
  • È consigliabile utilizzare il drive A: per scriverci i sorgenti e i compilati, in quanto c’è molto spazio libero a disposizione

Il primo punto è particolarmente importante in quanto la conseguenza è che le istruzioni per la gestione dello schermo (CLRSCR, GOTOXY) produrranno sequenze di escape adatte a tale standard (VT100). Vedremo nei prossimi articoli come superare questa limitazione e anzi raggiungere caratteristiche di universalità rispetto al tipo di terminale utilizzato.

Eredità di Modula-2: le UNIT di Turbo Pascal

Il concetto di modulo di Modula-2 è stato ereditato tout-court nelle versioni di Turbo Pascal successive alla 3.x tramite il concetto di UNIT, che ne ricalca l’idea anche dal punto di vista sintattico nella definizione, separando l’interfaccia dalla implementazione.

Turbo Pascal infatti è una estensione del linguaggio Pascal originario che non prevede invece la programmazione modulare.

Riferimenti esterni

 

Francesco Sblendorio

Francesco Sblendorio nasce nel 1977. Nel 1985 fa conoscenza con il mondo dei computer attraverso un Commodore 16: da quel momento la discesa verso il lato oscuro è inesorabile e si trasforma in un geek impenitente. Nell'ambito del retrocomputing ha un sogno: che i vecchi computer non debbano semplicemente sopravvivere (conservando la loro funzionalità), piuttosto devono vivere, attraverso nuovi software sviluppati oggi per i computer di ieri.

Potrebbero interessarti anche...