La scrittura di un interprete per un linguaggio tipizzato in modo dinamico di solito comporta la creazione di un Ambiente, una struttura di dati che memorizza le mappature dei nomi di variabili ai loro valori. I valori sono racchiusi in una sorta di tipo di wrapper, che potrebbe essere simile a questo in C:
typedef struct value {
type_t type;
void * datum;
} value_t;
dove type_t
memorizza esplicitamente il tipo dell'oggetto dato. Un dizionario da stringhe a value_t
potrebbe essere utilizzato come ambiente per l'interprete di lingua.
OCaml e Haskell sono entrambi linguaggi strongmente tipizzati, per i quali esistono sia compilatori sia interpreti. In che modo gli interpreti per i linguaggi tipizzati staticamente differiscono da quelli delle lingue digitate dinamicamente, se non del tutto?
Il mio primo pensiero è che potrebbe esserci un ambiente che mappa le variabili in un descrittore dei loro tipi ( type_t
nell'esempio sopra), seguito da un ambiente separato per ogni tipo visto finora. Tuttavia, non riesco a immaginare come si possa effettivamente implementare una cosa del genere. Inoltre, dopo aver sfogliato il codice sorgente per l'interprete OCaml, sembra che lo stesso tipo di box / unboxing di valori familiari dai linguaggi dinamici sia usato anche lì.