Mozilla, Fastly, Intel болон Red Hat
Хөтөчөөс гадуур ажиллах боломжтой WebAssembly форматаар зөөврийн програмуудыг үүсгэхийн тулд бид API ашиглахыг санал болгож байна.
Нэг нь
Хамгаалалтын хувьд хараат байдлын модуль бүрийг тусад нь тусгаарлагдсан WebAssembly модулид хуваасан нано процессын тухай ойлголтыг ашиглахыг санал болгож байна, тэдгээрийн хүчийг зөвхөн энэ модультай холбон тохируулдаг (жишээлбэл, мөр боловсруулах номын сан байхгүй болно). сүлжээний залгуур эсвэл файл нээх боломжтой байх). Процесс тусгаарлалтаас ялгаатай нь WebAssembly зохицуулагч нь хөнгөн бөгөөд нэмэлт нөөц бараг шаарддаггүй - зохицуулагчид хоорондын харилцан үйлчлэл нь энгийн функцуудыг дуудахаас хамаагүй удаан биш юм. Тусгаарлах ажлыг зөвхөн бие даасан модулиудын түвшинд төдийгүй, жишээлбэл, нийтлэг санах ойтой ажиллах шаардлагатай модулиудын бүлгүүдийн түвшинд хийж болно.
Хүссэн эрх мэдлийг хараат байдлын түвшний аль алинд нь тодорхойлж, эх модулиудаар гинжин хэлхээний дагуу хамаарал руу шилжүүлж болно (WASI дахь нөөцүүд нь тусгай төрлийн файлын тодорхойлогчтой холбоотой байдаг - чадвар). Жишээлбэл, модуль нь тодорхой лавлах болон системийн дуудлагад хандах эрхийг шилжүүлж болох бөгөөд хэрэв модулийн хөгжүүлэлтийн дэд бүтэц эвдэрсэн эсвэл эмзэг байдал илэрсэн бол халдлагын үед хандалт нь зөвхөн эдгээр нөөцөөр хязгаарлагдах болно. Модуль бүтээгчдийн нөөцийн мэдэгдлүүд нь текст боловсруулах модуль сүлжээний холболт нээх зөвшөөрөл хүсэх зэрэг сэжигтэй үйл ажиллагааны үзүүлэлт байж болно. Анх тохируулсан зөвшөөрлүүдийг шалгаж, хэрэв өөрчлөгдвөл локал модулийн гарын үсгийг шинэчлэх хүртэл хамаарлын ачааллаас татгалздаг.
Bytecode Alliance-ийн жигүүрийн дор хамтарсан хөгжлийн төлөө
-
Өвлийн цаг — WASI өргөтгөлтэй WebAssembly програмуудыг ердийн бие даасан програм болгон ажиллуулах ажлын цаг. Энэ нь тусгай командын мөрийн хэрэглүүрийг ашиглан WebAssembly байт кодыг эхлүүлэх болон бэлэн гүйцэтгэгдэх файлуудыг холбохыг хоёуланг нь дэмждэг (wasmtime программд номын сан болгон суулгасан). Wasmtime нь уян хатан модульчлагдсан бүтэцтэй бөгөөд энэ нь танд янз бүрийн програмуудын ажиллах хугацааг нэмэгдүүлэх боломжийг олгодог, жишээлбэл, хязгаарлагдмал нөөцтэй төхөөрөмжүүдийн хувьд хасагдсан хувилбарыг үүсгэж болно; -
Лусет — WebAssembly форматаар программуудыг гүйцэтгэх хөрвүүлэгч болон ажиллах хугацаа. Онцлогонцлог Lucet бол шууд гүйцэтгэхэд тохиромжтой машины код болгон JIT-ийн оронд бүрэн хэмжээний урьдчилан таамаглах эмхэтгэлийг (AOT, цаг хугацааны өмнө) ашиглах явдал юм. Төслийг Fastly боловсруулсан бөгөөд хамгийн бага нөөцийг зарцуулж, шинэ инстанцуудыг маш хурдан эхлүүлэхээр оновчтой болгосон (Хүсэлт бүрт эхлүүлсэн зохицуулагчдад зориулсан WebAssembly ашигладаг үүлэн захын тооцооллын системд Lucet-ийг хурдан ашигладаг). Хамтарсан төслийн хүрээнд Lucet хөрвүүлэгчийг Wasmtime-г үндэс болгон хөрвүүлэхээр төлөвлөж байна; -
WAM (WebAssembly Micro Runtime) нь WebAssembly-г гүйцэтгэх өөр нэг ажиллах цаг бөгөөд анх Intel-аас Интернетийн зүйлсийн төхөөрөмжид ашиглахаар бүтээжээ. WAMR нь нөөцийн хамгийн бага зарцуулалтад тохируулагдсан бөгөөд бага хэмжээний RAM-тай төхөөрөмжүүдэд ашиглах боломжтой. Төсөл нь WebAssembly байт кодыг гүйцэтгэх орчуулагч болон виртуал машин, API (Libc-ийн дэд хэсэг) болон динамик хэрэглээний менежментийн хэрэгслүүдийг агуулдаг; -
Кран өргөгч — техник хангамжийн архитектураас хамааралгүй завсрын дүрслэлийг тодорхой техник хангамжийн платформд оновчтой болгосон гүйцэтгэгдэх машины код болгон хөрвүүлдэг код үүсгэгч. Cranelift нь үр дүнг маш хурдан гаргахын тулд функцын эмхэтгэлийг параллель болгохыг дэмждэг бөгөөд энэ нь JIT хөрвүүлэгчийг үүсгэхэд ашиглах боломжийг олгодог (Cranelift дээр суурилсан JIT нь Wasmtime виртуал машинд ашиглагддаг); -
WASI нийтлэг - үйлдлийн системтэй харилцах ажлыг зохион байгуулах WASI (WebAssembly System Interface) API-ийн тусдаа хэрэгжилт; -
ачаа-васи — WebAssembly-г хөтчөөс гадуур ашиглах WASI интерфейсийг ашиглан WebAssembly байт код руу Rust кодыг эмхэтгэх командыг хэрэгжүүлдэг Cargo багц менежерийн модуль; -
Ус ибайсан — WebAssembly байт кодын текст (WAT, WAST) болон хоёртын дүрслэлийг задлан шинжлэхэд зориулсан задлагч.
Товчхондоо, WebAssembly нь Asm.js-тэй төстэй боловч
Эх сурвалж: opennet.ru