Giới Thiệu Một Số Thứ Liên Quan Đến Lua
Dạo gần đây, mình có nhận dự án yêu cầu xuất dữ liệu Lua ra định dạng text đặc biệt. Mình đã dùng thử thư viện Lust – một công cụ tuyệt vời cho việc sinh mã tự động. Dù còn nhiều hạn chế vì số lượng người dùng ít, nhưng nhờ tính năng thú vị được phát hiện khi đọc source code (ban đầu tưởng là bug), tác giả đã rất nhanh chóng sửa lỗi theo góp ý trên GitHub. Điều này cho thấy tinh thần cộng đồng nhiệt huyết trong phát triển Lua.
Một công cụ đáng chú ý khác là luaffi – phiên bản tách riêng thư viện ffi từ luajit. Nhắc đến luajit, nhiều người biết đến nhờ tính năng ffi mạnh mẽ, dù bản thân luajit còn tồn tại một số hạn chế như: giới hạn địa chỉ bộ nhớ 32-bit, không hỗ trợ API Lua 5.2, độ ổn định chưa bằng Lua chuẩn. Trong thực tế, server game “Kuang Ren” của đối tác đã tắt tính năng JIT để dùng ffi, cho thấy sự cân bằng giữa hiệu năng và ổn định. Ngoài ra, dự án luaclang minh chứng cho xu hướng tận dụng ffi để viết binding thay vì chạy theo hiệu năng luajit. Việc tách ffi thành thư viện độc lập là đóng góp quý báu cho cộng đồng Lua. Trên Windows, khi compile bằng mingw cần chỉnh sửa Makefile, thêm định nghĩa -D WIN32 WINNT=0x500 mới build thành công.
Đặc biệt phải kể đến Terra – ngôn ngữ lập trình hybrid kết hợp Lua và C. Đặc trưng của Terra nằm ở cơ chế hoạt động độc đáo: vừa có thể chạy giải thích như Lua thông qua VM, vừa hỗ trợ biên dịch tại runtime thành mã native thông qua LLVM. Điều thú vị là cả code Terra và Lua (theo phỏng đoán của mình khi nghiên cứu sơ bộ) đều được dịch hoàn toàn, cho phép lưu thành file .o hoặc binary độc lập. Là ngôn ngữ tĩnh kiểu, quản lý bộ nhớ thủ công như C, Terra vẫn giữ được tính tương tác mượt mà với Lua nhờ việc biến hàm Terra thành giá trị first-class trong Lua một cách trực tiếp. Cú pháp Terra chịu ảnh hưởng rõ rệt từ Objective-C, nhưng thay vì phát minh cú pháp mới như Objective-C làm với C, Terra khéo léo mượn sẵn cú pháp Lua đã trưởng thành, đồng thời duy trì khả năng trộn lẫn với C dễ dàng. Đặc biệt, nhờ tích hợp LLVM, Terra cho phép mở rộng ngôn ngữ theo hướng xây dựng DSL chuyên dụng một cách linh hoạt.
Tổng kết, Terra là dự án rất đáng để đầu tư thời gian tìm hiểu sâu. Một chi tiết thú vị là Terra hiện tích hợp luajit nhưng mới chỉ sử dụng phần ffi, chưa tận dụng API mở rộng của luajit. Trong tương lai có thể xem xét thay thế bằng luaffi độc lập để tối ưu hóa hơn nữa.