O objetivo da notação húngara é codificar informações no identificador que não pode ser codificado no sistema de tipos. Minha opinião é que, se essa informação é importante o suficiente para ser codificada, é importante o suficiente para ser codificada no sistema de tipos, onde pode ser verificada corretamente. E se a informação não é importante, então por que diabos você deseja desorganizar seu código-fonte?
Ou, para ser mais sucinto: as informações de tipo pertencem ao sistema de tipos. (Nota: ele não precisa ser um sistema de tipo estático . Contanto que ele detecte os erros de tipo, eu não me importo quando ele os captura.)
Algumas outras respostas mencionaram Unidades de Medida como usos aceitáveis da Notação Húngara. (Estou meio surpreso que ninguém tenha mencionado a NASA Mars Climate Orbiter, já que isso parece surgir o tempo todo nas discussões sobre a notação húngara).
Aqui está um exemplo simples em 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'.
Olha, mãe, não há húngaros!
Se eu fosse usar Hungarian Notation em vez de tipos aqui, que não iria me ajudar um pouco:
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
O compilador deixou direto. Agora estou confiando em um humano para detectar o que é essencialmente um erro de tipo. Não é para isso que serve um verificador de tipos?
Melhor ainda, usando a linguagem de programação 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
Então, em resumo: eu não gosto de notação húngara. Você nunca deve usá-lo.
Dito isto, acho que usar a notação húngara é uma boa ideia. Espere o que?
Sim! Nesse caso específico , você mencionou:
Além disso, a maior parte do nosso código precisa ser executada em alguns DSPs esquisitos, onde um conceito como bool ou float não existe de qualquer maneira
Mas esse é precisamente o único caso de uso sensato para a notação húngara!
PS: Eu recomendo sinceramente olhar para Frink. Seu manual contém algumas das piadas de peido mais impressionantes de todos os tempos. Também é uma linguagem bem legal :-)