Một tính năng tôi bỏ lỡ từ các ngôn ngữ chức năng là ý tưởng rằng các toán tử chỉ là các hàm, vì vậy việc thêm một toán tử tùy chỉnh thường đơn giản như thêm một hàm. Nhiều ngôn ngữ thủ tục cho phép quá tải toán tử, do đó, trong một số trường hợp, toán tử vẫn là các hàm (điều này rất đúng trong D khi toán tử được truyền dưới dạng một chuỗi trong một tham số mẫu).
Dường như khi quá tải toán tử được cho phép, việc thêm các toán tử tùy chỉnh bổ sung thường là chuyện nhỏ. Tôi tìm thấy bài đăng trên blog này , lập luận rằng các toán tử tùy chỉnh không hoạt động tốt với ký hiệu infix vì các quy tắc ưu tiên, nhưng tác giả đưa ra một số giải pháp cho vấn đề này.
Tôi nhìn xung quanh và không thể tìm thấy bất kỳ ngôn ngữ thủ tục nào hỗ trợ các nhà khai thác tùy chỉnh bằng ngôn ngữ này. Có các bản hack (như macro trong C ++), nhưng hầu như không giống như hỗ trợ ngôn ngữ.
Vì tính năng này khá nhỏ để thực hiện, tại sao nó không phổ biến hơn?
Tôi hiểu rằng điều đó có thể dẫn đến một số mã xấu, nhưng trước đây đã không ngăn các nhà thiết kế ngôn ngữ thêm các tính năng hữu ích có thể dễ dàng bị lạm dụng (macro, toán tử ternary, con trỏ không an toàn).
Các trường hợp sử dụng thực tế:
- Triển khai các toán tử bị thiếu (ví dụ Lua không có toán tử bitwise)
- Mimic D's
~
(nối mảng) - DSL
- Sử dụng
|
như đường cú pháp kiểu Unix (sử dụng coroutines / máy phát điện)
Tôi cũng quan tâm đến ngôn ngữ mà làm phép nhà khai thác tùy chỉnh, nhưng tôi quan tâm nhiều hơn trong lý do tại sao nó đã được loại trừ. Tôi đã nghĩ đến việc sử dụng một ngôn ngữ kịch bản để thêm các toán tử do người dùng định nghĩa, nhưng tôi đã dừng lại khi nhận ra rằng tôi không thấy nó ở bất cứ đâu, vì vậy có lẽ có một lý do chính đáng tại sao các nhà thiết kế ngôn ngữ thông minh hơn tôi không cho phép.