Lo scopo della notazione ungherese è di codificare le informazioni nell'identificatore che non può essere altrimenti codificato nel sistema di tipi. La mia opinione è che se questa informazione è abbastanza importante da essere codificata, allora è abbastanza importante da essere codificata nel sistema di tipi, dove può essere adeguatamente controllata. E se l'informazione non è importante, allora perché diamine vuoi ingombrare il codice sorgente con esso?
Oppure, per dirla in modo più succinto: le informazioni sul tipo appartengono al sistema di tipi. (Nota: non deve essere un sistema di tipo statico . Fintanto che cattura gli errori di tipo, non mi interessa quando li cattura.)
Un paio di altre risposte menzionate Unità di misura come usi accettabili della notazione ungherese. (Sono piuttosto sorpreso che nessuno abbia menzionato ancora la NASA Mars Climate Orbiter, dato che sembra emergere continuamente nelle discussioni sulla notazione ungherese).
Ecco un semplice esempio in F #:
[<Measure>] type m
[<Measure>] type ft
let someLength = 48.15<m>
let someOtherLength = 16.2342<ft>
someLength + someOtherLength
// someLength + someOtherLength
// -------------^^^^^^^^^^^^^^^
// error FS0001: The unit of measure 'ft' does not match the unit of measure 'm'.
Guarda, Ma, nessun ungherese!
Se I fosse per usare la notazione ungherese invece dei tipi qui, non mi sarebbe di aiuto un po ':
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Il compilatore lo ha lasciato passare. Ora mi affido a un umano per individuare ciò che è essenzialmente un errore di tipo. Non è quello che è un controllore di tipi?
Ancora meglio, utilizzando il linguaggio di programmazione Frink :
someLength = 48.15m
someOtherLength = 16.2342ft
someLength + someOtherLength
// 53.09818416 m (length)
// Wanna know the answer in a good old fashioned American unit?
someLength + someOtherLength -> yd
// 58.06888031496062992
// Are you an astrophysicist?
someLength + someOtherLength -> parsec
// 1.7207949554318336148e-15
// ... or a fundmentalist Christian who refuses to use units invented
// less than 2000 years ago?
someLength + someOtherLength -> biblicalcubits
// 95.893563822870765006
Quindi, in sintesi: non mi piace la notazione ungherese. Non dovresti mai usarlo.
Detto questo, penso che usare la notazione ungherese sia una buona idea. Aspetta, cosa?
Sì! In questo caso particolare hai menzionato:
Furthermore, most of our code has to run on some weirdo DSPs, where a concept like bool or float doesn't exist anyway
Ma questo è precisamente l'unico caso d'uso ragionevole per Notazione ungherese!
PS: raccomando vivamente di guardare Frink. Il suo manuale contiene alcune delle più fantastiche battute di scoreggia di sempre. È anche un bel linguaggio: -)