- มีการประกาศมาตรฐาน Wasm 3.0 อย่างเป็นทางการ พร้อมฟีเจอร์ขนาดใหญ่ที่เตรียมกันมานาน 6–8 ปี
- มี พื้นที่แอดเดรส 64 บิต, garbage collection, typed references, tail calls, การจัดการข้อยกเว้น ฯลฯ ช่วยให้คอมไพล์ภาษาแบบ high-level ไปยัง Wasm ได้ง่ายขึ้น
- ฟีเจอร์หลักใหม่ ๆ ช่วยด้าน แอปพลิเคชันประสิทธิภาพสูง, รันไทม์ของหลายภาษา, ความปลอดภัย และการขยายระบบ
- เหมาะกับกรณีใช้งานที่ต้องจัดการความจุและชุดข้อมูลขนาดใหญ่ใน ระบบนอกเหนือจากเว็บ ด้วย
- ตอนนี้รองรับแล้วในเว็บเบราว์เซอร์หลัก และเอนจินอิสระอย่าง Wasmtime ก็ใกล้รองรับครบถ้วน ทำให้ Wasm ยิ่งชัดเจนขึ้นในฐานะ แพลตฟอร์มรันโปรแกรมอเนกประสงค์
ภาพรวมการเปิดตัว Wasm 3.0
- มาตรฐาน WebAssembly เวอร์ชัน 3.0 เปิดตัวเมื่อวันที่ 17 กันยายน 2025
- นับเป็นการอัปเดตใหญ่ในรอบ 3 ปี หลังจากเวอร์ชัน 2.0 (เสร็จสมบูรณ์ในปี 2022) ที่เพิ่ม vector instructions, bulk memory operations, multiple return values และ simple reference types
- กลุ่ม W3C Community Group และ Working Group พัฒนาต่อเนื่องมาโดยตลอด และรีลีสครั้งนี้เป็นการเปลี่ยนแปลงขนาดใหญ่ที่รวม ฟีเจอร์สำคัญซึ่งเตรียมมานาน 6–8 ปี
- Wasm ยังคงแนวคิดของการเป็นภาษา low-level แต่เสริมระบบหน่วยความจำและระบบชนิดข้อมูลให้แข็งแรงขึ้น เพื่อรองรับ การคอมไพล์ภาษา high-level ได้ดียิ่งขึ้น
- ฟีเจอร์ที่พัฒนาหลังเวอร์ชัน 2.0 ได้เสร็จสมบูรณ์และกลายเป็น มาตรฐาน Live พร้อมการรองรับที่ขยายเพิ่มทั้งในเว็บเบราว์เซอร์และเอนจินอิสระ
- สามารถติดตามสถานะการรองรับของแต่ละเอนจินได้ที่ หน้าสถานะฟีเจอร์ของ Wasm
- ใช้ toolchain ใหม่ SpecTec ในการสร้างเวอร์ชันนี้เป็นครั้งแรก จึงช่วย เพิ่มความน่าเชื่อถือ
การเปลี่ยนแปลงสำคัญและฟีเจอร์ใหม่
- พื้นที่แอดเดรส 64 บิต
- สามารถประกาศหน่วยความจำและตารางด้วยชนิด i64 ได้
- ขยายพื้นที่แอดเดรสของแอป Wasm จากราว 4GB ไปจนถึงขีดจำกัดทางกายภาพ (เชิงทฤษฎี 16 exabytes)
- สำหรับเว็บจะยังจำกัดไว้ที่ 16GB แต่ใน ระบบนอกเว็บ มีประโยชน์สำหรับการรองรับแอปพลิเคชันและชุดข้อมูลขนาดใหญ่
- หลายหน่วยความจำ
- สามารถประกาศและเข้าถึง อ็อบเจ็กต์หน่วยความจำหลายตัว ได้โดยตรงภายในโมดูลเดียว
- ใช้งานได้หลากหลาย เช่น การรวมโมดูล การแยกพื้นที่แอดเดรส การบัฟเฟอร์ และความปลอดภัย
- ทำให้เครื่องมือ static linking อย่าง wasm-merge ใช้กับโมดูล Wasm ได้ทั้งหมด
- Garbage Collection (GC)
- นอกจาก linear memory แล้ว ยังรองรับ พื้นที่จัดเก็บที่รันไทม์ของ Wasm ดูแลให้อัตโนมัติ
- คอมไพเลอร์สามารถประกาศ data layout ได้โดยตรง เช่น struct/array types และ unboxed integers
- มีเพียงบิลดิ้งบล็อกพื้นฐานสำหรับการจัดการหน่วยความจำ ส่วน ระบบอ็อบเจ็กต์ระดับสูงหรือ closure สามารถออกแบบแยกกันตามภาษาที่นำไปใช้
- Typed References
- ระบบชนิดข้อมูลของ Wasm ถูกขยายให้ อธิบายรูปแบบของค่าในฮีปและฟังก์ชันรีเฟอเรนซ์ได้แม่นยำขึ้น
- รองรับ subtyping และ type recursion พร้อมคำสั่งใหม่
call_ref ที่ช่วยให้ เรียกฟังก์ชันทางอ้อมอย่างปลอดภัยโดยไม่ต้องเช็กชนิดข้อมูลตอนรันไทม์
- Tail Calls
- รองรับโครงสร้าง tail call ที่คืนค่าทันทีโดยไม่ต้องใช้พื้นที่สแตกเพิ่มจากฟังก์ชันเดิม
- นำไปใช้กับภาษาเชิงฟังก์ชันหรือการปรับแต่งภายในรันไทม์ได้
- การจัดการข้อยกเว้น
- เพิ่ม ระบบจัดการข้อยกเว้นแบบเนทีฟ ภายใน Wasm
- รองรับการประกาศ exception tag และ payload, การ catch แบบเลือกได้ และตัวจัดการข้อยกเว้นระดับบล็อก
- ช่วย เพิ่ม portability และประสิทธิภาพ โดยไม่ต้องใช้วิธีอ้อมผ่าน JS ที่ไม่มีประสิทธิภาพแบบเดิม
- คำสั่งเวกเตอร์แบบ relaxed
- เพื่อรองรับความแตกต่างของฮาร์ดแวร์สำหรับคำสั่ง SIMD จึงมี relaxed variant ที่เปิดให้รายละเอียดการทำงานบางส่วนขึ้นกับการอิมพลีเมนต์
- ทำให้สามารถปรับแต่งประสิทธิภาพได้หลากหลายภายในขอบเขตพฤติกรรมที่ถูกต้อง
- โปรไฟล์แบบกำหนดผลลัพธ์แน่นอน
- แม้ในกรณีที่ผลลัพธ์ของคำสั่งเดียวกันอาจไม่เป็น deterministic เช่น การคำนวณ floating point หรือ relaxed SIMD ก็ยัง กำหนดการทำงานแบบ deterministic ข้ามแพลตฟอร์ม ได้
- ช่วยรับประกัน ความสามารถในการทำซ้ำและการพกพา สำหรับบล็อกเชนหรือระบบที่ต้อง replay ได้
- ไวยากรณ์ custom annotation
- เพิ่ม ไวยากรณ์ annotation ที่มนุษย์อ่านและเขียนได้ในซอร์สโค้ด
- แม้มาตรฐานจะไม่ตีความโดยตรง แต่สามารถนำไปใช้กับมาตรฐานหรือส่วนขยายในอนาคตได้
การเชื่อมต่อกับ JavaScript และความเข้ากันได้
- JS string builtins
- สามารถส่งและจัดการค่าสตริงของ JS ใน Wasm ได้ผ่าน externref
- โดย import ฟังก์ชันพื้นฐานใหม่ ก็จะสามารถใช้สตริง JS ภายนอกได้โดยตรงภายใน Wasm
ประโยชน์และแนวโน้มของ Wasm 3.0
- เป็นรากฐานสำคัญที่จำเป็นสำหรับ การคอมไพล์ภาษาโปรแกรมระดับสูงไปยัง Wasm
- ภาษาอย่าง Java, OCaml, Scala, Kotlin, Scheme, Dart เป็นต้น ก็เริ่มใช้ฟีเจอร์ GC อย่างจริงจังมากขึ้น
สถานะการจัดทำสเปกและการเผยแพร่
- Wasm 3.0 เป็นมาตรฐานแรกที่สร้างด้วย toolchain ใหม่ SpecTec
- เว็บเบราว์เซอร์หลัก ส่วนใหญ่รองรับ Wasm 3.0 แล้ว และเอนจินแบบสแตนด์อโลนอย่าง Wasmtime ก็ใกล้เสร็จสมบูรณ์
- ตรวจสอบสถานะการรองรับของแต่ละเอนจินได้ที่หน้า Wasm feature status
ยังไม่มีความคิดเห็น