12 คะแนน โดย xguru 2025-05-09 | 2 ความคิดเห็น | แชร์ทาง WhatsApp
  • เอนจิน JavaScript แบบน้ำหนักเบา ที่สร้างบนพื้นฐานของ PrimJS และคอมไพล์เป็น WebAssembly จึงปลอดภัยและพกพาได้ดีเยี่ยม
  • มีโครงสร้างแซนด์บ็อกซ์ที่แข็งแกร่งพร้อมความปลอดภัยของหน่วยความจำและการจำกัดความสามารถของ JavaScript รวมถึงแนวคิดแบบ ‘fail-fast’ เพื่อเสริมทั้งความปลอดภัยและการขยายระบบ
  • สามารถรัน VM หลายร้อยตัวแบบขนานได้แม้บนเครื่องเดียว และยังตั้งข้อจำกัดหน่วยความจำรวมถึงปริมาณการประมวลผล (gas) ของสคริปต์ได้
  • ฝังใช้งานได้บนแทบทุกแพลตฟอร์มด้วยไฟล์ .wasm เพียงไฟล์เดียว โดยไม่ต้องมี build ที่ซับซ้อนหรือ FFI และยังมีขนาดเล็กมากเพียงราว 800KB
  • ให้ประสิทธิภาพ ดีกว่า QuickJS สูงสุด 28% และในสภาพแวดล้อม JIT ก็ให้ ความเร็วในการรันระดับเนทีฟ

Hako: เอนจิน JavaScript ที่เล็ก เร็ว และปลอดภัย

Hako คืออะไร?

  • เอนจิน JavaScript แบบพกพา เน้นความปลอดภัย และประสิทธิภาพสูง ที่พัฒนาบนพื้นฐานของ PrimJS
  • ชื่อ Hako มีที่มาจากคำภาษาญี่ปุ่นที่แปลว่า “กล่อง(箱)”
  • เอนจินที่ใช้ WebAssembly เป็นฐาน ซึ่งออกแบบมาให้ใครก็สามารถฝังใช้งานได้ง่ายในทุกสภาพแวดล้อม

ความปลอดภัย: ความปลอดภัยของหน่วยความจำและการจำกัดฟังก์ชัน

  • แม้เขียนด้วย C/C++ แต่คอมไพล์เป็น WebAssembly → รับประกันความปลอดภัยของหน่วยความจำและแซนด์บ็อกซ์ขณะรัน
  • สามารถจำกัดความสามารถของ JavaScript เองได้ด้วย:
    • ลบบางฟังก์ชันออก
    • จำกัดไม่ให้มีการจัดสรรหน่วยความจำ
    • จำกัดเวลาในการรัน ปริมาณการใช้หน่วยความจำ และ gas เป็นต้น
  • ผ่าน VMContext จึงสามารถ ระบุผู้ใช้ที่เป็นอันตรายและควบคุมทรัพยากรได้
  • ใช้ กลยุทธ์ fail-fast เพื่อหยุดโค้ดที่ไม่เสถียรหรือใช้ทรัพยากรมากเกินไปตั้งแต่เนิ่น ๆ

ความง่ายในการฝังใช้งาน: แค่มี .wasm ไฟล์เดียวก็พอ

  • ไม่ใช้ Emscripten → จึงฝังใช้งานได้หากมีเพียง WebAssembly runtime สมัยใหม่
  • ไม่จำเป็นต้องมี FFI wrapper สำหรับหลายภาษา → ใช้งานได้โดยไม่ต้องผ่านกระบวนการ build ที่ซับซ้อน
  • ตัวอย่าง: มี ตัวอย่างการฝัง Hako ใน Go ให้ดู
  • รีลีสบิลด์ประกอบด้วยไฟล์ .wasm ขนาดเพียง 800KB เท่านั้น

ประสิทธิภาพ: เร็วกว่า QuickJS

  • เช่นเดียวกับที่ PrimJS เร็วกว่า QuickJS, Hako ก็ มีประสิทธิภาพดีกว่า QuickJS โดยเฉลี่ย 28%
  • เพิ่มประสิทธิภาพสูงสุดด้วย การปรับแต่ง SIMD และการปรับปรุงบางส่วนของ hot path
  • ไม่มีการสูญเสียประสิทธิภาพจาก WebAssembly — บน V8, Wasmtime และ JavaScriptCore ทำความเร็วได้เกือบระดับเนทีฟด้วยการปรับแต่ง JIT
  • มี API สำหรับวัดประสิทธิภาพและทำโปรไฟล์ในตัวด้วย

ข้อจำกัดและแผนในอนาคต

  • ฟีเจอร์บางส่วนที่เคยใช้ใน PrimJS (template interpreter, GC snapshot) ยังไม่รองรับอย่างสมบูรณ์
  • เนื่องจากเครื่องมือ snapshot ของ ByteDance ยังไม่ถูกเปิดซอร์ส นักพัฒนาจึง กำลังพัฒนาเครื่องมือของตนเองอยู่
  • ขณะนี้ยังอยู่ในช่วงเบต้าเริ่มต้น และ ฟีดแบ็กมีความสำคัญมากต่อการทำให้ API/ABI เสถียร
  • GitHub - hako

2 ความคิดเห็น

 
secret3056 2025-05-09

https://github.com/fernvenue/hako-go-example
ดูเหมือนจะเป็นลิงก์ที่ไม่มีอยู่แล้ว ตัวอย่างการฝังกับ Go น่าจะเป็น
https://gist.github.com/andrewmd5/197efb527ef40131c34ca12fd6d0a61e
มากกว่าครับ

 
xguru 2025-05-09

อ้อ ดูเหมือนว่าจะมีการเปลี่ยนแปลงนะครับ ผมเลยแก้ไขไว้แล้ว ขอบคุณครับ