- Ngôn ngữ scripting và engine thực thi có thể dễ dàng nhúng vào ứng dụng Rust
- Được thiết kế để thêm logic động thông qua script bên ngoài hoặc tạo DSL tùy chỉnh
- Có mức độ tương thích cao với Rust, đồng thời cung cấp kiến trúc cân nhắc cả hiệu năng, bảo mật và khả năng mở rộng
- Hoạt động trên mọi nền tảng được Rust hỗ trợ từ Rust 1.66.0+ trở lên (WASM,
no-std)
- Cú pháp là ngôn ngữ kiểu động tương tự JavaScript + Rust
- Hiệu năng: mất 0,14 giây để chạy 1 triệu vòng lặp trên Linux VM lõi đơn 2.6GHz
- Tích hợp Rust theo kiểu native: hỗ trợ hàm, kiểu, getter/setter, method, indexer của Rust
- Có thể truyền giá trị Rust vào script dưới dạng biến/hằng số (dùng
Scope)
- Hỗ trợ các kiểu dữ liệu chính: boolean, số nguyên, số thực dấu phẩy động,
Decimal, chuỗi, ký tự Unicode, mảng, mảng byte, object map
- Có thể gọi các hàm được định nghĩa trong script Rhai từ Rust
- Giảm thiểu phụ thuộc (chỉ dùng một số ít thư viện như smallvec, thin-vec)
- Engine có thể re-entrant: có thể đạt
Send + Sync thông qua sync
- Cung cấp tính năng biên dịch và tối ưu hóa AST
- Hỗ trợ hệ thống plugin và mở rộng API dựa trên macro
- Hỗ trợ nạp chồng hàm/toán tử, con trỏ hàm, currying, closure và một phần các mẫu OOP
- Cung cấp hệ thống module, có thể tổ chức codebase một cách động
- Hỗ trợ tuần tự hóa/giải tuần tự hóa
serde (tùy chọn)
- Cung cấp giao diện debug
Bảo mật và an toàn
- Đảm bảo Don’t Panic: nếu xảy ra panic sẽ được xem là bug, hệ thống host vẫn an toàn
- Thực thi sandbox: không thể thay đổi môi trường bên ngoài trừ khi được cho phép rõ ràng
- Ngăn chặn tấn công ác ý: chặn tràn stack, dữ liệu quá mức, thực thi vô hạn
- Có thể theo dõi tiến trình thực thi và dừng thủ công
- Đã vượt qua kiểm tra Miri
Dành cho những ai muốn tạo ngôn ngữ tùy chỉnh
- Có thể sử dụng Rhai như một DSL
- Có thể vô hiệu hóa một số tính năng ngôn ngữ như vòng lặp
- Có thể vô hiệu hóa và giới hạn keyword/toán tử
- Có thể mở rộng cú pháp và toán tử do người dùng định nghĩa
Tài liệu bổ sung
Giấy phép
- Có thể chọn Apache 2.0 hoặc MIT
- Mã nguồn được đóng góp mặc định áp dụng dual license
3 bình luận
Nếu bạn đang tìm một ngôn ngữ scripting thì trong are we game yet có một danh sách khá ổn.
https://arewegameyet.rs/ecosystem/scripting/
Không có trong danh sách đó, nhưng gần đây khi hỏi GPT tôi cũng phát hiện ra một ngôn ngữ scripting tên là koto; tôi chỉ xem lướt qua rồi thôi, nhưng trông nó cũng khá ổn.
https://koto.dev/
Trong lúc tìm kiếm tôi cũng thấy một cái tên là roto, nhưng chưa tìm hiểu đến mức biết nó là gì; chỉ là nơi tạo ra nó trông khá quen mắt.
https://github.com/NLnetLabs/roto
Có ví dụ đo thời gian trong wasm playground, nhưng có vẻ không nhanh nhỉ?
Vì đây là ngôn ngữ phục vụ mục đích scripting nên việc nó không nhanh là điều bình thường.