Nell'articolo di Eric Lippert Che succede con la notazione ungherese? , afferma che lo scopo della notazione ungherese (il tipo buono) è
extend the concept of "type" to encompass semantic information in addition to storage representation information.
Un semplice esempio potrebbe essere il prefisso di una variabile che rappresenta una coordinata X con "x" e una variabile che rappresenta una coordinata Y con "y", indipendentemente dal fatto che tali variabili siano numeri interi o float o altro, in modo che quando scrivi accidentalmente xFoo + yBar
, il codice sembra chiaramente sbagliato.
Ma ho anche letto sul sistema di tipi di Haskell, e sembra che in Haskell si possa realizzare la stessa cosa (cioè "estendere il concetto di tipo per comprendere le informazioni semantiche") usando tipi reali che il compilatore controllerà per te. Quindi nell'esempio sopra, xFoo + yBar
in Haskell in realtà non riuscirebbe a compilare se hai progettato il tuo programma correttamente, dal momento che sarebbero stati dichiarati come tipi incompatibili. In altre parole, sembra che il sistema di tipo Haskell supporti effettivamente un controllo in fase di compilazione equivalente alla notazione ungherese
Quindi, la notazione ungherese è solo un cerotto per i linguaggi di programmazione i cui sistemi di tipi non possono codificare informazioni semantiche? Oppure la notazione ungherese offre qualcosa oltre a ciò che un sistema di tipo statico come Haskell può offrire?
(Naturalmente, sto usando Haskell come esempio. Sono sicuro che ci siano altri linguaggi con sistemi di tipo espressamente simili (ricchi? forti?), anche se non ne ho mai visti nessuno.)
Per essere chiari, sono non che parla dell'annotazione dei nomi delle variabili con il tipo data , ma piuttosto delle informazioni sul significato di la variabile nel contesto del programma. Ad esempio, una variabile può essere un intero o float o double o long o qualsiasi altro, ma forse il della variabile è che è una coordinata x relativa misurata in pollici. Questo è il tipo di informazione che sto parlando di codifica tramite Notazione ungherese (e tramite tipi Haskell).