La notazione ungherese è una soluzione alternativa per le lingue con digitazione statica insufficientemente espressiva? [Chiuso

softwareengineering.stackexchange https://softwareengineering.stackexchange.com/questions/113576

Domanda

Nell'articolo di Eric Lippert Che succede con la notazione ungherese?, afferma che lo scopo della notazione ungherese (il buon tipo) è di

Estendi il concetto di "tipo" per comprendere informazioni semantiche oltre alle informazioni sulla rappresentazione di archiviazione.

Un semplice esempio sarebbe prefisporre 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 galleggiano o altro, in modo che quando scrivi accidentalmente xFoo + yBar, il codice sembra chiaramente sbagliato.

Ma ho anche letto del sistema di tipo di Haskell e sembra che in Haskell possa realizzare la stessa cosa (cioè "estendere il concetto di tipo per comprendere informazioni semantiche") tipi effettivi che il compilatore controllerà per te. Quindi nell'esempio sopra, xFoo + yBar In Haskell non riuscirebbe a compilare se avessi progettato il tuo programma correttamente, poiché sarebbero stati dichiarati come tipi incompatibili. In altre parole, sembra che il sistema di tipo di Haskell supporti efficacemente il controllo del tempo di compilazione equivalente alla notazione ungherese

Quindi, la notazione ungherese è solo un cerotto per i linguaggi di programmazione i cui sistemi di tipo non possono codificare le informazioni semantiche? O la notazione ungherese offre qualcosa al di là di ciò che un sistema di tipo statico come Haskell può offrire?

(Certo, sto usando Haskell come esempio. Sono sicuro che ci sono altre lingue con sistemi di tipo altrettanto espressivi (ricchi? Strong?), Anche se non ne ho imbattuti.)


Per essere chiari, lo sono non parlando di nomi variabili annotati con il dati digitare, ma piuttosto con informazioni sul significato della variabile nel contesto del programma. Ad esempio, una variabile può essere un numero intero o galleggiante o doppio o lungo o altro, ma forse la variabile significato è che è una coordinata X relativa misurata in pollici. Questo è il tipo di informazioni di cui sto parlando di codifica tramite notazione ungherese (e tramite tipi di Haskell).

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top