Đó là một chút chủ quan, nhưng tôi hy vọng sẽ hiểu rõ hơn về những yếu tố làm cho một nhà điều hành rõ ràng để sử dụng so với khó khăn và khó khăn. Gần đây tôi đã xem xét các thiết kế ngôn ngữ và một vấn đề mà tôi luôn luôn xoay quanh là khi nào thực hiện một số thao tác chính trong ngôn ngữ một toán tử và khi nào nên sử dụng từ khóa hoặc hàm.
Haskell có phần nổi tiếng về điều này, vì các toán tử tùy chỉnh dễ tạo và thường một kiểu dữ liệu mới sẽ được đóng gói với một số toán tử để sử dụng trên nó. Ví dụ, thư viện Parsec đi kèm với rất nhiều toán tử để kết hợp các trình phân tích cú pháp với nhau, với các loại đá quý như thế >.
và .>
tôi thậm chí không thể nhớ được ý nghĩa của chúng ngay bây giờ, nhưng tôi nhớ chúng rất dễ làm việc khi tôi đã ghi nhớ những gì họ thực sự có nghĩa. Một cuộc gọi chức năng như leftCompose(parser1, parser2)
đã được tốt hơn? Chắc chắn dài dòng hơn, nhưng rõ ràng hơn trong một số cách.
Quá tải toán tử trong các ngôn ngữ giống như C là một vấn đề tương tự, nhưng bị giới hạn bởi vấn đề bổ sung là quá tải ý nghĩa của các toán tử quen thuộc như +
với ý nghĩa mới khác thường.
Trong bất kỳ ngôn ngữ mới, điều này có vẻ như là một vấn đề khá khó khăn. Ví dụ, trong F #, việc truyền sử dụng toán tử đúc kiểu có nguồn gốc toán học, thay vì cú pháp truyền kiểu C # hoặc kiểu VB dài dòng. C #: (int32) x
VB: CType(x, int32)
F #:x :> int32
Về lý thuyết, một ngôn ngữ mới có thể có các toán tử cho hầu hết các chức năng tích hợp. Thay vì def
hoặc dec
hoặc var
khai báo biến, tại sao không ! name
hay @ name
hoặc một cái gì đó tương tự. Nó chắc chắn rút ngắn khai báo theo sau ràng buộc: @x := 5
thay vì declare x = 5
hoặc let x = 5
Hầu hết mã sẽ yêu cầu rất nhiều định nghĩa biến, vậy tại sao không?
Khi nào thì một toán tử rõ ràng và hữu ích, và khi nào nó bị che khuất?
+
nối chuỗi hoặc <<
cho luồng). Mặt khác, với Haskell, một toán tử chỉ là một hàm có tên tùy chỉnh (nghĩa là không bị quá tải) hoặc là một phần của lớp loại, nghĩa là trong khi nó đa hình, nó thực hiện cùng một điều logic cho mọi loại và thậm chí có chữ ký cùng loại. Vì vậy, >>
là >>
cho tất cả các loại và không bao giờ sẽ là một sự thay đổi chút.