12 điểm bởi xguru 2025-05-09 | 2 bình luận | Chia sẻ qua WhatsApp
  • Độ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

 
secret3056 2025-05-09

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.

 
xguru 2025-05-09

Ồ, có vẻ như đã được thay đổi rồi. Tôi đã sửa lại. Cảm ơn bạn.