Tôi đã phát triển một ngôn ngữ kịch bản nhỏ và tôi mới bắt đầu viết các ràng buộc thư viện riêng đầu tiên. Đây thực tế là lần đầu tiên tôi viết một phần mở rộng riêng cho ngôn ngữ kịch bản, vì vậy tôi gặp phải một vấn đề về khái niệm.
Tôi muốn viết mã keo cho các thư viện phổ biến để có thể sử dụng chúng từ ngôn ngữ này và do thiết kế của công cụ tôi đã viết, điều này đạt được bằng cách sử dụng một mảng C struct
mô tả tên hàm có thể nhìn thấy bởi máy ảo, cùng với một con trỏ hàm.
Do đó, một ràng buộc riêng thực sự chỉ là một biến toàn cục và bây giờ tôi rõ ràng phải đặt cho nó một cái tên (tốt nhất là tốt). Trong C, thật đơn giản để đặt các hàm riêng của mình vào một "không gian tên" bằng cách thêm tiền tố tùy chỉnh vào tên hàm, như trong myscript_parse_source()
hoặc myscript_run_bytecode()
. Tên tùy chỉnh sẽ mô tả lý tưởng tên của thư viện mà nó là một phần của. Ở đây phát sinh sự nhầm lẫn.
Hãy nói rằng tôi đang viết một ràng buộc cho libcURL
. Trong trường hợp này, có vẻ hợp lý khi gọi thư viện mở rộng của tôi curl_myscript_binding
, như thế này:
MYSCRIPT_API const MyScriptExtFunc curl_myscript_lib[10];
Nhưng bây giờ điều này va chạm với curl
không gian tên. (Tôi thậm chí đã nghĩ đến việc gọi nó curlmyscript_lib
nhưng thật không may, libcURL không chỉ sử dụng curl_
tiền tố - các API công cộng có chứa các macro như CURLCODE_*
và CURLOPT_*
vì vậy tôi cho rằng điều này cũng sẽ làm lộn xộn không gian tên.)
Một lựa chọn khác là khai báo nó myscript_curl_lib
, nhưng điều đó chỉ tốt khi tôi là người duy nhất viết các ràng buộc (vì tôi biết tôi đang làm gì với không gian tên của mình). Ngay khi những người đóng góp khác bắt đầu thêm các ràng buộc riêng của họ, bây giờ họ làm lộn xộn myscript
không gian tên. (Tôi đã thực hiện một số nghiên cứu và có vẻ như ví dụ ràng buộc Perl cURL tuân theo mô hình này. Không chắc tôi nên nghĩ gì về điều đó ...)
Vì vậy, làm thế nào để bạn đề nghị tôi đặt tên biến của tôi? Có hướng dẫn chung nào cần được tuân theo không?
SomeLang_register_extension("curl", "H2CO3", "000.001.000", the_extension)
nơithe_extension
chỉ đến một số cấu trúc tiện ích mở rộng nhưng không hiển thị trên toàn cầu. Ngôn ngữ của bạn sau đó sẽ giữ cấu trúc dữ liệu nội bộ để sắp xếp các phần mở rộng theo tên, phiên bản và tác giả.