Design: рдкреНрд░рд╕реНрддрд╛рд╡: рдПрд╕рд┐рдВрдХреНрд╕/рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 26 рдЬреБрд▓ре░ 2021  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: WebAssembly/design

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ @fmccabe , @thibaudmichaud , @lukewagner , рдФрд░ @kripken рдХреЗ рд╕рд╣рдпреЛрдЧ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╕рд╛рде рд╣реА

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рджреЛрдВ рдФрд░ WebAssembly рдХреЗ рдмреАрдЪ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХреБрд╢рд▓ рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдПрд░реНрдЧреЛрдирд┐рдорд┐рдХ рдЗрдВрдЯрд░рдСрдк рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдзрд╛ рдХреЗ рддрд╣рдд рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ JS API рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реИрдВ рди рдХрд┐ рдХреЛрд░ рд╡рд╛рд╕рдо рдХреЗ рд▓рд┐рдПред
рдЙрдореНрдореАрдж рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ-рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрдВрддрддрдГ рдХрдИ рдЕрдиреНрдп рдореВрд▓реНрдпрд╡рд╛рди рд╕реНрдЯреИрдХ-рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕реАрдзреЗ WebAssembly рдХреЗ рднреАрддрд░ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрд░ WebAssembly рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕реНрдЯреИрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдерд╛ рдХреЗрд╡рд▓ JS API рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреЗрдЬрд╝ рдкрде рдХреА рдпреЛрдЧреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛ред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ 28 рдЬреВрди, 2021 рдХреА рд╕реНрдЯреИрдХ рд╕рдмрдЧреНрд░реБрдк рдореАрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдиреЛрдЯреНрд╕ рдФрд░ рд╕реНрд▓рд╛рдЗрдб рджреЗрдЦреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдФрд░ рдХрд╛рд░рдХреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рди рдкрд░ рд╣рдордиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рддрд░реНрдХ рдХреЛ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбрд┐рдЬрд╝рд╛рдЗрди рдкрд░ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗред

рдЕрджреНрдпрддрди: рд╕реНрдЯреИрдХ рдЙрдкрд╕рдореВрд╣ рдХреЛ TC39 рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ WebAssembly рд╕реНрдЯреИрдХ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ-рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП asycn / рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ await ред

рдпрд╣ (рд╢рд┐рдерд┐рд▓ рд░реВрдк рд╕реЗ) рдЬреЗрдПрд╕-рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ WebAssembly.Function рдХреЛ Function рдЙрдкрд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░рддрд╛ рд╣реИред

рдЗрдВрдЯрд░рдлреЗрд╕

рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрдВрдЯрд░рдлреЗрд╕, рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИ, рдиреАрдЪреЗ рдЙрдирдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рдеред

interface Suspender {
   constructor();
   Function suspendOnReturnedPromise(Function func); // import wrapper
   // overloaded: WebAssembly.Function suspendOnReturnedPromise(WebAssembly.Function func);
   WebAssembly.Function returnPromiseOnSuspend(WebAssembly.Function func); // export wrapper
}

рдЙрджрд╛рд╣рд░рдг

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЗрд╕ рдмрд╛рдд рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдХреИрд╕реЗ рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВред
рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ, рд╣рдордиреЗ "рд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдФрд░ "рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП WebAssembly рдореЙрдбреНрдпреВрд▓ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрд╛ред
рд╡рд░реНрддрдорд╛рди рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗрд╡рд▓ "рд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рд╕рд╕реНрдкреЗрдВрдбрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХреЛ "рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╕реНрдкреЗрдВрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрд╡рдпрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрди рдЖрдпрд╛рддреЛрдВ рдФрд░ рдирд┐рд░реНрдпрд╛рддреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рд╕рдВрдЧрддрддрд╛ рджреЛрдиреЛрдВ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХреЗред

WebAssembly ( demo.wasm ):

(module
    (import "js" "init_state" (func $init_state (result f64)))
    (import "js" "compute_delta" (func $compute_delta (result f64)))
    (global $state f64)
    (func $init (global.set $state (call $init_state)))
    (start $init)
    (func $get_state (export "get_state") (result f64) (global.get $state))
    (func $update_state (export "update_state") (result f64)
      (global.set (f64.add (global.get $state) (call $compute_delta)))
      (global.get $state)
    )
)

рдЯреЗрдХреНрд╕реНрдЯ ( data.txt ):

19827.987

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

var suspender = new Suspender();
var init_state = () => 2.71;
var compute_delta = () => fetch('data.txt').then(res => res.text()).then(txt => parseFloat(txt));
var importObj = {js: {
    init_state: init_state,
    compute_delta: suspender.suspendOnReturnedPromise(compute_delta)
}};

fetch('demo.wasm').then(response =>
    response.arrayBuffer()
).then(buffer =>
    WebAssembly.instantiate(buffer, importObj)
).then(({module, instance}) => {
    var get_state = instance.exports.get_state;
    var update_state = suspender.returnPromiseOnSuspend(instance.exports.update_state);
    ...
});

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ WebAssembly рдореЙрдбреНрдпреВрд▓ рд╣реИ рдЬреЛ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд░рд╛рдЬреНрдп рдорд╢реАрди рд╣реИ- рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рд░рд╛рдЬреНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд░рд╛рдЬреНрдп рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрд▓реНрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдПрдХ рдЖрдпрд╛рдд рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрдХреНрд╖ рдкрд░, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЗрд▓реНрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рдЬрд┐рд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ; рдпрд╛рдиреА, рдпрд╣ рдПрдХ рдирдВрдмрд░ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирдВрдмрд░ рдХрд╛ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рд╣рдо рдирдП JS API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рд╕рдордХрд╛рд▓рд┐рдХ рдЕрдВрддрд░ рдХреЛ рдкрд╛рдЯ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, WebAssembly рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдПрдХ рдЖрдпрд╛рдд suspender.suspendOnReturnedPromise рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирд┐рд░реНрдпрд╛рдд suspender.returnPromiseOnSuspend рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ, рджреЛрдиреЛрдВ рдПрдХ рд╣реА suspender ред
рд╡рд╣ suspender рджреЛрдиреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдпрд╣ рдРрд╕рд╛ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐, рдпрджрд┐ рдХрднреА (рдЕрд▓рд┐рдЦрд┐рдд) рдЖрдпрд╛рдд рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ (рд▓рд┐рдкрдЯреЗ) рдирд┐рд░реНрдпрд╛рдд рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдпрд╛рдд рдХрд╛ рд╡рд╛рджрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рд╕рднреА рдЧрдгрдирд╛ "рдирд┐рд▓рдВрдмрд┐рдд" рд╣реЛрдиреЗ рдХреЗ рдмреАрдЪ рд╣реЛрддреА рд╣реИред
рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рд░реИрдкрд┐рдВрдЧ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ async рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЖрдпрд╛рдд рдХрд╛ рд░реИрдкрд┐рдВрдЧ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ await рдорд╛рд░реНрдХрд░ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣рдореЗрдВ async рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдереНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ await рд╕рднреА рдордзреНрдпрд╡рд░реНрддреА WebAssembly рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ!

рдЗрд╕ рдмреАрдЪ, рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рджреМрд░рд╛рди init_state рдЧрдИ рдХреЙрд▓ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдмрд┐рдирд╛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд┐рдП рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ, рдФрд░ рдирд┐рд░реНрдпрд╛рдд get_state рдХреЙрд▓ рднреА рд╣рдореЗрд╢рд╛ рдмрд┐рдирд╛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд┐рдП рд╡рд╛рдкрд╕ рдЖрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрднреА рднреА рдореМрдЬреВрджрд╛ "рд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред WebAssembly рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдЖрдЬ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдмреЗрд╢рдХ, рдХрдИ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╕реНрдХрд┐рдореНрдб рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬреИрд╕реЗ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдирд┐рд░реНрдпрд╛рдд рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЖрдпрд╛рдд рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЖрдпрд╛рдд рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдлрдВрд╕ рдЬрд╛рдПрдЧрд╛ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░рдгрдиреАрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╡рд┐рдирд┐рд░реНрджреЗрд╢

рдПрдХ Suspender рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╣реИ:

  • рдирд┐рд╖реНрдХреНрд░рд┐рдп - рдЗрд╕ рд╕рдордп рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
  • рд╕рдХреНрд░рд┐рдп [ caller ] - рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдЕрдВрджрд░ рд╣реИ Suspender , рдХреЗ рд╕рд╛рде caller рд╕рдорд╛рд░реЛрд╣ рд╣реИ рдХрд┐ рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ Suspender рдФрд░ рдПрдХ рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реА рд╣реИ externref рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ
  • рдирд┐рд▓рдВрдмрд┐рдд - рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреБрдЫ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ

рд╡рд┐рдзрд┐ suspender.returnPromiseOnSuspend(func) рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ func рдПрдХ WebAssembly.Function рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ [ti*] -> [to] рдФрд░ рдлрд┐рд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде WebAssembly.Function рд▓реМрдЯрд╛рддрд╛ рд╣реИ [ti*] -> [externref] рдЬреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмреБрд▓рд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ args :

  1. рдЯреНрд░реИрдк рдпрджрд┐ suspender рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ
  2. suspender рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдХреНрд░рд┐рдп [ caller ] рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ (рдЬрд╣рд╛рдВ caller рд╡рд░реНрддрдорд╛рди рдХреЙрд▓рд░ рд╣реИ)
  3. result рдХреЛ func(args) (рдпрд╛ рдХрд┐рд╕реА рднреА рдЬрд╛рд▓ рдпрд╛ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рдж) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдиреЗ рджреЗрдВ
  4. рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ suspender рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдХреНрд░рд┐рдп рд╣реИ [ caller' ] рдХреБрдЫ caller' (рдЧрд╛рд░рдВрдЯреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЙрд▓рд░ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ)
  5. suspender рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ
  6. result рд╕реЗ caller' рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдпрд╛ рдлрд┐рд░ рд╕реЗ рдлреЗрдВрдХрддрд╛ рд╣реИ)

рд╡рд┐рдзрд┐ suspender.suspendOnReturnedPromise(func)

  • рдЕрдЧрд░ func рдПрдХ WebAssembly.Function , рддреЛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ [t*] -> [externref] рдФрд░ WebAssembly.Function рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ [t*] -> [externref] ;
  • рдЕрдиреНрдпрдерд╛, рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ func рдПрдХ Function рдФрд░ рдПрдХ Function рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, suspender.suspendOnReturnedPromise(func) рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ args :

  1. result рдХреЛ func(args) (рдпрд╛ рдХрд┐рд╕реА рднреА рдЬрд╛рд▓ рдпрд╛ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рдж) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдиреЗ рджреЗрдВ
  2. рдЕрдЧрд░ result рд▓реМрдЯрд╛ рд╣реБрдЖ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ result рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдпрд╛ рдлрд┐рд░ рд╕реЗ рдлреЗрдВрдХрддрд╛ рд╣реИ)
  3. рдЯреНрд░реИрдк рдпрджрд┐ suspender рдХреА рд╕реНрдерд┐рддрд┐ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реИ [ caller ] рдХреБрдЫ caller
  4. Lets frames рдХреЗ рдмрд╛рдж рд╕реЗ рдвреЗрд░ рдлреНрд░реЗрдо рд╣реЛ caller
  5. рдпрджрд┐ frames рдореЗрдВ рдЧреИрд░-рдирд┐рд▓рдВрдмрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдХреЛрдИ рдлрд╝реНрд░реЗрдо рд╣реИрдВ, рддреЛ рдЯреНрд░реИрдк рдХрд░реЗрдВ
  6. suspender рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ
  7. result.then(onFulfilled, onRejected) рдХрд╛ рдкрд░рд┐рдгрд╛рдо onFulfilled рдФрд░ onRejected рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рджреЗрддрд╛ рд╣реИ рдЬреЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:

    1. рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ suspender рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд▓рдВрдмрд┐рдд рд╣реИ (рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП)

    2. suspender рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдХреНрд░рд┐рдп [ caller' ] рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ caller' onFulfilled / onRejected рдХрд╛ рдХреЙрд▓рд░ рд╣реИ



      • рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ onFulfilled , рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдореВрд▓реНрдп рдзрд░реНрдорд╛рдиреНрддрд░рд┐рдд externref рдФрд░ рд░рд┐рдЯрд░реНрди рдХрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП frames


      • onRejected рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЛ frames рддрдХ рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ



рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдирд┐рд▓рдВрдмрд┐рдд рд╣реИ рдЕрдЧрд░ рдпрд╣ рдерд╛

  • WebAssembly рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд,
  • suspendOnReturnedPromise рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛,
  • returnPromiseOnSuspend рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛,
  • рдпрд╛ рд╕рд╕реНрдкреЗрдВрдбреЗрдмрд▓ рдлрдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рд╣реЛрд╕реНрдЯ рдлрдВрдХреНрд╢рди рдмрдирд╛рдХрд░ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдХрд╛рд░реНрдпреЛрдВ рдирд╣реАрдВ suspendable рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рд╕реЗ рд░рд╛рдп рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ, TC39 (рдХреБрдЫ рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рдХреЛ рдЫреЛрдбрд╝рдХрд░), рдФрд░ рдореЗрдЬрдмрд╛рди рдХрд╛рд░реНрдпреЛрдВ рд░рд╣реЗ suspendable рдЗрдВрдЬрди рджреЗрдЦрд░реЗрдЦ рд╕реЗ рд░рд╛рдп рдХреЗ рдЕрдиреБрд░реВрдк, рдирд╣реАрдВред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд░рдгрдиреАрддрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред
рдпрд╣ рд╕реНрдЯреИрдХ-рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рд╕рдорд░реНрдерди рдорд╛рдирддрд╛ рд╣реИ, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реИрдВред

рд╕реНрдЯреИрдХ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ: рдПрдХ рд╣реЛрд╕реНрдЯ (рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╕реНрдЯреИрдХ, рдФрд░ рдПрдХ WebAssembly рд╕реНрдЯреИрдХред рдкреНрд░рддреНрдпреЗрдХ WebAssembly рд╕реНрдЯреИрдХ рдореЗрдВ suspender рдирд╛рдордХ рдПрдХ рд╕рд╕реНрдкреЗрдВрдбрд░ рдлрд╝реАрд▓реНрдб рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдореЗрдВ рдПрдХ рд╣реЛрд╕реНрдЯ рд╕реНрдЯреИрдХ рд╣реЛрддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ Suspender рдореЗрдВ рджреЛ рд╕реНрдЯреИрдХ-рд░реЗрдлрд░реЗрдВрд╕ рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВ: рдПрдХ рдХреЛ caller рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреЛ suspended рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

  • рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ, рджреЛрдиреЛрдВ рдлрд╝реАрд▓реНрдб рд░рд┐рдХреНрдд рд╣реИрдВред
  • рд╕рдХреНрд░рд┐рдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, caller рдлрд╝реАрд▓реНрдб рдХреЙрд▓рд░ рдХреЗ (рдирд┐рд▓рдВрдмрд┐рдд) рд╕реНрдЯреИрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ suspended рдлрд╝реАрд▓реНрдб рд░рд┐рдХреНрдд рд╣реИ
  • рдирд┐рд▓рдВрдмрд┐рдд рд╕реНрдерд┐рддрд┐ рдореЗрдВ, suspended рдлрд╝реАрд▓реНрдб рдЙрд╕ (рдирд┐рд▓рдВрдмрд┐рдд) WebAssembly рд╕реНрдЯреИрдХ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд╕реНрдкреЗрдВрдбрд░ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ caller рдлрд╝реАрд▓реНрдб рд░рд┐рдХреНрдд рд╣реИред

suspender.returnPromiseOnSuspend(func)(args) рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

  1. рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ suspender.caller рдФрд░ suspended.suspended рд╢реВрдиреНрдп рд╣реИрдВ (рдЕрдиреНрдпрдерд╛ рдлрдВрд╕рдирд╛)
  2. stack рдХреЛ suspender рд╕рдВрдмрджреНрдз рдПрдХ рдирдпрд╛ рдЖрд╡рдВрдЯрд┐рдд WebAssembly рд╕реНрдЯреИрдХ рд╣реЛрдиреЗ рджреЗрдирд╛
  3. stack рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдФрд░ рдкреВрд░реНрд╡ рд╕реНрдЯреИрдХ рдХреЛ suspender.caller рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдирд╛
  4. result рдХреЛ func(args) (рдпрд╛ рдХрд┐рд╕реА рднреА рдЬрд╛рд▓ рдпрд╛ рдлреЗрдВрдХреЗ рдЧрдП рдЕрдкрд╡рд╛рдж) рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдиреЗ рджреЗрдирд╛
  5. suspender.caller рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛
  6. рдореБрдХреНрдд stack
  7. result рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛ (рдпрд╛ рдлрд┐рд░ рд╕реЗ рдлреЗрдВрдХрдирд╛)

suspender.suspendOnReturnedPromise(func)(args) рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

  1. func(args) рдХреЙрд▓ рдХрд░рдирд╛, рдХрд┐рд╕реА рднреА рдЬрд╛рд▓ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдпрд╛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛
  2. рдпрджрд┐ result рд▓реМрдЯрд╛ рд╣реБрдЖ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ result рд▓реМрдЯрд╛рдирд╛ (рдпрд╛ рдлрд┐рд░ рд╕реЗ рдлреЗрдВрдХрдирд╛)
  3. рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ suspender.caller рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ (рдЕрдиреНрдпрдерд╛ рдлрдБрд╕рд╛рдирд╛)
  4. stack рдХреЛ рд╡рд░реНрддрдорд╛рди рд╕реНрдЯреИрдХ рд╣реЛрдиреЗ рджреЗрдВ
  5. рдЬрдмрдХрд┐ stack рдПрдХ WebAssembly рд╕реНрдЯреИрдХ рдирд╣реАрдВ рд╣реИ рдЬреЛ suspender рдЬреБрдбрд╝рд╛ рд╣реИ:

    • рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ stack рдПрдХ WebAssembly рд╕реНрдЯреИрдХ рд╣реИ (рдЕрдиреНрдпрдерд╛ рдлрдБрд╕рд╛рдирд╛)

    • stack рдХреЛ stack.suspender.caller рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд░ рд░рд╣рд╛ рд╣реИ

  6. suspender.caller рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛, рдЗрд╕реЗ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛, рдФрд░ рдкреВрд░реНрд╡ рд╕реНрдЯреИрдХ рдХреЛ suspender.suspended рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛
  7. result.then(onFulfilled, onRejected) рдХрд╛ рдкрд░рд┐рдгрд╛рдо onFulfilled рдФрд░ onRejected рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рд▓реМрдЯрд╛рдирд╛

    1. suspender.suspended рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛, рдЗрд╕реЗ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛, рдФрд░ рдкреВрд░реНрд╡ рд╕реНрдЯреИрдХ рдХреЛ suspender.caller рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛



      • onFulfilled рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ externref рдХрдирд╡рд░реНрдЯ рдХрд░рдирд╛ рдФрд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛


      • onRejected рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рджрд┐рдП рдЧрдП рдорд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдлреЗрдВрдХрдирд╛



рд╕рд╕реНрдкреЗрдВрдбреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП

рд╕рднреА 16 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдПрдХ рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬреЛ рдПрд╕рд┐рдВрдХ рдлрд╝рдВрдХреНрд╢рди/рдЬрдирд░реЗрдЯрд░ (рд╕рд┐рдВрдХ рдпрд╛ рдПрд╕рд┐рдВрдХ) рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдирд┐рд▓рдВрдмрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╢рд╛рдпрдж рдХреБрдЫ рдЫрджреНрдо рдХреЛрдб рдпрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рд╛рде, рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЖрдкрдХреЛ рд╕рдЯреАрдХ рдЙрддреНрддрд░ рджреВрдВред

рдХреНрдпрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ рдХрд┐ Suspender рдЬреЗрдПрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдПрдкреАрдЖрдИ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ wasm ( WebAssembly.Suspender ) рдХреЗ рд▓рд┐рдП рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ TC39 рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, JS рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдПрдХ рдЬрд╛рд▓ рдмрди рдЬрд╛рдПрдЧрд╛ред рд╣рдо рдЗрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдЧрдП рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЙрдирдХреА рд░рд╛рдп рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╢реВ-рдпреВ рдХреЗ рд╕рд╛рде рдЙрдард╛ рд╕рдХрддрд╛ рд╣реВрдБред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, @chicoxyzzy , рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╕реНрдЯреИрдХ рдЙрдкрд╕рдореВрд╣ рд╕реЗ рдХреБрдЫ рд╕рдВрджрд░реНрдн/рдЕрдкрдбреЗрдЯ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред рдкреБрд░рд╛рдиреЗ рд╕реНрдЯреИрдХ-рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рдЙрдореНрдореАрдж рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗ рдЧрдП рдереЗ рдХрд┐ рдЖрдк рдирд┐рд▓рдВрдмрд┐рдд рд╕реНрдЯреИрдХ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ/рд╣реЛрд╕реНрдЯ рдлрд╝реНрд░реЗрдо рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдореЗрдВ TC39 рдореЗрдВ рд▓реЛрдЧреЛрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА рдереА рдХрд┐ рдЪрд┐рдВрддрд╛ рдереА рдХрд┐ рдпрд╣ JS рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рд╣рдореЗрдВ рдореЗрдЬрдмрд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА рдХрд┐ рдЪрд┐рдВрддрд╛ рдереА рдХрд┐ рд╕рднреА рд╣реЛрд╕реНрдЯ рдлрд╝реНрд░реЗрдо рдирд┐рд▓рдВрдмрди рдХреЛ рд╕рд╣рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреИрдХреНрд╕ рд╕рдмрдЧреНрд░реБрдк рддрдм рд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗрд╡рд▓ рдирд┐рд▓рдВрдмрд┐рдд рд╕реНрдЯреИрдХ рдореЗрдВ WebAssembly (-рд╕рдВрдмрдВрдзрд┐рдд) рдлрд╝реНрд░реЗрдореЛрдВ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВ, рдФрд░ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЙрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдУрдкреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред

рдпрд╣рд╛рдВ рдкреНрд░рдЧрддрд┐ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд╛рд╕рдо рдХреЗ рд▓рд┐рдП рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдореЗрдВ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдмреБрд░реА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдм JS API рдореЗрдВ рд╣реИ, рдЖрдк рдХреЗрд╡рд▓ ESM wasm рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдЯреИрдХ-рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдИрдПрд╕рдПрдо рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд╕ рдХреБрдЫ рдЬреЗрдПрд╕ рдИрдПрд╕рдПрдо рдореЙрдбреНрдпреВрд▓ рдЧреЛрдВрдж рдХреЗ рд░реВрдк рдореЗрдВред

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЖрдк рддреАрди ESM рдореЙрдбреНрдпреВрд▓ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ: foo-exports.js , foo-wasm.wasm , рдФрд░ foo-imports.js ред foo-imports.js рдореЙрдбреНрдпреВрд▓ рд╕рд╕реНрдкреЗрдВрдбрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ foo-wasm.wasm рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА "рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕" рд╡рд╛рджрд╛-рдЙрддреНрдкрд╛рджрдХ рдЖрдпрд╛рддреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд╕реНрдкреЗрдВрдбрд░ рдФрд░ рдЙрди рдЖрдпрд╛рддреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред foo-wasm.wasm рдлрд┐рд░ foo-imports.js рд╕реЗ рд╕рднреА "рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдЖрдпрд╛рдд рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рднреА "рд╕рд┐рдВрдХреНрд░реЛрдирд╕" рд╕реАрдзреЗ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ (рдпрд╛, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдЙрдиреНрд╣реЗрдВ foo-imports.js рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред foo-exports.js рд╕рд╕реНрдкреЗрдВрдбрд░ рдХреЛ foo-imports.js рд╕реЗ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, foo-wasm.wasm рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╕реНрдкреЗрдВрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдирд┐рд░реНрдпрд╛рдд рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ (рдЕрд▓рд┐рдЦрд┐рдд) "рд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред рдирд┐рд░реНрдпрд╛рдд рдФрд░ рд▓рд┐рдкрдЯреЗ "рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдирд┐рд░реНрдпрд╛рддред рдЧреНрд░рд╛рд╣рдХ рддрдм foo-exports.js рд╕реЗ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ foo-wasm.wasm рдпрд╛ foo-imports.js рд╕реАрдзреЗ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░рддреЗ (рдпрд╛ рдЗрд╕рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ)ред

рдпрд╣ рдПрдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдмрд╛рдзрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрд░ рд╡рд╛рд╕реНрдо рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рди рдХрд░рдиреЗ рдХреА рдмрд╛рдзрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд╕рдХрддреЗ рдереЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛрд░ рд╡рд╛рд╕рдо рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдЧрдд рд╣реИ рдХрд┐, рдЬрдм рд╡рд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬрд╣рд╛рдЬреЛрдВ, рдЖрдк рдЗрди рддреАрди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд-рд╡рд╛рд╕рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрд╡реИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рднреА рд╢рдмреНрджрд╛рд░реНрде рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЕрдВрддрд░ рдмрддрд╛рдПрдВ (рдореЙрдбреНрдпреВрд▓реЛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛)ред

рдХреНрдпрд╛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рдерд╛, рдФрд░ рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ (рдпрджреНрдпрдкрд┐ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ)?

рдореИрдВ рд░реИрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдХрдо рд╕реЗ рдХрдо рдЬрдмрдХрд┐ WebAssembly.Module рдкреНрд░рдХрд╛рд░ Wasm рдЖрдпрд╛рдд рдЕрднреА рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╡реЗ рдирд┐рдпрдд рд╕рдордп рдореЗрдВ рд╣реЛрдВрдЧреЗ)ред

рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдореЗрдВ рдЗрди рдкреИрдЯрд░реНрдиреЛрдВ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ рддрд╛рдХрд┐ рдирд┐рд▓рдВрдмрди рдЧреЛрдВрдж рдХреЗ рджреЛрдиреЛрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдХреБрдЫ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдерд╛ рдЬреЛ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдФрд░ рдЖрдпрд╛рддрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдЙрд╕рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХреАрдХрд░рдг рдкрд░рдд рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рджреЛрд╣рд░реЗ рдЖрдпрд╛рдд / рдирд┐рд░реНрдпрд╛рдд рд░реИрдкрд┐рдВрдЧ рд╕рд╕реНрдкреЗрдВрдбрд░ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╣ред рдлрд┐рд▓рд╣рд╛рд▓ рдРрд╕реА рдХреЛрдИ рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА рдереА, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдХреЛ рднреА рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереАред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЖрд╢рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдВрддрддрдГ рдпрд╣ рд╕рдм рдХреЛрд░ рд╡рд╛рд╕рдо рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЫреЛрдЯрд╛ рдкрджрдЪрд┐рд╣реНрди рдЫреЛрдбрд╝реЗред

рдореБрдЭреЗ рдЬреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓реА рдереА, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдХреЛ рднреА рдирд╣реАрдВ рдмрджрд▓рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереА

рдХреНрдпрд╛ рдЖрдк рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╣рд╛рдБ рд╕реЗ рдЖ рд░рд╣реА рд╣реИ? рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдПрдХреАрдХрд░рдг рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдмрд╣реБрдд рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ, рдПрдХ рдРрд╕рд╛ рд╕реНрдерд╛рди рдЬреЛ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛрдЬрд╛ рдЧрдпрд╛ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХреНрдпреЛрдВ рд▓рд╛рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЕрддреАрдд рдореЗрдВ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реБрдирд╛ рд╣реИред рдЗрд╕реЗ рдЪреАрдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрдирд╛ рдЬреЗрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рджрд╛ рдЖрдпрд╛рдд/рдирд┐рд░реНрдпрд╛рдд рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдореЗрдВ рдПрдХ рд▓рд╛рдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рдПрдХ рдПрдХрд▓ рдЬреЗрдПрд╕ рдореЙрдбреНрдпреВрд▓ рдХреА рдХреНрд╖рдорддрд╛ рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рд╡рд╛рд╕рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рддрдХ рдФрд░ рдЖрдпрд╛рддрдХ рджреЛрдиреЛрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рдХрд╛рд░реНрдп рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдореЗрдВ рдЬреЗрдПрд╕ рдЪрдХреНрд░ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред , рд▓реЗрдХрд┐рди рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╕рд╕реНрдкреЗрдВрдбрд░ рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рд░реИрдкрд░ рдХреЗ рд╕рд╛рде рдЙрддреНрдерд╛рдкрди рдЗрд╕ рдЪрдХреНрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдореБрдЭреЗ рдпрд╣ рдЖрднрд╛рд╕ @lukewagner рд╕реЗ рдорд┐рд▓рд╛ рд╣реИред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕рдо рдлрд╛рдЗрд▓ рдореЗрдВ рдмрджрд▓рд╛рд╡/рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЬрд┐рд╕реЗ рд╣рдо рдЯрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗ (рдЫреЛрдЯреЗ рдкрджрдЪрд┐рд╣реНрди рд▓рдХреНрд╖реНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ) - рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рдереЗ / рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ред рдмреЗрд╢рдХ, рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡/рд╡рд┐рд╕реНрддрд╛рд░ рдИрдПрд╕рдПрдо рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗ, рддреЛ рд╡реЗ рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдкреВрд░рдХ рд╣реЛрдВрдЧреЗ рддрд╛рдХрд┐ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕ рд░реИрдкрд░ рдореЙрдбреНрдпреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

рдореИрдВрдиреЗ @ рдЬреИрдХ-рд╡рд░реНрдХреНрд╕ рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рд╣реИ, рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @RossTate , рд╣рд╛рдВ, рдореИрдВ рдореЗрдЬрдмрд╛рди рдПрдХреАрдХрд░рдг рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдЗрдирд░реА рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрди рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдирд┐рд▓рдВрдмрди рд╕рдВрджрд░реНрднреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рддрд▓рд╛рд╢рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдПрдорд╡реАрдкреА рдореЗрдВ рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдпрд╣ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг рдПрдХ рдРрд╕рд╛ рд╕реНрдерд╛рди рд╣реИ рдЬреЛ рдЪреАрдиреА рд╕реЗ рдЕрдзрд┐рдХ рдЖрдо рддреМрд░ рдкрд░ рдмреЗрд╕ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬрд┐рд╕ рдЪреБрдиреМрддреА рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд┐рдпрд╛, рд╡рд╣ рдпрд╣ рдереА рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╣рдордиреЗ WebAssembly.instantiate() (рдпрд╛ рдирдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде WebAssembly.instantiate() рдирдП рд╕рдВрд╕реНрдХрд░рдг) рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдерд╛, рдЬрдм рдИрдПрд╕рдПрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ wasm рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддрдм рднреА рдХрд┐рд╕реА рддрд░рд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реЛрдЧрд╛ред -рдПрдХреАрдХрд░рдг, рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдИрдПрд╕рдПрдо-рдПрдХреАрдХрд░рдг рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдерд╛ред

рдЖрд╣, рдЕрдЪреНрдЫрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдИрдПрд╕рдПрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛рдкрди рд╣реИ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛, рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореЗрд░реА рдЧрд▓рддрдлрд╣рдореА рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╕реНрдЯрдо рд╕реЗрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреБрдЫ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП Wasm рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ JS рдХреЛ рдкреНрд░реЙрдорд┐рд╕-рдЖрдзрд╛рд░рд┐рдд API рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдХреИрд╕реЗ Wasm рд╕реЗ рдЖрдпрд╛рдд JS рдкреНрд░реЙрдорд┐рд╕-рдЖрдзрд╛рд░рд┐рдд API рд╕реЗ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдЯреИрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХрд╛ред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБ?

рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЦреБрдж рдХреЛ рд╡рд╛рд╕рдо рдЬреАрд╕реА/рдЬреЗрдПрд╕-рдИрдПрд╕рдПрдо рдПрдХреАрдХрд░рдг (рдпрд╛ рдЙрд╕реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛) рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдХрд╕реНрдЯрдо рдЕрдиреБрднрд╛рдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╕реНрдЯрдо рдЕрдиреБрднрд╛рдЧ рдХрд┐рд╕ рд╣рдж рддрдХ рдХреНрд░реЙрд╕-рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╢рд╛рдпрдж рдереЛрдбрд╝рд╛ рдХрдо рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реИ, рдФрд░ рдПрдХ рдШрдЯрдХ рдХреЗ рднреАрддрд░ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдмреАрдЪред

рдХреНрдпрд╛ рдХреЛрдИ рдЗрд╕ рдХрд╕реНрдЯрдо рдЕрдиреБрднрд╛рдЧ рдХреЗ рд▓рд┐рдП рдореВрд▓ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд╛рд░ рдпрд╛ рд░реАрдбрдореЗ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ, рдЬреАрд╕реА рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ WebAssembly/gc#203 рдореЗрдВред рдЬреЗрдПрд╕-рдПрдХреАрдХрд░рдг рдХрд▓ рдЬреАрд╕реА рдЙрдкрд╕рдореВрд╣ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрд╕ рдЪрд░реНрдЪрд╛ рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдиреЗрдХреНрд╢рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╛ рдпрд╣ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╕рд╛рдмрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЪрд░реНрдЪрд╛ рдХреИрд╕реЗ рдЪрд▓рддреА рд╣реИ)ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

artem-v-shamsutdinov picture artem-v-shamsutdinov  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aaabbbcccddd00001111 picture aaabbbcccddd00001111  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dpw picture dpw  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

frehberg picture frehberg  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jfbastien picture jfbastien  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ