Design: async / рд╡рд╛рджрд╛ рд╕рдорд░реНрдерди

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

рдХрдИ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдп async рд╣реИрдВ рдФрд░ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ WebAssembly рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдЬреЗрдПрд╕ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХрд╛ рд▓рд╛рдн рдЙрдард╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдЖрдпрд╛рддрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

const importObject = { 
  returnOneAsync: () => new Promise(done => done(1)) 
};
extern "C" int returnOneAsync();

int main(){
  int x = returnOneAsync(); // should suspend main until promise resolved.
  return x+x;
}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

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

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

JS рд╡рд╛рджреЛрдВ рдХрд╛ рдХреЛрдИ рднреА рд╕рдорд░реНрдерди JS рд╣реЛрд╕реНрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рд╕рд╛рде рд╣реА, рдЖрдкрдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ async рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ

рдЦреИрд░, рдореВрд▓реНрдп рддрдм рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЗрд╡реЗрдВрдЯрд▓реВрдк рд╡рд╛рджреЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ред
рдореВрд▓реНрдп рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рддрдХ рд╡реЗрдм рдЕрд╕реЗрдВрдмрд▓реА рдЗрдВрдЬрди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рддреБрдЪреНрдЫ рд╣реИред рдПрдХ рдЕрдзрд┐рдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдбреАрдмреА рдХреНрд╡реЗрд░реА рдмрдирд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: getAgeOf: (name) => db.find({name}).then(x=>x.age)

рд╕реА рд╕реНрд╡рдпрдВ рдПрд╕рд┐рдВрдХ рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рдирд┐рд▓рдВрдмрди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреЛ рдпрд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рдЧрд▓рдд рд╣реИред рд╕реА рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдХреЛрд░рдЖрдЙрдЯрд┐рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ LLVM-5.0 рдФрд░ рдКрдкрд░ рдХреА рдУрд░ coroutines рдФрд░ async/wait рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

https://llvm.org/docs/Coroutines.html

рдФрд░ C++17 рдХреЗ рдкрд░рд┐рд╢рд┐рд╖реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ coroutine-ts рд╣реИ рдЬрд┐рд╕реЗ рдХреНрд▓реИрдВрдЧ-5.0 рдХреЗ рдмрд╛рдж рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреБрдЫ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
https://github.com/lewissbaker/cppcoro#generator

рд╕реА рдореЗрдВ рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЗ рд╕рд╛рде рдЬрд╛рджреБрдИ рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░рдСрдкрд░реЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрд░рдЯрд╛рдЗрди рдпрд╛ рдПрд╕рд┐рдВрдХреНрд╕ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдордЬрд╝рдмреВрддреА рд╕реЗ рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реАрдорд╛рдВрдХрд┐рдд рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рдПрдХ рд░реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдирд┐рдХрдЯрддрдо C рдХреА рдкреЗрд╢рдХрд╢ longjmp рд╣реИ, рдЬреЛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ Wasm рдореЗрдВ рд╣реА рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (Emscripten рдХреЗ рд╕рд╛рде, longjmp JS рдЕрдкрд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде JS рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред Wasm рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд▓рдВрдмрди рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдВрддрддрдГ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред C++ coroutines рдЕрднреА рдорд╛рдирдХ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ Emscripten AFAICT рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдХрд╣рд╛рдВ рд╕реЗ рдЖ рд░рд╣реЗ рд╣реИрдВред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╡рд┐рдЪрд╛рд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рдореИрдВ рдХреЛрд░рдЯрд╛рдЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рди рд╣реА рд╕реА/рд╕реА ++ рдореЗрдВ рд╡рд╛рджреЗ рдХрд░рддрд╛ рд╣реВрдВ рдпрд╛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╛рд╕рдо рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВред

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

рдЖрдкрдХреЛ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реА рдХреЗ рд▓рд┐рдП рдПрд╕рд┐рдВрдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕рдордЭрдирд╛ рдЬрд░реВрд░реА рд╣реИ?

рд╡рд╛рджрд╛ рд╣рд▓ рд╣реЛрдиреЗ рддрдХ wasm рдирд┐рд╖реНрдкрд╛рджрди рдЗрдВрдЬрди рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рддрдХрдиреАрдХреА рдХрдард┐рдирд╛рдИ рдХреНрдпрд╛ рд╣реИ?

рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ wasm рдХреЛ x86 рдХреЗ рд▓рд┐рдП рд╕рдордп-рд╕рдордп рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдкрд░ рдЖрдкрдХрд╛ рдХреЛрдИ рдирд┐рдпрдВрддреНрд░рдг рдирд╣реАрдВ рд╣реИред
рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдкреНрдЯ рдФрд░ ptrace рдЬреИрд╕реЗ syscalls рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ; рдбреАрдмрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреМрди рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдЖрдпрд╛рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╣рдо рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд (x86) рдСрдкрдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрдЧрд╛ - рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрди рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡реИрд╕реЗ рднреА рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рд╣рдордиреЗ рдЕрдкрдиреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдЖрдзрд╛рд░рд┐рдд рд╕реА++рдЬреЗрдЖрдИрдЯреА/рдПрдУрдЯреА рдореЗрдВ рд╕рд╕реНрдкреЗрдВрдб/рдбреАрдмрдЧ/рд░рд┐рдЬреНрдпреВрдореЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣реЛрд╕реНрдЯ-рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд░реЗрдкреЛ рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ...

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

рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/WebAssembly/design/issues/720

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, wasm рдХреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдЕрдВрджрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ UI рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧрдгрдирд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдП рдЧрдП рдереЗред

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

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

chicoxyzzy picture chicoxyzzy  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

spidoche picture spidoche  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

Artur-A picture Artur-A  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Thaina picture Thaina  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ