Целью венгерской нотации является кодирование информации в идентификатор, который иначе не может быть закодирован в системе типов. Мое собственное мнение таково: если эта информация достаточно важна для ее кодирования, то она достаточно важна для кодирования в системе типов, где ее можно должным образом проверить. И если информация не важна, то какого чёрта вы хотите загромождать ее исходным кодом?
Или, если выразиться более кратко: информация о типе принадлежит системе типов. (Примечание: это не обязательно должна быть статическая система типов. Пока она отлавливает ошибки типов, мне все равно, когда они их отлавливают.)
В нескольких других ответах упоминаются единицы измерения в качестве допустимого использования венгерской нотации. (Я немного удивлен, что никто еще не упомянул космический орбитальный аппарат НАСА «Марс», поскольку, похоже, это все время обсуждается в Венгерской нотации).
Вот простой пример на 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'.
Смотри, мама, не венгры!
Если бы я был использовать венгерскую нотацию вместо типов здесь, это не помогло бы мне один бит:
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Компилятор пропустил это. Теперь я полагаюсь на человека, который определит, что по сути является ошибкой типа. Разве это не то, для чего нужна проверка типов?
Еще лучше, используя язык программирования 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
Итак, в заключение: я не люблю венгерские обозначения. Вы никогда не должны использовать это.
При этом, я думаю, что использование венгерской нотации - хорошая идея. Чего ждать?
Да! В данном конкретном случае вы упомянули:
Кроме того, большая часть нашего кода должна выполняться на некоторых чудовищных DSP, где такая концепция, как bool или float, в любом случае не существует.
Но это как раз единственный разумный вариант использования для венгерской нотации!
PS: я искренне рекомендую посмотреть на Фринка. Его руководство содержит некоторые из самых удивительных шуток пердеть когда-либо. Это также довольно крутой язык :-)