Dans l'article d'Eric Lippert Qu'est-ce qui se passe avec la notation hongroise? , il déclare que le but de la notation hongroise (le bon type) est de
étendre le concept de "type" pour englober les informations sémantiques en plus des informations de représentation de stockage.
Un exemple simple serait de préfixer une variable qui représente une coordonnée X avec "x" et une variable qui représente une coordonnée Y avec "y", que ces variables soient des nombres entiers ou flottants ou autre, de sorte que lorsque vous écrivez accidentellement xFoo + yBar
, le code semble clairement faux.
Mais j'ai également lu sur le système de types de Haskell, et il semble que dans Haskell, on puisse accomplir la même chose (c'est-à-dire "étendre le concept de type pour englober les informations sémantiques") en utilisant des types réels que le compilateur vérifiera pour vous. Ainsi, dans l'exemple ci-dessus, xFoo + yBar
dans Haskell, la compilation échouerait si vous avez correctement conçu votre programme, car ils seraient déclarés comme des types incompatibles. En d'autres termes, il semble que le système de type de Haskell supporte efficacement la vérification à la compilation équivalente à la notation hongroise
Ainsi, la notation hongroise est-elle juste un pansement pour les langages de programmation dont les systèmes de types ne peuvent pas coder les informations sémantiques? Ou la notation hongroise offre-t-elle quelque chose au-delà de ce qu'un système de type statique comme celui de Haskell peut offrir?
(Bien sûr, j'utilise Haskell comme exemple. Je suis sûr qu'il existe d'autres langages avec des systèmes de type également expressifs (riches? Forts?), Bien que je n'en ai pas rencontré.)
Pour être clair, je ne parle pas d'annoter des noms de variables avec le type de données , mais plutôt des informations sur la signification de la variable dans le contexte du programme. Par exemple, une variable peut être un entier ou flottant ou double ou long ou autre, mais peut-être que la signification de la variable est que c'est une coordonnée relative x mesurée en pouces. C'est le genre d'informations dont je parle sur l'encodage via la notation hongroise (et via les types Haskell).