8 คะแนน โดย GN⁺ 2024-11-03 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

แบ็กเอนด์เชิงทดลองใหม่

  • เพิ่มการรองรับ V8, Wasmi และ WAMR
  • ตอนนี้สามารถผสานอินทรีพรีเตอร์หรือรันไทม์ใด ๆ ที่รองรับสเปก Wasm-C-API เข้ากับ Wasmer ได้อย่างง่ายดาย
  • การผสานรวม V8 มอบประสบการณ์การดีบักที่ยอดเยี่ยมผ่าน V8 debugger และ Chrome Devtools
  • การใช้ V8 เป็นแบ็กเอนด์ยังหมายถึงการรองรับ WebAssembly exceptions และ garbage collection แบบเนทีฟด้วย

รองรับ iOS (ผ่าน WAMR, Wasmi และ V8 bindings)

  • Wasmer นำ WebAssembly มาสู่อุปกรณ์ iOS ผ่านโหมดอินทรีพรีเตอร์แบบใหม่
  • ด้วยความสามารถของ V8, Wasmi และ WebAssembly Micro Runtime(WAMR) ตอนนี้นักพัฒนาสามารถรันโมดูล WebAssembly บน iOS ได้อย่างราบรื่น
  • ไม่จำเป็นต้องแก้ไขโค้ดเบส และทำให้สามารถสร้างแอปพลิเคชันประสิทธิภาพสูงในระบบนิเวศของ Apple ได้

ทำให้โค้ดเบสเพรียวลง

  • สำหรับการเปิดตัว Wasmer 5.0 ทีมได้มุ่งเน้นทำให้โค้ดเบสของ Wasmer เพรียวที่สุดเท่าที่จะเป็นไปได้
  • บาง dependency ที่ Wasmer ใช้งานนั้นไม่ได้รับการดูแลมานานแล้ว หรือซ้ำซ้อนกับ crate รุ่นใหม่ที่ปลอดภัยกว่า
  • เนื่องจาก Emscripten bindings แทบไม่ได้ถูกใช้งานในช่วง 2 ปีที่ผ่านมา จึงยุติการรองรับและจัดระเบียบ dependency ส่งผลให้ลบโค้ดออกจากโค้ดเบสของ Wasmer ไปได้ถึง 20,000 บรรทัด

ปรับปรุงประสิทธิภาพ

  • การ deserialize โมดูลเร็วขึ้นได้สูงสุด 50% แล้ว (เช่น เมื่อเรียก Module::deserialize หรือรันโมดูลผ่าน wasmer run)
  • การปรับปรุงเหล่านี้อาศัยการอัปเดตครั้งสำคัญของ rkyv ซึ่งเป็นไลบรารี zero-copy deserialization ที่ใช้สำหรับ deserialize โมดูล

อัปเกรดคอมไพเลอร์: Cranelift และ LLVM 18

  • ด้วยการผสานรวม Cranelift รุ่นล่าสุด ความเร็วขณะรันไทม์จึงดีขึ้นอย่างมาก ทำให้โมดูล WebAssembly ทำงานได้เร็วกว่าเดิม
  • ตอนนี้ Wasmer 5.0 มาพร้อม LLVM เวอร์ชันล่าสุด (18) ทำให้นักพัฒนาเข้าถึงการปรับแต่งล่าสุดของ toolchain ได้
  • การอัปเกรด LLVM ช่วยเพิ่มทั้งความเข้ากันได้และประสิทธิภาพ มอบรากฐานที่แข็งแกร่งสำหรับการคอมไพล์และรันโมดูล WebAssembly ที่ซับซ้อน
  • Wasmer 5.0 ยังมาพร้อมการรองรับ LoongAarch64 แบบทดลองอีกด้วย
  • จากการ benchmark coremark ด้วยคอมไพเลอร์เวอร์ชันล่าสุด พบว่า LLVM และ Cranelift ใน Wasmer v5.0 เร็วกว่า v4.4.0 ประมาณ 8%

ความเห็นจาก GN⁺

  • การเปิดตัว Wasmer 5.0 ดูจะเป็นอีกก้าวสำคัญของระบบนิเวศ WebAssembly โดยเฉพาะการรองรับ iOS และการมีตัวเลือกแบ็กเอนด์ที่หลากหลาย ซึ่งคาดว่าจะช่วยขยายขอบเขตการใช้งาน WebAssembly ไปสู่แอปพลิเคชันบนมือถือได้มากขึ้น
  • การรองรับรันไทม์หลากหลายแบบเป็นแบ็กเอนด์ เช่น V8, Wasmi และ WAMR ทำให้นักพัฒนาสามารถเลือกรันไทม์ที่เหมาะกับความต้องการของตนเองได้มากที่สุด ซึ่งน่าจะช่วยเพิ่มทั้งความยืดหยุ่นและความเข้ากันได้ของ WebAssembly อย่างมาก
  • ความพยายามด้านการเพิ่มประสิทธิภาพผ่านการทำให้โค้ดเบสเพรียวลงและการนำคอมไพเลอร์รุ่นใหม่มาใช้ก็เป็นจุดที่น่าจับตาเช่นกัน สิ่งนี้แสดงให้เห็นว่า Wasmer ไม่ได้มุ่งเพียงเพิ่มฟีเจอร์เท่านั้น แต่ยังให้ความสำคัญกับการยกระดับคุณภาพอย่างต่อเนื่องด้วย
  • ขณะเดียวกัน การยุติการรองรับ Emscripten bindings ก็เป็นจุดที่น่าเสียดายอยู่บ้าง แต่เมื่อพิจารณาว่ามาตรฐานใหม่อย่าง WASI และ WASIX ได้เกิดขึ้นมาและลดความจำเป็นของมันลง ก็ถือเป็นการตัดสินใจที่สมเหตุสมผล
  • โดยรวมแล้ว Wasmer 5.0 เป็นรีลีสที่สะท้อนพัฒนาการของ WebAssembly ได้อย่างชัดเจน และคาดว่า Wasmer จะยังคงเป็นหนึ่งในโครงการสำคัญที่ขับเคลื่อนระบบนิเวศ WebAssembly ต่อไป อย่างไรก็ตาม ฟีเจอร์ที่ยังอยู่ในขั้นทดลองก็ยังต้องอาศัยความพยายามอย่างต่อเนื่องเพื่อยกระดับเสถียรภาพและความสมบูรณ์

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

 
GN⁺ 2024-11-03

ความคิดเห็นบน Hacker News

  • กราฟประสิทธิภาพดูสับสนและเหมือนถูกสาป บางอันแสดงด้วยสเกลลอการิทึม และบางกรณีก็ยากที่จะเข้าใจว่าต้องการสื่ออะไร ตัวอย่างเช่น กราฟ "Argon 2" แสดงแท่งเกือบทั้งหมดให้มีความยาวเท่ากัน แต่ตัวเลขของแต่ละแท่งที่แสดงเป็นมิลลิวินาทีกลับต่างกัน
  • เมื่อใช้ V8 เป็นแบ็กเอนด์ ก็จะรองรับ WebAssembly exception handling และ garbage collection กำลังรอข่าวเพิ่มเติมเกี่ยวกับเรื่องนี้ และสงสัยว่า wasm-gc สามารถแชร์ข้อมูล/สตริงของโฮสต์ระหว่างโมดูลต่าง ๆ ภายในรันไทม์เดียวกันได้หรือไม่ หรือว่าจำกัดอยู่แค่โมดูลเดียว
  • จากหน้าแลนดิ้งเพจของ Wasmer ก็ยังยากที่จะเข้าใจว่ามันทำอะไร บอกว่าสามารถรันทุกอย่างได้ทุกที่ แต่ก็ยังไม่ชัดเจนว่าจริง ๆ แล้วทำอะไร ดูเหมือนเป็นผลิตภัณฑ์ที่มุ่งไปทางนักพัฒนา แต่มีคำฮิตมากกว่าคำอธิบายเชิงเทคนิค
  • พอใจกับ Wasmtime และกำลังแฮ็กระบบปลั๊กอินที่อิงกับ WASM component model และ WASI อยู่ ทำแล้วสนุกดี
  • ยังหากรณีใช้งานที่ดีสำหรับการนำ WASM มาใช้ในโปรเจ็กต์ไม่เจอ สถานการณ์คล้ายกับไม่รู้ว่าจะเอา Raspberry Pi ไปทำอะไร ยังไม่ชัดเจนว่าทำไมถึงควรเลือก WASM สำหรับโปรเจ็กต์ Rust แบบ asynchronous
  • อยากให้มีโซลูชันที่ไม่ต้องใช้ Cross-Origin Isolated header ยังใช้งานเวอร์ชันเก่าอยู่
  • สงสัยว่า WASM จะทำหน้าที่เป็นทางเลือกแทน Electron app ที่กินทรัพยากรน้อยกว่าได้หรือไม่ WASM ไม่มีการเข้าถึง DOM แต่ก็สงสัยว่าสามารถเพิ่มผ่านส่วนขยายได้หรือเปล่า
  • ไม่รู้ว่าโซลูชันนี้แก้ปัญหาอะไร JavaScript runtime ทุกตัวไม่ได้มี WASM engine ติดตั้งมาอยู่แล้วหรือ
  • สงสัยว่าโซลูชันนี้ทำให้ประเมินโค้ด Node.js ในแซนด์บ็อกซ์ได้อย่างปลอดภัยหรือไม่
  • กราฟประสิทธิภาพอ่านยาก มีการใช้ทั้งเครื่องหมายจุลภาคและจุดเป็นตัวคั่นหลักพัน และมีการปัดความละเอียดแบบตามอำเภอใจเป็น 1, 2, 3 หลัก