Даступны папярэдні варыянт стандарту WebAssembly 2.0

Кансорцыум W3C апублікаваў чарнавы варыянт новай спецыфікацыі, якая стандартуе прамежкавы код WebAssembly 2.0 і звязаны з ім API, які дазваляе ствараць высокапрадукцыйныя прыкладанні, пераносныя паміж браўзэрамі і апаратнымі платформамі. WebAssembly падае не які залежыць ад браўзэра ўніверсальны нізкаўзроўневы прамежкавы код для выканання прыкладанняў, скампіляваных з розных моў праграмавання. Дзякуючы задзейнічанню JIT для WebAssembly можна дамагчыся ўзроўня прадукцыйнасці блізкага да натыўнага кода.

Тэхналогія WebAssembly можа прымяняцца для выканання ў браўзэры задач, якія патрабуюць высокай прадукцыйнасці, напрыклад, кадавання відэа, апрацоўкі гуку, маніпуляцыі з графікай і 3D, распрацоўкі гульняў, крыптаграфічных аперацый і матэматычных вылічэнняў праз арганізацыю выканання ў браўзэры кода, напісанага на кампіляваных мовах, такіх як C/C++.

Сярод асноўных задач WebAssembly вылучаецца забеспячэнне пераноснасці, прадказальнасць паводзін і ідэнтычнасці выканання кода на розных платформах. Апошнім часам WebAssembly таксама прасоўваецца ў якасці ўніверсальнай платформы для бяспечнага выканання кода ў любых інфраструктурах, аперацыйных сістэмах і прыладах, не абмяжоўваючыся браўзэрамі.

W3C апублікаваў тры папярэднія спецыфікацыі WebAssembly 2.0:

  • WebAssembly Core - апісвае нізкаўзроўневую віртуальную машыну для выканання прамежкавага кода WebAssembly. Звязаныя з WebAssembly рэсурсы пастаўляюцца ў фармаце ".wasm", падобным з файламі ".class" у Java і ўтрымоўвальным статычныя дадзеныя і сегменты кода для працы з гэтымі дадзенымі.
  • WebAssembly JavaScript Interface - дае API для інтэграцыі з JavaScript. Дазваляе атрымліваць значэння і перадаваць параметры ў функцыі WebAssembly. Выкананне WebAssembly адпавядае мадэлі бяспекі JavaScript і ўсё ўзаемадзеянне з асноўнай сістэмай вырабляецца па аналогіі з выкананнем JavaScript-кода.
  • WebAssembly Web API - вызначае праграмны інтэрфейс на аснове механізму Promise для запыту і выканання рэсурсаў ".wasm". Фармат рэсурсаў WebAssembly аптымізаваны для пачатку выканання, не чакаючы поўнай загрузкі файла, што дазваляе павысіць спагадлівасць web-прыкладанняў.

Асноўныя змены ў WebAssembly 2.0, у параўнанні з першай версіяй стандарта:

  • Падтрымка вектарнага тыпу v128 і злучаных з ім вектарных інструкцый, якія дазваляюць раўналежна выконваць дзеянні над некалькімі лікавымі значэннямі (SIMD, single instruction multiple data).
  • Магчымасць імпарту і экспарту зменлівых (mutable) глабальных зменных, якія дазваляюць ужываць глабальнае звязванне для такіх значэнняў, як паказальнікі стэка ў C++.
  • Новыя інструкцыі для пераўтварэння тыпу float у int, якія замест генерацыі выключэння пры перапаўненні выніку вяртаюць мінімальна ці максімальна магчымае значэнне (неабходна для SIMD).
  • Інструкцыі для пашырэння знака цэлых лікаў (павелічэнне разраднасці ліку з захаваннем знака і значэння).
  • Падтрымка вяртання некалькіх значэнняў блокамі і функцыямі (у дадатак да перадачы ў функцыі некалькіх параметраў).
  • Рэалізацыя JavaScript-функцый BigInt64Array і BigUint64Array для пераўтварэння паміж JavaScript-тыпам BigInt і прадстаўленнем 64-разрадных цэлых лікаў у WebAssembly.
  • Падтрымка спасылкавых тыпаў (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

Дадаць каментар