Q: Tại sao elisp không có không gian tên, và làm thế nào chúng ta có thể có được chúng?
Elisp không có không gian tên ngoài tên toàn cầu, điều này dẫn đến quy ước mã hóa tiền tố tất cả các hàm, biến và hằng toàn cầu có tiền tố duy nhất.
Ngoài yếu tố gây phiền nhiễu, nó còn gây cho tôi một vấn đề tương tự được đưa ra 1) số lượng thư viện và gói lớn ngày càng mở rộng và 2) sự tồn tại liên tục của các hàm và biến kế thừa không tôn trọng quy ước tiền tố, hoặc đủ bình dị rằng thực sự không có tùy chọn tiền tố tốt mà họ có thể sử dụng. Điều đó cũng có nghĩa là các nỗ lực định kỳ để hợp lý hóa mã cũ hơn (như với việc chuyển đổi từ cl
sang cl-lib
) là một lượng công việc không hề nhỏ. (Mặc dù tôi rất vui vì đã dọn dẹp, tôi vẫn rơi nước mắt mỗi khi tôi gõ một cái gì đó như thế cl-find
).
Tôi đã đi khắp nơi để xem liệu tôi có thể tìm ra lý do tại sao elisp vẫn không có không gian tên sau một vài thập kỷ sử dụng, nhưng hơi ngạc nhiên về vụ thu hoạch khiêm tốn. Các trang wiki về không gian tên là khá ngắn. Nic Ferrier đã xử lý vấn đề này lâu hơn một chút và cũng có một chủ đề khá gần đây về emacs-devel về vấn đề này. Có một luồng Stack Overflow cũ từ năm 2010 thảo luận về khả năng sử dụng macro để triển khai các không gian tên; một ví dụ khác về cách tiếp cận vĩ mô có thể được tìm thấy ở đây . Có ít nhất một vài triển khai ( ở đây và ở đây , với một mô tả về cái sau ở đây) ngoài đó, nhưng họ đã không thấy nhiều hoạt động trong một vài năm và tôi đã không chạy qua bất kỳ thư viện nào sử dụng chúng.
Tôi đoán rằng, nếu thêm không gian tên là dễ dàng, nó đã được thực hiện. Vì thế:
- Rào cản kỹ thuật để thêm không gian tên vào elisp là gì?
- Việc thêm không gian tên sẽ phá vỡ rất nhiều mã hiện có?
- Là chức năng này một cái gì đó cần phải hữu cơ đến mức không thể thay đổi (thay đổi chính trình thông dịch), hoặc nó thực sự có thể được xây dựng trên đầu thông qua các macro?