Trong bài viết của Eric Lippert Có gì với ký hiệu Hungary? , ông nói rằng mục đích của Ký hiệu Hungary (loại tốt) là để
mở rộng khái niệm "loại" để bao gồm thông tin ngữ nghĩa bên cạnh thông tin đại diện lưu trữ.
Một ví dụ đơn giản sẽ là tiền tố của một biến đại diện cho tọa độ X với "x" và một biến đại diện cho tọa độ Y với "y", bất kể các biến đó là số nguyên hay dấu phẩy hay bất cứ điều gì, khi bạn vô tình viết xFoo + yBar
, mã rõ ràng trông sai.
Nhưng tôi cũng đã đọc về hệ thống loại của Haskell và dường như trong Haskell, người ta có thể thực hiện điều tương tự (nghĩa là "mở rộng khái niệm loại để bao gồm thông tin ngữ nghĩa") bằng cách sử dụng các loại thực tế mà trình biên dịch sẽ kiểm tra cho bạn. Vì vậy, trong ví dụ trên, xFoo + yBar
trong Haskell thực sự sẽ không biên dịch được nếu bạn thiết kế chương trình của mình một cách chính xác, vì chúng sẽ được khai báo là các loại không tương thích. Nói cách khác, có vẻ như hệ thống loại của Haskell hỗ trợ hiệu quả việc kiểm tra thời gian biên dịch tương đương với Ký hiệu Hungary
Vì vậy, ký hiệu Hungary chỉ là một hỗ trợ ban nhạc cho các ngôn ngữ lập trình mà hệ thống loại không thể mã hóa thông tin ngữ nghĩa? Hay ký hiệu Hungary cung cấp một cái gì đó vượt ra ngoài những gì một hệ thống loại tĩnh như Haskell có thể cung cấp?
(Tất nhiên, tôi đang sử dụng Haskell làm ví dụ. Tôi chắc chắn có những ngôn ngữ khác có hệ thống loại biểu cảm tương tự (giàu? Mạnh?), Mặc dù tôi không bắt gặp bất kỳ ngôn ngữ nào.)
Để rõ ràng, tôi không nói về việc chú thích tên biến với kiểu dữ liệu , mà là thông tin về ý nghĩa của biến trong ngữ cảnh của chương trình. Ví dụ: một biến có thể là một số nguyên hoặc float hoặc double hoặc long hoặc bất cứ điều gì, nhưng có thể ý nghĩa của biến đó là tọa độ x tương đối được đo bằng inch. Đây là loại thông tin tôi đang nói về mã hóa thông qua Ký hiệu Hungary (và thông qua các loại Haskell).