Luau – ngôn ngữ scripting dựa trên Lua, nhanh, nhỏ gọn, an toàn và có hệ thống kiểu dần dần
(luau.org)- Luau là ngôn ngữ scripting nhúng nhanh, an toàn và hỗ trợ kiểu dần dần được phát triển từ Lua 5.1
- Đã được mở rộng về hiệu năng, công cụ ngôn ngữ và hệ thống kiểu để hỗ trợ các trò chơi phức tạp và codebase quy mô lớn trên nền tảng Roblox
- Khác với Lua gốc, ngôn ngữ này có tính năng sandboxing và được thiết kế để mã có mức quyền hạn khác nhau có thể chạy song song
- Cú pháp tương thích với Lua 5.1, đồng thời cung cấp các mở rộng cú pháp bổ sung và công cụ phân tích (linter, type checker) để nâng cao chất lượng mã
- Với tối ưu hóa hiệu năng, bytecode tùy biến, hỗ trợ JIT..., Luau hướng tới tốc độ thực thi ngang mức LuaJIT và có tiềm năng được dùng trong nhiều môi trường nhúng ngoài Roblox
Motivation (động lực ra đời)
- Khoảng năm 2006, Roblox đã đưa Lua 5.1 vào làm ngôn ngữ scripting cho game
- Theo thời gian, khi mức độ phức tạp của game trên nền tảng Roblox tăng lên và quy mô đội ngũ lớn hơn, Roblox đã cải tiến mạnh cả ngôn ngữ lẫn phần triển khai để vượt qua các giới hạn của Lua cũ
- Cùng với sự phát triển của nền tảng, họ đã đầu tư nhiều vào tối ưu hiệu năng, tính thân thiện với người dùng và phát triển các công cụ liên quan đến ngôn ngữ
- Đặc biệt, khi quản lý codebase quy mô lớn vượt 1 triệu dòng tính đến năm 2020, Roblox nhận thấy việc đưa vào hệ thống kiểu dần dần là điều thiết yếu
- Dựa trên những nhu cầu đó, Roblox đã phát triển Luau, một ngôn ngữ dẫn xuất từ Lua, mang lại các đặc tính nhanh, nhỏ gọn, an toàn và có thể áp dụng kiểu một cách dần dần
- Giải thích chi tiết hơn có trong tài liệu Why Luau
Tổng quan về Luau
- Luau là ngôn ngữ scripting nhúng dựa trên Lua 5.1
- Cung cấp runtime nhanh và nhẹ
- Hỗ trợ hệ thống kiểu dần dần, cho phép kết hợp phân tích động và tĩnh
- Được tích hợp trong Roblox Studio, và có thể bật strict mode bằng cờ
--!strict - Nhà phát triển có thể xem tài liệu liên kết với Roblox tại Luau Creator Docs
Sandboxing (tính năng sandbox)
- Luau giới hạn thư viện chuẩn được phơi bày ra ngoài và cung cấp các tính năng sandbox bổ sung
- Nhờ đó, mã không đặc quyền do nhà phát triển thông thường viết và mã đặc quyền nội bộ của nền tảng có thể chạy song song một cách an toàn
- Vì vậy, môi trường thực thi của Luau khác với Lua gốc
- Có thể xem chi tiết tại Sandbox mô tả
Compatibility (tương thích)
- Duy trì khả năng tương thích ngược với Lua 5.1 nhiều nhất có thể, đồng thời tiếp thu một phần tính năng từ các phiên bản mới hơn
- Tuy nhiên, Luau không chấp nhận mọi quyết định thiết kế của Lua, mà phản ánh các use case và ràng buộc đặc thù của Roblox
- Tình trạng hỗ trợ các tính năng sau Lua 5.1 được nêu trong Compatibility tài liệu
Syntax (cú pháp)
- Hoàn toàn tương thích với cú pháp Lua 5.1
- Đồng thời cung cấp các mở rộng cú pháp hiện đại, quen thuộc để cải thiện trải nghiệm phát triển
- Có thể xem toàn bộ cú pháp trong Syntax tài liệu
Analysis (công cụ phân tích)
-
Cung cấp công cụ phân tích script để hỗ trợ viết mã đúng hơn
-
Các thành phần gồm:
- Linter: phát hiện lỗi phổ biến
- Type Checker: kiểm tra kiểu
-
Có thể chạy bằng công cụ CLI
luau-analyze -
Quy tắc lint xem tại Lint tài liệu, hướng dẫn kiểm tra kiểu xem tại Typecheck tài liệu
Performance (hiệu năng)
- Cung cấp frontend tùy biến gồm parser, linter, type checker cùng với bytecode, interpreter và compiler được tối ưu hóa
- Trong một số trường hợp, hiệu năng có thể cạnh tranh với interpreter LuaJIT
- Hỗ trợ trình biên dịch JIT viết thủ công trên nền tảng x64 và ARM64, có thể cải thiện mạnh hiệu năng của một số chương trình nhất định
- Runtime vẫn đang tiếp tục được tối ưu và một phần được viết lại để nâng cao hiệu quả
- Chi tiết đặc tính hiệu năng có trong Performance tài liệu
Libraries (thư viện)
- Bản thân ngôn ngữ là siêu tập hoàn chỉnh của Lua 5.1
- Ở thư viện chuẩn, một số hàm đã bị loại bỏ và một số hàm mới được bổ sung
- Khi được nhúng vào ứng dụng, nó cũng có thể truy cập các thư viện mở rộng riêng theo ứng dụng
- Có thể xem đầy đủ tài liệu thư viện tại Library tài liệu
1 bình luận
Ý kiến trên Hacker News
--!strict, mã vẫn chạy mà không có bất kỳ lỗi hay cảnh báo nào ngay cả khi có vi phạm kiểu rõ ràng. Nó không giống như hành vi tôi kỳ vọngluauthì việc kiểm tra kiểu sẽ không được áp dụng. Nếu trong môi trường nhúng bạn buộc toàn bộ mã phải được type check trước khi biên dịch, thì sẽ có trải nghiệm đúng như kỳ vọng là lỗi kiểu bị bắt ra. Đây là hệ quả tất yếu của thiết kế, vì họ đã chuyển hàng triệu dòng mã Lua 5.1 sang Luau cùng một lúc