มี Wasmer 3.0 ซึ่งเป็นชุดเครื่องมือสำหรับสร้างแอปพลิเคชันที่ใช้ WebAssembly

นี่เป็นรุ่นหลักที่สามของโครงการ Wasmer ซึ่งพัฒนารันไทม์สำหรับการดำเนินการโมดูล WebAssembly ที่สามารถใช้เพื่อสร้างแอปพลิเคชันสากลที่สามารถทำงานบนระบบปฏิบัติการที่แตกต่างกัน เช่นเดียวกับการดำเนินการแบบแซนด์บ็อกซ์ของรหัสที่ไม่น่าเชื่อถือ รหัสโครงการเขียนขึ้นใน Rust และเผยแพร่ภายใต้ใบอนุญาต MIT

ความสามารถในการเรียกใช้แอปพลิเคชันเดียวกันบนแพลตฟอร์มที่แตกต่างกันนั้นมีให้โดยการคอมไพล์โค้ดเป็นโค้ดระดับกลางของ WebAssembly ระดับต่ำที่สามารถรันบนระบบปฏิบัติการใดๆ หรือฝังอยู่ในโปรแกรมในภาษาโปรแกรมอื่นๆ โปรแกรมเป็นคอนเทนเนอร์ขนาดเล็กที่รัน WebAssembly pseudocode คอนเทนเนอร์เหล่านี้ไม่ได้เชื่อมโยงกับระบบปฏิบัติการและสามารถรวมโค้ดที่เขียนด้วยภาษาการเขียนโปรแกรม สามารถใช้ชุดเครื่องมือ Emscripten เพื่อคอมไพล์ไปยัง WebAssembly ในการแปล WebAssembly เป็นรหัสเครื่องของแพลตฟอร์มปัจจุบัน รองรับการเชื่อมต่อแบ็คเอนด์การรวบรวมต่างๆ (Singlepass, Cranelift, LLVM) และเครื่องยนต์ (โดยใช้ JIT หรือการสร้างรหัสเครื่อง)

แอปพลิเคชันถูกแยกออกจากระบบหลักในสภาพแวดล้อมแบบแซนด์บ็อกซ์ และมีสิทธิ์เข้าถึงเฉพาะฟังก์ชันที่ประกาศไว้ (กลไกการรักษาความปลอดภัยตามความสามารถ - สำหรับการดำเนินการกับแต่ละทรัพยากร (ไฟล์ ไดเร็กทอรี ซ็อกเก็ต การเรียกระบบ ฯลฯ) แอปพลิเคชันจะต้อง ให้มีอำนาจตามสมควร) การควบคุมการเข้าถึงและการโต้ตอบกับระบบมีให้โดยใช้ WASI (WebAssembly System Interface) API ซึ่งมีอินเทอร์เฟซการเขียนโปรแกรมสำหรับการทำงานกับไฟล์ ซ็อกเก็ต และฟังก์ชันอื่นๆ ที่ระบบปฏิบัติการจัดเตรียมไว้ให้

แพลตฟอร์มนี้ช่วยให้คุณได้รับประสิทธิภาพการดำเนินการของแอปพลิเคชันที่ใกล้เคียงกับแอสเซมบลีดั้งเดิม การใช้ Native Object Engine สำหรับโมดูล WebAssembly คุณสามารถสร้างโค้ดเนทีฟ ("wasmer compile -native" สำหรับการสร้างไฟล์อ็อบเจ็กต์ .so, .dylib และ .dll ที่คอมไพล์ล่วงหน้า) ซึ่งต้องการรันไทม์น้อยที่สุดในการรัน แต่ยังคงไว้ซึ่งคุณสมบัติทั้งหมดของ การแยกแซนด์บ็อกซ์ เป็นไปได้ที่จะจัดหาโปรแกรมที่คอมไพล์ล่วงหน้าด้วย Wasmer ในตัว ขอเสนอ Rust API และ Wasm-C-API สำหรับการสร้างส่วนเสริมและส่วนเสริม

หากต้องการเปิดใช้คอนเทนเนอร์ WebAssembly ก็เพียงพอแล้วที่จะติดตั้ง Wasmer runtime บนระบบ ซึ่งมาโดยไม่ต้องพึ่งพาภายนอก (“curl https://get.wasmer.io -sSfL | sh”) และเรียกใช้ไฟล์ที่จำเป็น (“wasmer test .wasm”). มีการแจกจ่ายโปรแกรมในรูปแบบของโมดูล WebAssembly ทั่วไป ซึ่งสามารถจัดการได้โดยใช้ตัวจัดการแพ็คเกจ WAPM Wasmer ยังมีให้ใช้เป็นไลบรารีที่สามารถใช้เพื่อฝังโค้ด WebAssembly ในโปรแกรม Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir และ Java

การเปลี่ยนแปลงที่สำคัญใน Wasmer 3.0:

  • เพิ่มความสามารถในการสร้างไฟล์ปฏิบัติการแบบเนทีฟสำหรับทุกแพลตฟอร์ม คำสั่ง "wasmer create-exe" ได้รับการออกแบบใหม่ทั้งหมดเพื่อแปลงไฟล์โค้ดระดับกลางของ WebAssembly เป็นไฟล์ปฏิบัติการที่มีในตัวเองสำหรับแพลตฟอร์ม Linux, Windows และ macOS ที่สามารถทำงานได้โดยไม่ต้องติดตั้ง Wasmer
  • ความสามารถในการรันแพ็คเกจ WAPM ที่อยู่ในไดเร็กทอรี wapm.io โดยใช้คำสั่ง "wasmer run" ตัวอย่างเช่น การดำเนินการ "wasmer run python/python" จะดาวน์โหลดแพ็คเกจ python จากที่เก็บ wapm.io และเรียกใช้
  • Wasmer Rust API ได้รับการออกแบบใหม่ทั้งหมด ซึ่งรูปแบบการทำงานกับหน่วยความจำเปลี่ยนไป และความสามารถในการจัดเก็บวัตถุ Wasm ในโครงสร้าง Store ได้อย่างปลอดภัย มีการเสนอโครงสร้าง MemoryView ใหม่ที่อนุญาตให้อ่านและเขียนข้อมูลไปยังพื้นที่หน่วยความจำเชิงเส้น
  • ชุดของส่วนประกอบ wasmer-js ถูกนำมาใช้เพื่อเรียกใช้ Wasmer ในเว็บเบราว์เซอร์และโต้ตอบกับมันจาก JavaScript โดยใช้ไลบรารี wasm-bindgen Wasmer-js มีความคล้ายคลึงกันในการทำงานกับส่วนประกอบ wasmer-sys ที่ออกแบบมาเพื่อเรียกใช้ Wasmer บนระบบปฏิบัติการปกติ
  • เครื่องยนต์แบบง่าย แทนที่จะแยกเอ็นจิ้นสำหรับ JIT การเชื่อมโยงแบบไดนามิกและสแตติก (Universal, Dylib, StaticLib) ตอนนี้เสนอเอ็นจิ้นทั่วไปหนึ่งอันและโหลดและบันทึกโค้ดซึ่งควบคุมที่ระดับการตั้งค่าพารามิเตอร์
  • ในการดีซีเรียลไลซ์อาร์ติแฟกต์ จะใช้เฟรมเวิร์ก rkyv ซึ่งทำให้การดำเนินการคัดลอกเป็นศูนย์ เช่น ไม่ต้องมีการจัดสรรหน่วยความจำเพิ่มเติมและดำเนินการแยกซีเรียลไลเซชันโดยใช้เฉพาะบัฟเฟอร์ที่มีให้ในตอนแรกเท่านั้น การใช้ rkyv เพิ่มความเร็วในการเริ่มต้นอย่างมาก
  • คอมไพเลอร์ Singlepass ได้รับการปรับปรุงเพื่อรองรับฟังก์ชันหลายค่า ปรับปรุงความน่าเชื่อถือ และเพิ่มการรองรับสำหรับเฟรมการจัดการข้อยกเว้น
  • ปรับปรุงการใช้งาน API ของ WASI (WebAssembly System Interface) แก้ไขปัญหาใน WASI API สำหรับการทำงานกับระบบไฟล์ ประเภทภายในได้รับการออกแบบใหม่โดยใช้ WAI (WebAssembly Interfaces) ซึ่งจะช่วยให้สามารถใช้คุณลักษณะใหม่ ๆ ได้ในอนาคต

ที่มา: opennet.ru

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