come differiscono gli interpreti per le lingue tipizzate staticamente o dinamicamente?

1

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ì.

    
posta korrok 08.07.2015 - 05:20
fonte

1 risposta

4

Naturalmente, c'è molta discrepanza nel modo in cui si fanno queste cose. In genere, tuttavia, si dispone di due passaggi dell'interprete

  1. Semantica statica

    Controlla il controllo del tipo, ma potrebbe anche generare un modulo intermedio più ottimizzato affinché il codice acceleri l'interpretazione più tardi

  2. Semantica dinamica

    Questo effettivamente fa la valutazione e potrebbe infatti essere di tipo libero. Dopo il controllo dei tipi, sappiamo che i tipi si allineeranno e quindi in molti linguaggi tipizzati staticamente li cancelliamo. Ciò significa che possiamo rappresentare tutti i nostri valori con una grande unione nel nostro ambiente.

    Ad esempio, abbiamo un tipo di tutti i valori e una mappa di nomi per quel tipo. Tuttavia, in un linguaggio sicuro da un tipo che fa i sindacati può essere complicato, quindi spesso applichiamo i sindacati taggati che hanno il vantaggio di essere in grado di dirti in che caso è. Per usare queste cose, il modello si accorda su un'espressione, piuttosto un evento comune in OCaml che credo rappresenti ciò che hai visto nel loro interprete.

risposta data 08.07.2015 - 05:47
fonte

Leggi altre domande sui tag