2012-01-08 15 views
11

Esiste un'implementazione in C++, di tipo Damas-Hindley-Milner, preferibilmente utilizzando le tecniche C++ moderne?Tipo di inferenza implementato in C++

+1

Ehm ... che cosa è Damas-Hindley-Milner tipo di stile di inferenza? Qualsiasi link sarebbe carino. Si noti inoltre che C++ 11 aggiunge 'auto' per l'inferenza di tipo, e' template's sono tipi di inferenza di natura quando vengono usati come parametri di funzione. – Xeo

+0

Puoi approfondire cosa è "inferenza di tipo di stile Damas-Hindley-Milner"? Non ho voglia di cercarlo su google. –

+10

@BenjaminLindley: Immagino che questa sia una situazione in cui, se devi cercarlo, probabilmente non avrai la risposta, o ... –

risposta

1

Sospetto che non avrai molta fortuna; i ragazzi funzionali che scrivono queste cose in genere non lo fanno in C++! La maggior parte dei compilatori a cui è possibile accedere vengono utilizzati per compilarsi (ad esempio per OCaml o GHC).

Quindi, se qualcuno ha fatto Hindley-Milner come un progetto giocattolo, probabilmente non è in rete; se faceva parte del compilatore, è improbabile che sia in C++.

possibili cose che vengono in mente:

  • Hugs per Haskell è in C; ci saranno alcune fonti C lì da qualche parte che fanno quello che vuoi, e Haskell è un buon zucchero familiare. Non il C++ che vuoi però.
  • Non so nulla di F #, ma penso che sia HM, e se qualcuno ha scritto un compilatore grasso funzionale in C++ con tecniche moderne, potrebbe essere probabilmente MS. Ovviamente la fonte chiusa però.
0

Qui abbiamo un motore di inferenza del tipo (https://github.com/ltcmelo/psychec). Il nostro approccio è implementato dopo l'algoritmo HM (X) di Pottier e Remy, con fasi separate per la generazione di vincoli e l'inferenza del tipo in modo appropriato. La generazione dei vincoli è implementata in C++, ma la risoluzione dei tipi è implementata in Haskell (mi dispiace!). L'algoritmo deduce i tipi per i programmi C, per ricostruire il codice parzialmente disponibile. Lo strumento è disponibile on-line: http://cuda.dcc.ufmg.br/psyche-c/. Si inserisce parte di un programma C e si producono dichiarazioni di tipo che sono sufficienti per compilarlo.

saluti,

Fernando