Nell'articolo di Eric Lippert Che succede con la notazione ungherese? , afferma che lo scopo della notazione ungherese (il tipo buono) è quello di
estendere il concetto di "tipo" per includere informazioni semantiche oltre alle informazioni sulla rappresentazione della memoria.
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 si scrive accidentalmente xFoo + yBar
, il codice sembra chiaramente sbagliato.
Ma ho anche letto del sistema di tipi di Haskell, e sembra che in Haskell si possa ottenere la stessa cosa (cioè "estendere il concetto di tipo per includere informazioni semantiche") usando tipi reali che il compilatore controllerà per te. Quindi nell'esempio sopra, xFoo + yBar
in Haskell non verrebbe effettivamente compilato se il programma fosse stato progettato correttamente, poiché sarebbero stati dichiarati tipi incompatibili. In altre parole, sembra che il sistema di tipi di Haskell supporti effettivamente il controllo in fase di compilazione equivalente alla notazione ungherese
Quindi, la Notazione ungherese è solo un aiuto di banda per i linguaggi di programmazione i cui sistemi di tipi non possono codificare informazioni semantiche? O la Notazione ungherese offre qualcosa di diverso da quello che può offrire un sistema di tipo statico come quello di Haskell?
(Certo, sto usando Haskell come esempio. Sono sicuro che ci sono altre lingue con sistemi di tipo similmente espressivi (ricchi? Forti?), Sebbene non ne abbia mai trovato nessuno.)
Per essere chiari, io non parlando di annotare i nomi delle variabili con il dati di tipo, ma piuttosto con le informazioni sul significato della variabile nel contesto del programma. Ad esempio, una variabile può essere un numero intero o float o double o long o altro, ma forse il significato della variabile è che è una coordinata x relativa misurata in pollici. Questo è il tipo di informazioni di cui sto parlando sulla codifica tramite la Notazione ungherese (e tramite i tipi di Haskell).