มีการแสดงตัวอย่างมาตรฐาน WebAssembly 2.0 แล้ว

W3C ได้เผยแพร่ร่างข้อกำหนดใหม่ที่กำหนดมิดเดิลแวร์ WebAssembly 2.0 และ API ที่เกี่ยวข้องให้เป็นมาตรฐาน ช่วยให้สามารถสร้างแอปพลิเคชันประสิทธิภาพสูงที่สามารถพกพาข้ามเบราว์เซอร์และแพลตฟอร์มฮาร์ดแวร์ได้ WebAssembly มีโค้ดระดับกลางระดับต่ำที่ไม่ขึ้นกับเบราว์เซอร์ สำหรับการรันแอปพลิเคชันที่คอมไพล์จากภาษาการเขียนโปรแกรมต่างๆ ด้วยการใช้ JIT สำหรับ WebAssembly คุณสามารถบรรลุระดับประสิทธิภาพที่ใกล้เคียงกับโค้ดเนทีฟ

เทคโนโลยี WebAssembly สามารถใช้ในการทำงานที่มีประสิทธิภาพสูงในเบราว์เซอร์ เช่น การเข้ารหัสวิดีโอ การประมวลผลเสียง กราฟิกและการจัดการ 3 มิติ การพัฒนาเกม การดำเนินการเข้ารหัส และการคำนวณทางคณิตศาสตร์ โดยอนุญาตให้เขียนโค้ดในภาษาที่คอมไพล์ เช่น C/C++ .

เป้าหมายหลักของ WebAssembly คือการรับประกันความสามารถในการพกพา พฤติกรรมที่คาดการณ์ได้ และการเรียกใช้โค้ดที่เหมือนกันบนแพลตฟอร์มที่แตกต่างกัน เมื่อเร็วๆ นี้ WebAssembly ยังได้รับการส่งเสริมให้เป็นแพลตฟอร์มสากลสำหรับการรันโค้ดอย่างปลอดภัยบนโครงสร้างพื้นฐาน ระบบปฏิบัติการ และอุปกรณ์ใดๆ ไม่จำกัดเพียงเบราว์เซอร์

W3C ได้เผยแพร่ข้อกำหนดร่างสามประการสำหรับ WebAssembly 2.0:

  • WebAssembly Core - อธิบายเครื่องเสมือนระดับต่ำสำหรับการเรียกใช้โค้ดระดับกลางของ WebAssembly ทรัพยากรที่เกี่ยวข้องกับ WebAssembly จะถูกส่งในรูปแบบ ".wasm" ซึ่งคล้ายกับไฟล์ ".class" ใน Java โดยมีข้อมูลคงที่และส่วนของโค้ดสำหรับการทำงานกับข้อมูลนั้น
  • อินเทอร์เฟซ WebAssembly JavaScript - จัดเตรียม API สำหรับการทำงานร่วมกับ JavaScript ช่วยให้คุณรับค่าและส่งพารามิเตอร์ไปยังฟังก์ชัน WebAssembly การดำเนินการ WebAssembly เป็นไปตามโมเดลความปลอดภัยของ JavaScript และการโต้ตอบทั้งหมดกับระบบหลักจะดำเนินการในลักษณะเดียวกับการเรียกใช้โค้ด JavaScript
  • WebAssembly Web API - กำหนดอินเทอร์เฟซการเขียนโปรแกรมตามกลไก Promise สำหรับการร้องขอและดำเนินการทรัพยากร ".wasm" รูปแบบทรัพยากร WebAssembly ได้รับการปรับให้เหมาะสมเพื่อเริ่มดำเนินการโดยไม่ต้องรอให้ไฟล์โหลดเต็มที่ ซึ่งปรับปรุงการตอบสนองของเว็บแอปพลิเคชัน

การเปลี่ยนแปลงหลักใน WebAssembly 2.0 เมื่อเปรียบเทียบกับเวอร์ชันแรกของมาตรฐาน:

  • รองรับประเภทเวกเตอร์ v128 และคำสั่งเวกเตอร์ที่เกี่ยวข้องซึ่งช่วยให้คุณสามารถดำเนินการกับค่าตัวเลขหลายค่าแบบขนาน (SIMD, คำสั่งเดียวหลายข้อมูล)
  • ความสามารถในการนำเข้าและส่งออกตัวแปรส่วนกลางที่ไม่แน่นอน ช่วยให้สามารถรวมค่าต่างๆ เช่น ตัวชี้สแต็กใน C++ ได้
  • คำแนะนำการแปลง float เป็น int ใหม่ซึ่งแทนที่จะส่งข้อยกเว้นเมื่อผลลัพธ์ล้น ให้ส่งคืนค่าต่ำสุดหรือสูงสุดที่เป็นไปได้ (จำเป็นสำหรับ SIMD)
  • คำแนะนำสำหรับการขยายเครื่องหมายของจำนวนเต็ม (การเพิ่มความลึกบิตของตัวเลขโดยยังคงรักษาเครื่องหมายและค่าไว้)
  • รองรับบล็อกและฟังก์ชันที่ส่งคืนค่าหลายค่า (นอกเหนือจากการส่งพารามิเตอร์หลายตัวไปยังฟังก์ชัน)
  • การใช้งานฟังก์ชัน BigInt64Array และ BigUint64Array JavaScript เพื่อแปลงระหว่างประเภท BigInt JavaScript และการแสดง WebAssembly ของจำนวนเต็ม 64 บิต
  • รองรับประเภทการอ้างอิง (funcref และ externref) และคำแนะนำที่เกี่ยวข้อง (select, ref.null, ref.func และ ref.is_null)
  • คำแนะนำ Memory.copy, memory.fill, memory.init และ data.drop สำหรับการคัดลอกข้อมูลระหว่างขอบเขตหน่วยความจำและการล้างขอบเขตหน่วยความจำ
  • คำแนะนำสำหรับการเข้าถึงและแก้ไขตารางโดยตรง (table.set, table.get, table.size, table.grow) ความสามารถในการสร้าง นำเข้า และส่งออกหลายตารางในโมดูลเดียว ฟังก์ชันสำหรับการคัดลอก/เติมตารางในโหมดแบตช์ (table.copy, table.init และ elem.drop)

ที่มา: opennet.ru

เพิ่มความคิดเห็น