Bộ Quản Lý Mô-Đun C Tối Giản - nói dối e blog

Bộ Quản Lý Mô-Đun C Tối Giản

Trong quá trình xây dựng các dự án C, đặc biệt khi tích hợp với Lua, tôi luôn gặp khó khăn do thiếu một hệ thống quản lý mô-đun thống nhất. Mặc dù Lua có cơ chế quản lý mô-đun đơn giản nhưng vẫn đủ dùng. Một phương pháp phổ biến là đóng gói các mô-đun C thành các mô-đun Lua riêng biệt, tận dụng hệ thống quản lý của Lua để đảm bảo các mô-đun C hoạt động độc lập, không can thiệp lẫn nhau.

Tuy nhiên, khi các mô-đun C phát sinh mối quan hệ phụ thuộc, vấn đề trở nên phức tạp hơn. Giải pháp thông thường là sử dụng linker để kết nối toàn bộ mô-đun, phân biệt bằng tiền tố tên hàm. Một cách tiếp cận hiện đại hơn là tận dụng trình tải thư viện động của hệ điều hành.

Gần đây, tôi nảy ra ý tưởng xây dựng một bộ quản lý mô-đun tối giản với độ phức tạp vừa phải. Sau nửa ngày phát triển, kết quả đạt được khá khả quan. Xem dự án tại đây

Trong quá trình thiết kế, tôi cố ý tránh sử dụng macro phức tạp, giữ giao diện nguyên bản theo phong cách C truyền thống. Đặc biệt, hệ thống hoàn toàn không phụ thuộc vào bất kỳ hàm cấp phát bộ nhớ nào - toàn bộ vùng nhớ cần thiết phải được cấp phát sẵn bởi người gọi và truyền vào từ đầu.

Bộ quản lý này tập trung quản lý con trỏ hàm, không can thiệp vào các trạng thái khác (khác với các hệ thống quản lý phức tạp như COM, vừa quản lý giao diện hàm vừa giữ trạng thái phiên bản đối tượng). Tuy nhiên, mỗi thể hiện quản lý vẫn được cung cấp một con trỏ userdata để người dùng mở rộng chức năng.

Về cơ chế tìm kiếm mô-đun qua chuỗi ký tự (import), hiện tại tôi sử dụng thuật toán duyệt tuần tự O(n) qua tất cả mô-đun đã đăng ký. Nếu trong tương lai có yêu cầu hiệu năng cao hơn, tôi sẽ bổ sung bảng băm (hash table) để tạo bộ đệm đơn giản, tối ưu hóa tốc độ truy vấn.

0%