- Động cơ JavaScript rút gọn dựa trên PrimJS, được biên dịch sang WebAssembly nên an toàn và có tính di động cao
- Cấu trúc sandbox mạnh mẽ cung cấp an toàn bộ nhớ và khả năng giới hạn tính năng JavaScript, cùng triết lý
fail-fast để đảm bảo bảo mật và khả năng mở rộng
- Có thể chạy song song hàng trăm VM ngay trên một máy đơn lẻ, đồng thời có thể thiết lập giới hạn bộ nhớ và lượng tính toán (gas) của script
- Có thể nhúng vào gần như mọi nền tảng chỉ với một tệp
.wasm, không cần build phức tạp hay FFI, và kích thước cũng rất nhỏ, khoảng 800KB
- Hiệu năng cải thiện tối đa 28% so với QuickJS, và trong môi trường JIT cung cấp tốc độ thực thi gần mức native
Hako: động cơ JavaScript nhỏ, nhanh và an toàn
Hako là gì?
- Động cơ JavaScript có tính di động, tập trung vào bảo mật và hiệu năng cao được phát triển dựa trên PrimJS
- Tên Hako bắt nguồn từ tiếng Nhật, nghĩa là “chiếc hộp” (箱)
- Động cơ dựa trên WebAssembly được thiết kế để ai cũng có thể dễ dàng nhúng vào bất kỳ môi trường nào
Bảo mật: an toàn bộ nhớ và giới hạn tính năng
- Được viết bằng C/C++ nhưng biên dịch sang WebAssembly → đảm bảo an toàn bộ nhớ và sandbox khi thực thi
- Cũng có thể giới hạn ngay chính các tính năng JavaScript:
- Loại bỏ một số hàm cụ thể
- Giới hạn để không cho phép cấp phát bộ nhớ
- Giới hạn thời gian chạy, mức dùng bộ nhớ, gas, v.v.
- Thông qua
VMContext, có thể nhận diện người dùng độc hại và kiểm soát tài nguyên
- Với chiến lược
fail-fast, mã không ổn định hoặc tiêu tốn tài nguyên quá mức sẽ bị dừng sớm
Dễ nhúng: chỉ cần một tệp .wasm là đủ
- Không dùng Emscripten → chỉ cần runtime WebAssembly hiện đại là có thể nhúng
- Không cần wrapper FFI cho nhiều ngôn ngữ → có thể sử dụng mà không cần quy trình build phức tạp
- Ví dụ: có cung cấp ví dụ nhúng Hako trong Go
- Bản build phát hành chỉ gồm một tệp
.wasm kích thước 800KB
Hiệu năng: nhanh hơn QuickJS
- Cũng như PrimJS nhanh hơn QuickJS, Hako cũng cải thiện hiệu năng trung bình 28% so với QuickJS
- Tối đa hóa hiệu năng nhờ tối ưu hóa SIMD và cải tiến một số đường nóng (hot path)
- Không có suy giảm hiệu năng do WebAssembly — nhờ tối ưu JIT trên V8, Wasmtime và JavaScriptCore, tốc độ gần như mức native
- API đo hiệu năng và profiling cũng được tích hợp sẵn
Hạn chế và kế hoạch sắp tới
- Một số tính năng từng dùng trong PrimJS (template interpreter, GC snapshot) vẫn chưa được hỗ trợ đầy đủ
- Do công cụ snapshot của ByteDance vẫn chưa được mã nguồn mở, nhà phát triển đang tự triển khai công cụ riêng
- Hiện vẫn đang ở giai đoạn beta ban đầu, nên phản hồi rất quan trọng để ổn định API/ABI
- GitHub - hako
2 bình luận
https://github.com/fernvenue/hako-go-example
có vẻ là liên kết không tồn tại. Ví dụ nhúng bằng Go có lẽ là
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
thì đúng hơn.
Ồ, có vẻ như đã được thay đổi rồi. Tôi đã sửa lại. Cảm ơn bạn.