Hoʻolaha ʻo Mozilla, Fastly, Intel a me Red Hat i ka WebAssembly ma ke ʻano he kahua no ka hoʻohana honua

Mozilla, Fastly, Intel a me Red Hat hui pū ʻO kāna mau hoʻoikaika ʻana i ka hoʻomohala ʻana i nā ʻenehana e kōkua i ka hoʻolilo ʻana i ka WebAssembly i kahua ākea no ka hoʻokō paʻa ʻana i nā code ma nā ʻōnaehana, ʻōnaehana hana, a i ʻole nā ​​​​mea hana. Ua hoʻokumu ʻia kahi kaiāulu no ka hoʻomohala ʻana o ka runtime a me nā mea hōʻuluʻulu e ʻae i ka hoʻohana ʻana o WebAssembly ʻaʻole wale ma nā polokalamu kele pūnaewele. Hui Pūʻulu Bytecode.

No ka hana ʻana i nā polokalamu kelepona i hāʻawi ʻia ma ka ʻano WebAssembly hiki ke hoʻokō ʻia ma waho o ka polokalamu kele pūnaewele, manaʻo mākou e hoʻohana i ka API. WASI (WebAssembly System Interface), e hāʻawi ana i nā polokalamu polokalamu no ka pilina pololei me ka ʻōnaehana hana (POSIX API no ka hana ʻana me nā faila, nā kumu, etc.). ʻO kahi hiʻohiʻona kūʻokoʻa o ka hoʻohālike hoʻokō o nā noi me ka hoʻohana ʻana i ka WASI ʻo ia ka holo ʻana i loko o kahi wahi pahu one no ka hoʻokaʻawale ʻana mai ka ʻōnaehana nui a hoʻohana i kahi ʻōnaehana palekana e pili ana i ka hoʻokele hiki no nā hana me kēlā me kēia kumu waiwai (faila, papa kuhikuhi, kumu, kelepona pūnaewele. , etc.) pono e hāʻawi ʻia ka palapala noi i nā ʻae kūpono (ʻo ke komo wale ʻana i ka hana i haʻi ʻia i hāʻawi ʻia).

ʻO kekahi o pahu hopu ʻO ka hui kuikahi i hana ʻia he hopena i ka pilikia o ka hāʻawi ʻana i nā noi modular hou me ka nui o nā hilinaʻi. I loko o ia mau noi, hiki i kēlā me kēia hilinaʻi ke kumu kumu o nā nāwaliwali a i ʻole nā ​​hoʻouka ʻana. ʻO ka mālama ʻana i kahi hilinaʻi hiki iā ʻoe ke loaʻa ka mana o nā noi āpau e pili ana me ia. ʻO ka hilinaʻi i ka palapala noi e hōʻike ʻokoʻa i ka hilinaʻi i nā hilinaʻi āpau, akā hoʻomohala pinepine ʻia nā hilinaʻi e nā hui ʻaoʻao ʻekolu ʻaʻole hiki ke mālama ʻia nā hana. Manaʻo nā lālā o Bytecode Alliance e hāʻawi i kahi hopena holoʻokoʻa no ka hoʻokō paʻa ʻana i nā noi WebAssembly i hilinaʻi ʻole ʻia.

No ka pale ʻana, ua manaʻo ʻia e hoʻohana i ka manaʻo o nā nanoprocesses, kahi i hoʻokaʻawale ʻia ai kēlā me kēia module dependency i kahi ʻāpana WebAssembly kaʻawale, nā mana i hoʻonohonoho ʻia e pili ana i kēia module (no ka laʻana, ʻaʻole kahi waihona no ka hoʻoponopono ʻana i nā kaula. hiki iā ʻoe ke wehe i kahi kumu pūnaewele a i ʻole faila). ʻAʻole like me ka hoʻokaʻawale kaʻina hana, maʻalahi nā mea lawelawe WebAssembly a ʻaneʻane ʻaʻohe kumu waiwai hou - ʻaʻole ʻoi aku ka lohi o ka launa ʻana ma waena o nā mea lawelawe ma mua o ke kāhea ʻana i nā hana maʻamau. Hiki ke hoʻokaʻawale ʻia ʻaʻole wale ma ke kiʻekiʻe o nā modula pākahi, akā i ka pae o nā pūʻulu o nā modules, no ka laʻana, pono e hana me nā wahi hoʻomanaʻo maʻamau.

Hiki ke hoʻoholo ʻia nā mana i noi ʻia ma ke kiʻekiʻe o nā hilinaʻi iā lākou iho a hāʻawi ʻia i nā hilinaʻi ma ke kaulahao e nā modula makua (ua pili nā kumuwaiwai i WASI me kahi ʻano kikoʻī o ka wehewehe faila - hiki). No ka laʻana, hiki ke hāʻawi ʻia i kahi module i ka hiki ke komo i kahi papa kuhikuhi kikoʻī a me nā kelepona ʻōnaehana, a inā hoʻohālikelike ʻia ka ʻōnaehana hoʻomohala o ka module a ʻike ʻia paha kahi nāwaliwali, i ka wā o ka hoʻouka ʻana, e kaupalena ʻia ke komo ʻana i kēia mau kumuwaiwai. Hiki i nā ʻōlelo hoʻolaha waiwai a nā mea hana module ke hōʻailona o ka hana kānalua, e like me ke noi ʻana o kahi module hoʻoponopono kikokikona i ka ʻae e wehe i kahi pilina pūnaewele. Nānā ʻia nā ʻae i hoʻonohonoho mua ʻia a inā hoʻololi lākou, hōʻole ʻia ka hoʻouka hilinaʻi a hiki i ka hōʻano hou ʻana o ka pūlima module kūloko.

No ka hoʻomohala hui ʻana ma lalo o ka ʻēheu o ka Bytecode Alliance unuhi ʻia e pili ana i ka WebAssembly papahana, i hoʻokaʻawale ʻia e nā hui hoʻokumu o ka hui:

  • Wā Wahi Holo — ka wā holo no ka holo ʻana i nā polokalamu WebAssembly me nā hoʻonui WASI ma ke ʻano he mau noi kū hoʻokahi. Kākoʻo ia i ka hoʻokuʻu ʻana i ka WebAssembly bytecode me ka hoʻohana ʻana i kahi pono laina kauoha kūikawā a me ka hoʻopili ʻana i nā faila hiki ke hoʻokō ʻia (ua kūkulu ʻia ʻo wasmtime i loko o ka noi ma ke ʻano he waihona). Loaʻa iā Wasmtime kahi hoʻolālā modular maʻalahi e hiki ai iā ʻoe ke hoʻonui i ka manawa holo no nā noi like ʻole, no ka laʻana, hiki iā ʻoe ke hana i kahi mana i hoʻopaʻa ʻia no nā polokalamu me nā kumuwaiwai liʻiliʻi;
  • ʻO Lucet - ka mea hoʻopili a me ka manawa holo no ka hoʻokō ʻana i nā papahana ma ka ʻano WebAssembly. Kūʻokoʻa hiʻona ʻO Lucet ka hoʻohana ʻana i ka hui anticipatory piha piha (AOT, ma mua o ka manawa) ma kahi o JIT i loko o ke code mīkini kūpono no ka hoʻokō pololei. Ua hoʻomohala ʻia ka papahana e Fastly a ua hoʻolālā ʻia e hoʻopau i nā kumuwaiwai liʻiliʻi a hoʻomaka i nā manawa hou me ka wikiwiki loa (Hoʻohana wikiwiki ʻo Lucet i kahi ʻenekini hoʻopili kapuaʻi e hoʻohana ana i ka WebAssembly no nā mea lawelawe i hoʻokuʻu ʻia ma kēlā me kēia noi). Ma keʻano he mahele o ka papahana hui, ua hoʻolālāʻia ka Lucet compiler e hoʻololiʻia e hoʻohana iā Wasmtime ma keʻano he kumu;
  • WAMR (WebAssembly Micro Runtime) kekahi manawa holo no ka hoʻokō ʻana i ka WebAssembly, i hoʻokumu mua ʻia e Intel no ka hoʻohana ʻana i nā polokalamu Pūnaewele o nā Mea. Hoʻopili ʻia ʻo WAMR no ka liʻiliʻi o ka hoʻohana ʻana i nā kumuwaiwai a hiki ke hoʻohana ʻia ma nā polokalamu me kahi liʻiliʻi o ka RAM. Aia i loko o ka papahana kahi unuhi a me ka mīkini virtual no ka hoʻokō ʻana i ka WebAssembly bytecode, kahi API (kahi ʻāpana o Libc) a me nā mea hana no ka hoʻokele noiʻi ikaika;
  • ʻO Cranelift - he mea hoʻoheheʻe code e unuhi ana i kahi hōʻike kuʻuna kūʻokoʻa i ka hale hana ʻenehana i loko o ke code mīkini hiki ke hoʻokō ʻia no nā kahua ʻenehana kikoʻī. Kākoʻo ʻo Cranelift i ka hoʻohālikelike ʻana o ka hoʻopili ʻana i ka hana no ka hoʻomohala hopena wikiwiki loa, e hiki ai ke hoʻohana ʻia e hana i nā mea hoʻohui JIT (Hoʻohana ʻia ʻo Cranelift-based JIT i ka mīkini virtual Wasmtime);
  • WASI maʻamau - kahi hoʻokō kaʻawale o ka WASI (WebAssembly System Interface) API no ka hoʻonohonoho ʻana i ka pilina me ka ʻōnaehana hana;
  • ukana-wasi — he module no ka luna puolo Cargo e hoʻokō i ke kauoha no ka hōʻuluʻulu ʻana i ka code Rust i WebAssembly bytecode me ka hoʻohana ʻana i ka interface WASI no ka hoʻohana ʻana i ka WebAssembly ma waho o ka polokalamu kele;
  • wat и wasmparser - nā parsers no ka parsing kikokikona (WAT, WAST) a me nā hiʻohiʻona binary o WebAssembly bytecode.

No ka recap, WebAssembly e like me Asm.js, akā ʻokoʻa i ka mea he ʻano binary ʻaʻole i hoʻopaʻa ʻia i ka JavaScript a hiki ke hoʻokō ʻia nā code intermediate haʻahaʻa i hōʻuluʻulu ʻia mai nā ʻōlelo papahana like ʻole e hoʻokō ʻia i ka polokalamu kele pūnaewele. ʻAʻole pono ʻo WebAssembly i kahi ʻohi ʻōpala no ka mea hoʻohana ia i ka hoʻokele hoʻomanaʻo. Ma ka hoʻohana ʻana iā JIT no WebAssembly, hiki iā ʻoe ke hoʻokō i nā pae hana kokoke i ka code maoli. Ma waena o nā pahuhopu nui o WebAssembly e hōʻoiaʻiʻo ana i ka portability, ke ʻano wānana a me ka hoʻokō code like ʻole ma nā kahua like ʻole.

Source: opennet.ru

Pākuʻi i ka manaʻo hoʻopuka