Equivalenza dell'analisi del flusso di dati, interpretazione astratta e inferenza del tipo?


9

@La risposta di Babou a una domanda recente mi ricorda che un tempo penso di aver letto un documento sull'equivalenza (in termini di entrambi i fatti che possono essere inferiti o dimostrati e la complessità temporale dell'esecuzione dell'algoritmo di inferenza) dell'analisi del flusso di dati , interpretazione astratta e inferenza del tipo .

In alcuni sotto-casi (come tra l'analisi del flusso di dati interprocedurale in avanti sensibile al contesto e l'interpretazione astratta) l'equivalenza è relativamente ovvia per me, ma la domanda sembra più sottile per altri confronti. Ad esempio, non riesco a capire come si possa usare l'inferenza di tipo Hindley-Milner per provare alcune delle proprietà che possono essere dimostrate con l' analisi del flusso di dati sensibile al flusso.

Quali sono i riferimenti seminali che discutono le equivalenze (o differenze) tra analisi del flusso di dati, interpretazione astratta e inferenza di tipo?

Risposte:


4

L'analisi del flusso di dati e l'inferenza del tipo sono esempi specifici di interpretazione astratta.

L'analisi del flusso di dati e l'interpretazione astratta sembrano simili poiché riguardano entrambi il calcolo di un punto fisso. Le analisi del flusso di dati in genere hanno domini astratti ad altezza finita che garantiscono la terminazione. In generale, l'interpretazione astratta non assume tali domini astratti; per gestire domini di altezza infinita l'interpretazione astratta usa tecniche di allargamento e restringimento.

Si scopre che l'inferenza del tipo riguarda anche il calcolo del punto fisso, sebbene ciò sia tutt'altro che ovvio, imo. Ecco un documento che mostra esplicitamente che i tipi sono interpretazioni astratte: carta . Fondamentalmente, i tipi sono visti come un'astrazione della semantica concreta del programma. Nel sistema dei tipi Hindley-Milner, ad esempio, il dominio astratto dei tipi ha un'altezza infinita e il calcolo di un tipo (più generale) usando l'unificazione sta essenzialmente eseguendo un'operazione di ampliamento (molto imprecisa).


4

Un buon posto per conoscere questi tre approcci e come la relazione è il libro Principles of Program Analysis di Nielson, Nielson e Hankin.

Non credo sia corretto affermare che l'analisi del flusso di dati, l'interpretazione astratta e l'inferenza del tipo siano la stessa cosa. Mentre ci sono molte somiglianze, e forse più di quanto ci si aspetterebbe, dato che i tre hanno avuto origine in comunità diverse, ci sono anche molte differenze.


3

Li considero sostanzialmente uguali. Inizialmente avevano obiettivi diversi e furono coniati da diverse fazioni di informatica.

L'analisi del flusso di dati viene dalla fazione ingegneristica del compilatore, cercando di parlare dei loro algoritmi di ottimizzazione e di impermeabilizzare i limiti superiori della loro complessità ecc

L'interpretazione astratta viene dal campo formale e matematico dell'informatica. Questa è una versione ancora più formale con più interesse per la correttezza e meno nella costruzione di compilatori reali.

L'inferenza del tipo viene dal campo accademico della programmazione funzionale in cui inizialmente era uno strumento per fare cose interessanti con i compilatori. Poi è nata l'idea che un tipo può essere molto più di un semplice "int" o "float" ma anche di altre cose come nella classica analisi del flusso di dati.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.