Design: рдкреНрд░рд╕реНрддрд╛рд╡: рдкреНрд░рддреАрдХреНрд╖рд┐рдд

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдордИ 2020  ┬╖  96рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: WebAssembly/design

@rreverser рдФрд░ рдореИрдВ WebAssembly рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВред

рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд " рд╕рд┐рдВрдХреНрд░реЛрдирд╕ " рдХреЛрдб рдХреА рдорджрдж рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкрдврд╝рдиреЗ рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ:

fread(buffer, 1, num, file);
// the data is ready to be used right here, synchronously

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

const result = fetch("http://example.com/data.dat");
// result is a Promise; the data is not ready yet!

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд▓рдХреНрд╖реНрдп рд╕рд┐рдВрдХ/ рдПрд╕рд┐рдВрдХ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд╡реЗрдм рдкрд░ wasm рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЖрдо рд╣реИред

рд╕рд┐рдВрдХ/рдПрд╕рд┐рдВрдХ рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЬрдмрдХрд┐ рдирдпрд╛ рдХреЛрдб рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрдбрд╝реЗ рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдЕрдХреНрд╕рд░ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдлреИрдХреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗ рд╡реЗрдм рдкрд░ рдирд╣реАрдВ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Asyncify рд╣реИ рдЬреЛ рдПрдХ wasm рдлрд╝рд╛рдЗрд▓ рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕рдиреЗ рдРрд╕реЗ рдХреБрдЫ рдХреЛрдбрдмреЗрд╕ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдпрд╣рд╛рдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрдо рдХреЗ рдЙрдкрдХрд░рдг рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдУрд╡рд░рд╣реЗрдб рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХреЛрдб рдЖрдХрд╛рд░ рдореЗрдВ 50% рдХреА рд╡реГрджреНрдзрд┐ рдФрд░ рдФрд╕рддрди 50% рдордВрджреА (рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдмрд╣реБрдд рдЦрд░рд╛рдм), рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕реНрдерд╛рдиреАрдп рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рд▓рд┐рдЦрдиреЗ/рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдЯреИрдХ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдЖрдЧреЗред рд╡рд╣ рдУрд╡рд░рд╣реЗрдб рдПрдХ рдмрдбрд╝реА рд╕реАрдорд╛ рд╣реИ рдФрд░ рдпрд╣ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ Asyncify рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ!

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рд▓рдХреНрд╖реНрдп рдПрдХ рдХреБрд╢рд▓ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХрдиреЗ рдФрд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Asyncify рдЬреИрд╕реЗ рдУрд╡рд░рд╣реЗрдб рдХреЗ рдмрд┐рдирд╛) рддрд╛рдХрд┐ рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рд╕рд┐рдВрдХ/рдПрд╕рд┐рдВрдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕рд╕реЗ рдмрдЪ рд╕рдХреЗрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╣рдо рдЗрд╕реЗ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡реЗрдм рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдпрд╣ WebAssembly рдХреЛ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗрдм рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░

рдпрд╣рд╛рдБ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ wasm рдХреЛрдб рдХреЗ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рдФрд░ рдореЗрдЬрдмрд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмреАрдЪ рд╣реИ рдЬреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рд╡рд╛рд╕ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдмрд╛рд╣рд░ рдХреА рд╕реАрдорд╛ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рдЬрдм рдПрдХ рдирдпрд╛ await рдирд┐рд░реНрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ wasm рдЙрджрд╛рд╣рд░рдг рдмрд╛рд╣рд░ рд╕реЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП "рдЗрдВрддрдЬрд╛рд░" рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ "рдкреНрд░рддреАрдХреНрд╖рд╛" рдХрд╛ рдЕрд░реНрде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛрдЧрд╛, рдФрд░ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЛ рд╡рд╛рд╕реНрдо рдкрд░рдорд╛рдгреБ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░, рд╡рд╛рд╕рдо рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдПрдХ рд╡рд╛рджреЗ рдкрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рд░реБрдХ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рд╡рд╣ рд╣рд▓ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ wasm рдЙрджрд╛рд╣рд░рдг fetch рдиреЗрдЯрд╡рд░реНрдХ рдСрдкрд░реЗрд╢рди рдкрд░ рд░реБрдХ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ .wat рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

;; call an import which returns a promise
call $do_fetch
;; wait for the promise just pushed to the stack
await
;; do stuff with the result just pushed to the stack

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

рд╡рд┐рд╡рд░рдг

рдХреЛрд░ рд╡рд╛рд╕рдо рд╕реНрдкреЗрдХ

рдХреЛрд░ wasm рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдмрд╣реБрдд рдХрдо рд╣реИрдВ:

  • рдПрдХ waitref рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВред
  • рдПрдХ await рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВред

рдкреНрд░рддреНрдпреЗрдХ await рдирд┐рд░реНрджреЗрд╢ (рдЬреИрд╕реЗ call_indirect ) рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

;; elaborated wat from earlier, now with full types

(type $waitref_=>_i32 (func (param waitref) (result i32)))
(import "env" "do_fetch" (func $do_fetch (result waitref)))

;; call an import which returns a promise
call $do_fetch
;; wait for the promise just pushed to the stack
await (type $waitref_=>_i32)
;; do stuff with the result just pushed to the stack

рдкреНрд░рдХрд╛рд░ рдХреЛ waitref рдкреНрд░рд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ (рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ) рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

await рдХреЗрд╡рд▓ рдореЗрдЬрдмрд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдХреБрдЫ рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдЕрд░реНрде рдореЗрдВ unreachable рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЬреЛ рд╡реЗрдм рдкрд░ рд╣реЛрд╕реНрдЯ рдХреЛ RuntimeError рдлреЗрдВрдХ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореВрд▓ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдХреЛрд░ рд╡рд╛рд╕рдо рд╕реНрдкреЗрдХ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ await рдХрд╛ рдорддрд▓рдм рдореЗрдЬрдмрд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдореЗрдЬрдмрд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдмрд╣реБрдд рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреЛрд░ wasm рдХрд▓реНрдкрдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реА!

рд╡рд╛рд╕рдо рдЬреЗрдПрд╕ рд╕реНрдкреЗрдХ

wasm JS spec рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди (рдЬреЛ рдХреЗрд╡рд▓ рд╡реЗрдм рдЬреИрд╕реЗ JS рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ) рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ:

  • рдПрдХ рд╡реИрдз waitref рдорд╛рди рдПрдХ JS рдкреНрд░реЙрдорд┐рд╕ рд╣реИред
  • рдЬрдм рдХрд┐рд╕реА рд╡рд╛рджреЗ рдкрд░ await рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдВрдкреВрд░реНрдг wasm рдЙрджрд╛рд╣рд░рдг рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕ рд╡рд╛рджреЗ рдХреЗ рд╣рд▓ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
  • рдпрджрд┐ рд╡рд╛рджрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╛рджрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдирд┐рд╖реНрдкрд╛рджрди рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдХреЛрдИ рд╣реИ)
  • рдпрджрд┐ рд╡рд╛рджрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдирд┐рд╖реНрдкрд╛рджрди рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ await рдХреЗ рд╕реНрдерд╛рди рд╕реЗ рдПрдХ wasm рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрддреЗ рд╣реИрдВред

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

рдпрд╣ рдЬреЗрдПрд╕ рдХреЛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдПрдХ wasm рдЙрджрд╛рд╣рд░рдг рдХрд╣рддрд╛ рд╣реИ рдЬреЛ рддрдм рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ? рдЗрд╕реЗ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрджрд╛рд╣рд░рдг рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬрдм рдореВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ wasm, рдПрдХ рдИрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

void event_loop_iteration() {
  // ..
  while (auto task = getTask()) {
    task.run(); // this *may* be a network fetch
  }
  // ..
}

рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдмрд╛рд░ рдкреНрд░рддрд┐ requestAnimationFrame рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЗрд╕реЗ рджрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рд░реЗрдВрдбрд░рд┐рдВрдЧ, рднреМрддрд┐рдХреА, рдСрдбрд┐рдпреЛ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдлрд╝реЗрдЪрд┐рдВрдЧред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреЗрдЯрд╡рд░реНрдХ рд▓рд╛рдиреЗ рдХреА рдШрдЯрдирд╛ рд╣реИ, рддреЛ рдФрд░ рдХреЗрд╡рд▓ рддрднреА рд╣рдо await рдирд┐рд░реНрджреЗрд╢ рдХреЛ fetch рдХреЗ рд╡рд╛рджреЗ рдкрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо event_loop_iteration рдХреА рдПрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП 0 рдмрд╛рд░, рдпрд╛ 1 рдмрд╛рд░, рдпрд╛ рдХрдИ рдмрд╛рд░ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕ wasm рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ - рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ wasm рдирд┐рд░реНрдпрд╛рдд рдХреЗ JS рдХреЙрд▓рд░ рдореЗрдВ рдирд╣реАрдВред рддрд╛рдХрд┐ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рд░реБрдХрдиреЗ рдпрд╛ рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╢реБрджреНрдз рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ:

function foo(bar) {
  // ..
  let result = bar(42);
  // ..
}

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

рдЕрдм, рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ bar рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ! рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ foo рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд bar s рдХреЛ рд╕рдордиреНрд╡рдп рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реЛ, рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд┐рдпрд╛ рд╣реЛред рд▓реЗрдХрд┐рди рдЬрд┐рд╕ wasm/JS рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдо рдпрд╣рд╛рдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИ рдЬрд╣рд╛рдВ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЪреАрдЬреЛрдВ рдХреЗ рдмреАрдЪ рдЗрддрдирд╛ рддрдВрдЧ рдпреБрдЧреНрдорди рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, event_loop_iteration рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЖрдо рддреМрд░ рдкрд░, рдЕрдХреНрд╕рд░ wasm рдЖрдкрдХрд╛ рд╕рдВрдХрд▓рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ JS рд╕рд╛рдорд╛рдиреНрдп "рд░рдирдЯрд╛рдЗрдо" рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ, рддрд╛рдХрд┐ JS рдХреЛ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдкрдбрд╝реЗред рдЬреЗрдПрд╕ рдЖрд╕рд╛рдиреА рд╕реЗ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП result instanceof Promise рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдпрд╛ рдЬреЗрдПрд╕ await рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:

async function runEventLoopIteration() {
  // await in JavaScript can handle Promises as well as regular synchronous values
  // in the same way, so the log is guaranteed to be written out consistently after
  // the operation has finished (note: this handles 0 or 1 iterations, but could be
  // generalized)
  await wasm.event_loop_iteration();
  console.log("the event loop iteration is done");
}

(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ рд╣рдореЗрдВ рдЙрд╕ console.log рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рддреЛ рд╣рдореЗрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ JS await рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рдПрдХ wasm рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрд▓ рд╣реЛрдЧреА)

рдЙрдкрд░реЛрдХреНрдд рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд░реБрдХреЗ рд╣реБрдП wasm рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ JS рдорд╛рдорд▓реЗ рдкрд░ рдореЙрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдХрд┐ async рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

  • рдЬрдм рдПрдХ await рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рднреА рдЗрд╕рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдорддреМрд░ рдкрд░ рд╡рд╣ JS рд╣реЛрдЧрд╛ рдЬреЛ wasm рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдиреЛрдЯреНрд╕ рджреЗрдЦреЗрдВ)ред рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдПрдХ рд╡рд╛рджрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ wasm рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдХрдм рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рд╣реИ рддреЛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЯреВрд▓рдЪреЗрди / рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдкреЛрд░реНрдЯ

Asyncify рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдЯреВрд▓ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдпрд╣ рдЖрд╕рд╛рди рд╣реИ (рдФрд░ рдордЬреЗрджрд╛рд░!) рдкрд╣рд▓реЗ рдмрддрд╛рдП рдЧрдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

  1. рдЕрдкрдиреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ wasm рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓рдкреЗрдЯреЗрдВред рдпрд╣ рдмрд╛рд╣рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреЗрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд╛рд╕рдо рдореЗрдВ рддреНрд╡рд░рд┐рдд рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдУрд╡рд░рд╣реЗрдб рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рд░реБрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди Asyncify рд╣реЗрд▓реНрдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╣реА рдХрд░рддреА рд╣реИред
  2. рдЬрдм рдХреЛрдИ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд░реБрдХрддрд╛ рд╣реИ рддреЛ рдХреБрдЫ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рд▓рд┐рдЦреЗрдВ рдФрд░ рдЙрд╕ рдЬреЗрдПрд╕ рд╕реЗ рдЬрд╛рдВрдЪреЗрдВ рдЬрд┐рд╕рдиреЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Emscripten рдХрд╛ Asyncify рдПрдХреАрдХрд░рдг рдпрд╣реА рдХрд░рддрд╛ рд╣реИред

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

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдкреНрд░рджрд░реНрд╢рди

рдХрдИ рдХрд╛рд░рдХреЛрдВ рдХреЛ VM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рд╕рд░рд▓ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП:

  1. рдПрдХ рд╡рд┐рд░рд╛рдо/рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЙрдирдХреЗ рд╕реНрдерд╛рди рдХреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВред
  2. рдЬрдм рд╣рдо рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдареАрдХ рд╡рд╣реАрдВ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЪреАрдЬреЗрдВ рдЫреЛрдбрд╝реА рдереАрдВ, рдФрд░ рд╣рдо рдРрд╕рд╛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдо рдХрднреА рднреА "рдХрд╛рдВрдЯрд╛" рдирд┐рд╖реНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ: рд╕реА рдХреЗ setjmp рдпрд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдХреЛрд░рдЖрдЙрдЯрд┐рди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреЛ рдХреНрд▓реЛрдирд┐рдВрдЧ/рдлреЛрд░реНрдХрд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рджреЛ рдмрд╛рд░ рдирд╣реАрдВ рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  3. рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ рдпрджрд┐ await рдХреА рдЧрддрд┐ рдЬреЗрдПрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХреЙрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдзреАрдореА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рдЬрд┐рд╕рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рд╡рд╛рджрд╛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рд╣рдо рдИрд╡реЗрдВрдЯ рд▓реВрдк рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ ( рдЬрд┐рд╕рдореЗрдВ рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдб рдкреНрд▓рд╕ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЪрд▓ рд░рд╣реА рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ)ред рдпрд╣реА рд╣реИ, рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рдорд╛рдВрдЧ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ await рдХреЛ рддреЗрдЬ-рддреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдвреВрдВрдврддреЗ рд╣реИрдВред рд╣рдо рдХреЗрд╡рд▓ рдпрд╣рд╛рдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ await рдХреБрд╢рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ Asyncify рдХреЗ рдмрдбрд╝реЗ рдУрд╡рд░рд╣реЗрдб рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рддреЗрдЬрд╝ рд╣реЛред

рдЙрдкрд░реЛрдХреНрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬрдм рд╣рдо рд░реБрдХрддреЗ рд╣реИрдВ рддреЛ рд╕реНрдЯреИрдХ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдЬрдмрдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рд╣реИ, рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЙрдореНрдореАрджреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдпрд╣ рдмрд╣реБрдд рд╣реА рдЙрдЪрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдЧрд░ рд╣рдо рд░реБрдХрдиреЗ рдкрд░ рд╣реА рд╕реНрдЯреИрдХ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рд░реБрдХрдиреЗ рдХреА рддреИрдпрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛рдиреА, рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдорд╛рдиреНрдп рдУрд╡рд░рд╣реЗрдб рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ рдХрд┐ Asyncify рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ!)

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

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

рд╣рдо рдЗрд╕ рдЦрдВрдб рдкрд░ VM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ!

рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗрд╡рд▓ Wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдХреЙрд▓рд░ рдХреЛ WebAssembly рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрдХ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╣реЛрд╕реНрдЯ (JS рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░) рд╕реНрдЯреИрдХ рдлрд╝реНрд░реЗрдо рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред await рдПрдХ wasm рдЙрджрд╛рд╣рд░рдг рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреИрдХ рдлреНрд░реЗрдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдПрдХ рд╡рд┐рд░рд╛рдо рд╣реЛрдиреЗ рдкрд░ WebAssembly рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рдФрд░ рдПрдХрд╛рдзрд┐рдХ рд╡рд┐рд░рд╛рдо/рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдПрдВ рдПрдХ рд╕рд╛рде рдЙрдбрд╝рд╛рди рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред (рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрджрд┐ VM рд╕реНрдЯреИрдХ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╣рдо рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдПрдХ рдирдпрд╛ рд╕реНрдЯреИрдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдпрджрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реБрдХрддреЗ рд╣реИрдВред)

рдЕрдиреНрдп рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛рд╡

рдЕрдкрд╡рд╛рдж

рд╡рд╛рджрд╛ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ wasm рдЕрдкрд╡рд╛рдж рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред

рдХреЛрд░рдЯрд╛рдЗрдиреНрд╕

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

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

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

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

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рджреЛ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдкреВрд░рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж await рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк await рдХреЛ рдХреЛрд░рдЖрдЙрдЯрд┐рди рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИ (рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ coroutine рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рджреЗрдирд╛)ред

WASI#276

рд╕рдВрдпреЛрдЧ рд╕реЗ WASI #276 @tqchen рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреИрд╕реЗ рд╣рдо рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рдереЗред рд╣рдореЗрдВ рдпрд╣ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реБрдИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЛрд░рдЖрдЙрдЯ рдФрд░ рдПрд╕рд┐рдВрдХ рд╕рдорд░реНрдерди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рддреНрдордХрддрд╛рдПрдВ рд╣реИрдВред

рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ await рдирд┐рд░реНрджреЗрд╢ рд╡рд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреБрдЫ рд╕рдорд╛рди (рд╡рд┐рдХрд▓реНрдк C3) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдХрд┐ рд╡рд┐рд╢реЗрд╖ async syscalls рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдмрд▓реНрдХрд┐ рдХреБрдЫ syscalls waitref рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ await -ed рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдХреЛрдиреЗ рдХрд╛ рдорд╛рдорд▓рд╛: wasm рдЙрджрд╛рд╣рд░рдг => wasm рдЙрджрд╛рд╣рд░рдг => рдкреНрд░рддреАрдХреНрд╖рд╛

JS рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, рдЬрдм рдХреЛрдИ wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рддреБрд░рдВрдд рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рдкрд╛рд╕ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рд╣рдордиреЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХреЙрд▓рд░ JS рд╕реЗ рд╣реИ, рдФрд░ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдХреЙрд▓рд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдордиреЗ рдПрдХ wasm рдирд┐рд░реНрдпрд╛рдд рдкрд░ setTimeout рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рд▓реМрдЯрд╛ рд╣реБрдЖ рд╡рд╛рджрд╛ рд╕рд┐рд░реНрдл рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рдорд╛рдорд▓рд╛ рд╣реИ, wasm рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА рдХреЙрд▓ рдХрд╛, рд╡рд╣ рд╣реИ, рдЬрд╣рд╛рдВ wasm рдЙрджрд╛рд╣рд░рдг A рд╕реАрдзреЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ B , рдФрд░ B рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд░рд╛рдо рд╣рдореЗрдВ рддреБрд░рдВрдд B рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ Promise рд▓реМрдЯрд╛ рджреЗрддрд╛ рд╣реИред

рдЬрдм рдХреЙрд▓рд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рдПрдХ рдЧрддрд┐рд╢реАрд▓ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдХрдо рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ рдХрд┐ рдХреЙрд▓рд░ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗред рдЬрдм рдХреЙрд▓рд░ WebAssembly рд╣реИ, рдЬреЛ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЬреАрдм рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореВрд▓реНрдп рдХреЛ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдкреНрд░реЙрдорд┐рд╕ рд╕реЗ рдХрд┐рд╕реА рднреА рдЙрджрд╛рд╣рд░рдг A рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛ (рдпрджрд┐ рдХреЛрдИ i32 рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд╛рд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдПрдХ 0 )ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ:

  • рдпрджрд┐ рдПрдХ wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЙрд▓ (рд╕реАрдзреЗ рдпрд╛ call_indirect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдХрд┐рд╕реА рдЕрдиреНрдп wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдЪрд▓рддреЗ рд╕рдордп await рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдПрдХ RuntimeError рдЕрдкрд╡рд╛рдж рд╣реИ await рдХреЗ рд╕реНрдерд╛рди рд╕реЗ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ред

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдУрд╡рд░рд╣реЗрдб рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд░реБрдХрд╛ рди рдЬрд╛рдП, рдпрд╛рдиреА рд╕рд╛рдорд╛рдиреНрдп wasm instance -> wasm instance рдХреЙрд▓ рдХреЛ рдкреВрд░реА рдЧрддрд┐ рд╕реЗ рд░рдЦрддреЗ рд╣реБрдП, рдХреЗрд╡рд▓ рдПрдХ рдард╣рд░рд╛рд╡ рдХрд░рддреЗ рд╕рдордп рд╕реНрдЯреИрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗред

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

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

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ wasm рдирд┐рд░реНрдпрд╛рдд рдХреЛ async рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬрдмрдХрд┐ рдЕрдиреНрдп рдХреЛ рдирд╣реАрдВ, рдФрд░ рдлрд┐рд░ рд╣рдо рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрдЪрд┐рдд рдХреЙрд▓ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ; рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ event_loop_iteration рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдЬреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдХреЗ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреЙрд▓ рднреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рд╕реЗ рдмрдЪ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред

рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛

рд╢рд╛рдпрдж рд╣рдореЗрдВ рдПрдХ рдирдП await рдирд┐рд░реНрджреЗрд╢ рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрджрд┐ рдЬрдм рднреА рдХреЛрдИ JS рдЖрдпрд╛рдд рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рддреЛ wasm рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИ? рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрднреА рдЬрдм JS рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд┐рдЫрдбрд╝реЗ-рдЕрд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╛рд╕рдо рдЕрдм рдмрд┐рдирд╛ рд░реБрдХреЗ рдПрдХ рд╡рд╛рджрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдпреЛрдЧреА рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЬрд┐рд╕ рдкрд░ рд╣рдордиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрдпрд╛рдд рдХреЛ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП рдХрд┐ "рдпрджрд┐ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЖрдпрд╛рдд рд░реБрдХ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП"ред рд╣рдордиреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрд╛ рддреЛ JS рдпрд╛ рд╡рд╛рд╕рдо рдкрдХреНрд╖ рдкрд░, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рд╕рд╣реА рд▓рдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо JS рдкрдХреНрд╖ рдкрд░ рдЖрдпрд╛рдд рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ wasm рдореЙрдбреНрдпреВрд▓ рдХреЛ рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд░реБрдХрддреА рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЬрдм рддрдХ рдХрд┐ рд▓рд┐рдВрдХ рдЪрд░рдг, рдЖрдпрд╛рдд рдЖрдиреЗ рдкрд░ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЖрдпрд╛рдд рдФрд░ рдард╣рд░рд╛рд╡ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ "рдПрдХ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд" рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рд╕реАрдзреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдирд┐рд░реНрджреЗрд╢ рд╣реИ, await , рдЬреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдРрд╕реА рдХреНрд╖рдорддрд╛ рд╡реЗрдм рдХреЗ рдмрд╛рд╣рд░ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рдкрд╣рд▓реЗ рдиреЛрдЯреНрд╕ рджреЗрдЦреЗрдВ), рдЗрд╕рд▓рд┐рдП рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рд╣реЛрдиреЗ рд╕реЗ рдЪреАрдЬреЗрдВ рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рд╣реЛ рд╕рдХрддреА рд╣реИрдВред

рдкрд┐рдЫрд▓реА рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░реНрдЪрд╛

https://github.com/WebAssembly/design/issues/1171
https://github.com/WebAssembly/design/issues/1252
https://github.com/WebAssembly/design/issues/1294
https://github.com/WebAssembly/design/issues/1321

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

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

рдореИрдВ рдпрд╣рд╛рдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕реАрдзреЗ рдХреБрдЫ рд╡реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдиреЗ рдЕрдм рддрдХ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдирдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд░реЛрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдЕрдВрдд рдореЗрдВ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╕рднреА рдХреЗ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдХреЛрд░рдЯрд╛рдЗрди/рд╕реНрдЯреИрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

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

рдмреЗрд╣рддрд░реАрди рд▓реЗрдЦрди! рдореБрдЭреЗ рдореЗрдЬрдмрд╛рди-рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд┐рд▓рдВрдмрди рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИред @rossberg рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░рднрд╛рд╡ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╕рдорд╛рди рдЧреИрд░-рд╕реНрдерд╛рдиреАрдп рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: "рдЙрдкрд░реЛрдХреНрдд рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЬрдм рд╣рдо рд░реБрдХрддреЗ рд╣реИрдВ рддреЛ рд╕реНрдЯреИрдХ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред" рдпрд╣ рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ JIT рдЗрдВрдЬрди JS рдФрд░ wasm рдХреЗ рдмреАрдЪ рдореВрд▓ C рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреИрдХ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрдЪрдд рдФрд░ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ wasm рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреИрдХ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рдЖрдИрдЖрдИрдпреВрд╕реА рдЗрд╕ рддрд░рд╣ рд╕реА рд╕реНрдЯреИрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдЪрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рдерд╛ рдЬрдм рдЕрдЬрдЧрд░ рдиреЗ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА: https://github.com/stackless-dev/stackless/wiki ред

рдореИрдВ рдЗрд╕реА рддрд░рд╣ рдХреА рдЪрд┐рдВрддрд╛ @sbc100 рд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╕реНрдЯреИрдХ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рдлреА рдХрдард┐рди рдСрдкрд░реЗрд╢рди рд╣реИ, рдЦрд╛рд╕рдХрд░ рдпрджрд┐ рдЖрдкрдХреЗ VM рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ GC рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рд╣реИред

@sbc100

рдХреНрдпрд╛ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ wasm рдирд┐рд╖реНрдкрд╛рджрди рд╕реНрдЯреИрдХ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреНрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА?

рдореБрдЭреЗ рдЗрд╕реЗ рд╡реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдкрд░ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВред рдФрд░ рдореИрдВ рд╕реНрдЯреИрдХрд▓реЗрд╕ рдЕрдЬрдЧрд░ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!

рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░: рд╡рд┐рднрд┐рдиреНрди рдХреЛрд░рдЖрдЙрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдирд┐рдореНрди рд╕реНрддрд░ рдкрд░ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╣рд╛рдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдпрд╣ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рднрд▓реЗ рд╣реА рд╕реНрдЯреИрдХ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдкреА рдХрд░рдирд╛ рдкрдбрд╝реЗ, рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдУрд╡рд░рд╣реЗрдб рд╣реИред

(рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рд╡реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг wasm VMs рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ - рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рд╕реЗ рд╕реБрдирдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рд╛рдБ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ!)

@lachlansneff

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬреАрд╕реА рджреНрд╡рд╛рд░рд╛ рдЪреАрдЬреЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ? рдореИрдВ рдЕрдиреБрд╕рд░рдг рдирд╣реАрдВ рдХрд░рддрд╛ред

@kripken GCs рдореЗрдВ рдЕрдХреНрд╕рд░ (рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ) рдПрдХ рд╕реНрдЯреИрдХ рдкрд░ рдЪрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдХрд┐ рдирдП рд╕реНрдЯреИрдХ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдкрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╢рд╛рдпрдж рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ JSC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИ рд╡рд╣ рдЗрд╕рдХреА рдкреБрд╖реНрдЯрд┐ рдпрд╛ рдЦрдВрдбрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@lachlansneff

рдзрдиреНрдпрд╡рд╛рдж, рдЕрдм рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдЖрдк рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВред

рд╣рдо рдпрд╣ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдвреЗрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрд▓рдирд╛ (рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд╛рдиреАрдп рдХреЛ рд╕рднреА рддрд░рд╣ рд╕реЗ рдкрд╣рдЪрд╛рдирдирд╛, рдЖрджрд┐) рдЖрд╡рд╢реНрдпрдХ рд╣реИред (рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХреЛрд░рдЖрдЙрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВред)

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

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

рдореИрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рджреЗрдЦрдХрд░ рдмрд╣реБрдд рдЙрддреНрд╕рд╛рд╣рд┐рдд рд╣реВрдВред рд▓реНрдпреВрд╕реЗрдЯ рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдордп рдХреЗ yield рдФрд░ resume рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ, рдФрд░ рд╣рдо рд░рд╕реНрдЯ рд╣реЛрд╕реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓ рд░рд╣реЗ async рдХреЛрдб рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рд╕рдЯреАрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

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

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ! рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП wasmer-js рдкрд░ async рдХреЛрдб рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрджрд░реНрдн рдореЗрдВ VM рдЗрдВрдЯрд░реНрдирд▓ рддрдХ рдХреЛрдИ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ)ред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рд╛рдпрдж async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪреАрдЬреЛрдВ рдХреЛ рд▓реБрдврд╝рдХрдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рднрд╛рд╖рд╛-рдЕрдЬреНрдЮреЗрдп рддрд░реАрдХреЗ рд╕реЗ рднреАред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .await рдХреЛ JsPromise рдореЗрдВ рд░рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ wasm-bindgen-futures рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣рд╛рдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд await рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдЕрдкрдиреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдореИрдВ wasm рдХреЗ рдЕрдВрджрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ Asyncify рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрдВрдЧ рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИред рдореИрдВ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдЦреЛ рд░рд╣рд╛ рд╣реВрдБ? рдХреНрдпрд╛ рдХреЛрдИ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

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

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

int test() {
   await();
   return 1;
}

рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ () => i32 рд╣реИред рдирдП рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рддрд╣рдд, рдХреЙрд▓ рдЗрди рдЯреЗрд╕реНрдЯ рдпрд╛ рддреЛ i32 рд▓реМрдЯрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдПрдХ Promise<i32> ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдирдпрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдирд╛ рдХрдард┐рди рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб-рдкреЛрд░реНрдЯрд┐рдВрдЧ рдХреА рд▓рд╛рдЧрдд, рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдХреЙрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреЙрд▓ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ)ред

рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди (рдЬреИрд╕реЗ async рдХреЙрд▓) рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреЙрд▓ рдореЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ?

рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдСрдкрд░реЗрд╢рди рдСрдкрд░реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдпреАрд▓реНрдб рдСрдкрд░реЗрд╢рди рдХреА рддрд░рд╣ рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдУрдПрд╕ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ wasm VM) рдХреЛ syscall рд╕реЗ finsih рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рджреЗрддрд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдз рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рдЧрднрдЧ рдмрд░рд╛рдмрд░ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдореЗрдВ await рдХреЗрд╡рд▓ async рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдпреЛрдЧреНрдп рд╣реЛред рдпрд╣реА рд╣реИ, рддрддреИрдпрд╛ рдХреА рддрд░рдл waitref externref #$ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ await рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрдЬрд╛рдп рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ $await : [externref] -> [] , рдФрд░ рдЬреЗрдПрд╕ рдкрдХреНрд╖ рдкрд░ рдЖрдк рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ foo(promise) => await promise рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рджреВрд╕рд░реА рджрд┐рд╢рд╛ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЬреЗрдПрд╕ рдХреЛрдб рдереЗ рдЬреЛ await async рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рд╡рд╛рджреЗ рдкрд░ рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рдЖрдк рдЙрд╕ рд╡рд╛рджреЗ рдХреЛ рдПрдХ wasm рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЖрдкреВрд░реНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ await рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЗрдирдкреБрдЯ рдкрд░ред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╕рдордЭ рд╣реИ?

@RossTate рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ, AIUIред wasm рдХреЛрдб await рдПрдХ рд╡рд╛рджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЗрд╕реЗ promise1 рдХрд╣рддреЗ рд╣реИрдВ), рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ wasm рдирд┐рд╖реНрдкрд╛рджрди рд╣реА рдЙрдкрдЬ рджреЗрдЧрд╛, JS рдирд╣реАрдВред wasm рдХреЛрдб JS рдХреЙрд▓рд░ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд╛рджрд╛ (рдЗрд╕реЗ promise2 рдХрд╣рддреЗ рд╣реИрдВ) рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЬрдм promise1 рд╕рдорд╛рдзрд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм wasm рдирд┐рд╖реНрдкрд╛рджрди рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдЬрдм рд╡рд╣ wasm рдХреЛрдб рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рддреЛ promise2 wasm рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд╣рд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

@tqchen

рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди (рдЬреИрд╕реЗ async рдХреЙрд▓) рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдХреЙрд▓ рдореЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ?

рджрд┐рд▓рдЪрд╕реНрдк - рдЖрдк рд▓рд╛рдн рдХрд╣рд╛рдБ рджреЗрдЦрддреЗ рд╣реИрдВ? рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдирд┐рд░реНрдпрд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ await рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рд░реВрдк рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрднреА-рдХрднреА рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╡реАрдПрдо рдХреЛ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдорджрдж рдХрд░реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдПрдХ рд╕реНрдкрд╖реНрдЯ рдШреЛрд╖рдгрд╛ рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдЗрд░рд╛рджреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡реАрдПрдо рдПрдХ рдЙрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдлреЗрдВрдХ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЗрд░рд╛рджрд╛ рдПрд╕рд┐рдВрдХ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рдХреЙрд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреАрдУрд╡реА рд╕реЗ рдпрд╣ рдХреЛрдб рд▓реЗрдЦрди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдХреЙрд▓ рди рдХрд░реЗ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Promise.resolve(test()) рд▓реМрдЯрд╛рддрд╛ рд╣реИред

await inst.exports_async.test();

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ .await рдХреЛ JsPromise рдореЗрдВ рд░рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ wasm-bindgen-futures рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ? await рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдЕрдкрдиреА рдЕрдЬреНрдЮрд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдореИрдВ wasm рдХреЗ рдЕрдВрджрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ Asyncify рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрдВрдЧ рд╕рдорд╛рдзрд╛рди рдЖрд╕рд╛рди рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@malbarbo рд╕рдорд╛рди рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж рджреЛ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝рд╛ рдУрд╡рд░рд▓реИрдк рд╣реИ; рд░рд╕реНрдЯ рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдкреВрд░реНрдг рдХреЛрд░рдЖрдЙрдЯ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдЬреБрдбрд╝реЗ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред

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

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЛ рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╡рд╣ рдореЗрдЬрдмрд╛рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП syscalls рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЗрдВ async рд╣реЛрдирд╛ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдореМрдЬреВрджрд╛ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдХрд╣реАрдВ рд╕реЗ рднреА рдкреАрдЫреЗ-рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреВрд░рд╛ рдРрдк рдХреИрд╕реЗ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред (рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓ I/O рд╣реИ, рд╕реА/рд╕реА++/рд░рд╕реНрдЯ рд╕рд╣рд┐рдд рдХреМрди рд╕реА рд╕реНрд░реЛрдд рднрд╛рд╖рд╛рдПрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдордХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реЗрдм рдкрд░ рдирд╣реАрдВ рд╣реИред)

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкреАрдУрд╡реА рд╕реЗ рдпрд╣ рдХреЛрдб рд▓реЗрдЦрди рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдмрдирд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рдореНрди рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдХреЙрд▓ рди рдХрд░реЗ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ Promise.resolve(test()) рд▓реМрдЯрд╛рддрд╛ рд╣реИред

@tqchen рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╛рдиреА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА await рдСрдкрд░реЗрдЯрд░ рдореЗрдВ рдПрдХ рд╣реА рдлреИрд╢рди рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдФрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рджреЛрдиреЛрдВ рдорд╛рдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдФрд░ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рд╕реБрдЭрд╛рд╡ рдПрдХ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╣реИ, рддреЛ рд╣рдорд╛рд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдореБрдЦреНрдп WebAssembly рдкрдХреНрд╖ рдкрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рдРрд╕реЗ рд░реИрдкрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдпрд╛ рддреЛ рд▓рд┐рдВрдЯ рдпрд╛ рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рд╕реНрддрд░ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реИрдкрд░ рд╕реНрддрд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрд╣, рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, @binjiред

рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╕рдордХрдХреНрд╖ рд╣реИ? JS API рдореЗрдВ WebAssembly.instantiateAsync(moduleBytes, imports, "name1", "name2") рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП moduleBytes рдореЗрдВ рдХрдИ рдЖрдпрд╛рдд рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдд import "name1" "name2" (func (param externref)) рд╣реИред рдлрд┐рд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди imports рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдпрд╛рдд рдХреЛ рддрддреНрдХрд╛рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ await рдХреЗ рд╕рд╛рде рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдд рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЬрдм рдЗрд╕реЗ await рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рдЧрд╛рд░реНрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реНрдЯреИрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдПрдХ рдирдП рд╡рд╛рджреЗ рдореЗрдВ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ред

рдХреНрдпрд╛ рдЗрд╕рд╕реЗ рдХрд╛рдо рд╣реЛ рдЬрд╛рдпреЗрдЧрд╛? рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдкреВрд░реА рддрд░рд╣ рд╕реЗ JS API рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдмрд┐рдирд╛ WebAssembly рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗред рдмреЗрд╢рдХ, рдлрд┐рд░ рднреА рдпрд╣ рдЕрднреА рднреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

@kripken start рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдХреНрдпрд╛ рдпрд╣ рд╕реНрдерд┐рд░ рд░реВрдк рд╕реЗ await рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛, рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ Wasm рддрддреНрдХрд╛рд▓рддрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛?

@malbarbo wasm-bindgen-futures рдЖрдкрдХреЛ рд░рд╕реНрдЯ рдореЗрдВ async рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрд╕рд┐рдВрдХ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛: рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ async рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ .await рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрдкрдХреЛ async рдпрд╛ .await рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрд╕рд┐рдВрдХ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЖрдк рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ OS API (рдЬреИрд╕реЗ std::fs ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗрдм рдореЗрдВ рдХреЗрд╡рд▓ async API рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде рдЖрдк рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдУрдПрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╡реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рджрд┐рдЦреЗрдВрдЧреЗ ред

рднрд▓реЗ рд╣реА рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд▓рд╛рдЧреВ рд╣реЛ, wasm-bindgen-futures рдЕрднреА рднреА рдореМрдЬреВрдж рд░рд╣реЗрдЧрд╛ рдФрд░ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓ рд░рд╣рд╛ рд╣реИ ( async рдлрд╝рдВрдХреНрд╢рди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ)ред рдФрд░ async рдлрд╝рдВрдХреНрд╢рди рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@RossTate рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ "рд╡реИрдХрд▓реНрдкрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░" рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдПрдХ рдХреЗ рд╕рдорд╛рди рд╣реИ:

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

рд╕реНрдЯрд╛рд░реНрдЯ рдлрдВрдХреНрд╢рди рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдХреНрдпрд╛ рдпрд╣ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛, рдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рд╡рд╛рд╕рдо рдЗрдВрд╕реНрдЯреЗрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛?

@Pauan рд╣рдордиреЗ рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ await рдХреЛ start рдореЗрдВ рднреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рд╣рдореЗрдВ рдХреЛрдИ рд░реЛрдХ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ instantiate{Streaming} рд╕реЗ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рд╡рд╛рджрд╛ рддрдм рднреА рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╣рд▓/рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ рдЬрдм рд╕реНрдЯрд╛рд░реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ await рдПрдб рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ред

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

@RReverser рдпрд╣ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ new WebAssembly.Instance (рдЬреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛?

рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ @Pauan рд╢реБрд░реБрдЖрдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ!

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

(рдЬреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)?

рд╣рдореНрдо рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ; рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕реЗ рд╢реНрд░рдорд┐рдХреЛрдВ рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдкреАрдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд░реНрдз-рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрднрд░рддреЗ рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдорд╛рдирдХ рдПрдкреАрдЖрдИ рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ start (рдЯреНрд░реИрдкрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ) рдореЗрдВ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЕрднреА рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рдФрд░ рд╣рдо рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреАрдЫреЗ-рд╕рдВрдЧрдд рддрд░реАрдХреЗ рд╕реЗ рдХреБрдЫ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рдЧрдпрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм WASM рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ await рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ JS рдХреЛ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ JS рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ WASM рдореЗрдВ рд╡рд╛рдкрд╕ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╡реИрдз рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ "рдореБрдЦреНрдп рд▓реВрдк" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛ рдЗрдирдкреБрдЯ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реЗ рддреБрд░рдВрдд рд╣рд▓ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рд▓реМрдЯ рд╕рдХрддреЗ рдереЗред

рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЗрд╕реЗ рдЬреЗрдПрд╕ рд╡рд╛рджреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред

@Kangz

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

рдХреНрдпрд╛ рдпрд╣ рд╡реИрдз рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ "рдореБрдЦреНрдп рд▓реВрдк" рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдмрд┐рдирд╛ рдЗрдирдкреБрдЯ рдИрд╡реЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╡реЗ рддреБрд░рдВрдд рд╣рд▓ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдХреЗ рд╡рд╛рдкрд╕ рд▓реМрдЯ рд╕рдХрддреЗ рдереЗред

рд╡рд░реНрддрдорд╛рди рдкрд╛рда рд╢рд╛рдпрдж рдЙрд╕ рдкрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП, рд╣рд╛рдБ, рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, "рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг" рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВ: It is ok to call into the WebAssembly instance while a pause has occurred, and multiple pause/resume events can be in flight at once.

рджреВрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП, рдирд╣реАрдВ - рдЖрдк рдкрд╣рд▓реЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЬреЗрдПрд╕ рдХреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд╛рджрд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдЪреАрдЬреЛрдВ рдХреЛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рд╛рд░рд╛рдВрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

  • рдЬрдм wasm рдкреНрд░реЙрдорд┐рд╕ рдП рдкрд░ рд░реБрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд╛рдкрд╕ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЙрдорд┐рд╕ рдмреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред
  • рдЬрдм рд╡рд╛рджрд╛ A рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рддреЛ Wasm рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордп рдкрд░ рд╣реЛрддрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ JS рдИрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред
  • рд╡рд╛рд╕ рдХреЗ рдмрд╛рдж рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рджреМрдбрд╝рдирд╛ рднреА рдЦрддреНрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдкреНрд░реЙрдорд┐рд╕ рдмреА рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрддрд╛ рд╣реИред

рддреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд╛рджрд╛ рдмреА рдХреЛ рд╡рд╛рджрд╛ рдП рдХреЗ рдмрд╛рдж рд╣рд▓ рдХрд░рдирд╛ рд╣реИред рдЖрдк рдЬреЗрдПрд╕ рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рджрд╛ рдП рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП: рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ Asyncify + рдХреБрдЫ JS рджреНрд╡рд╛рд░рд╛ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

@RReverser , рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗ рд╡рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдпрджрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)ред

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдЯреИрдХ рдкрд░ JS рд╕реЗ рдПрдХ рд╣реА wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдХрдИ рдХреЙрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ await рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреМрди рд╕реА рдХреЙрд▓ рд░реБрдХ рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИ?

рджреВрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП, рдирд╣реАрдВ - рдЖрдк рдкрд╣рд▓реЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рдЬреЗрдПрд╕ рдХреЛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд╛рджрд╛ рд╣рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдкреНрд░рд╢реНрди рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред рдлрд┐рд▓рд╣рд╛рд▓ рд╕реА ++ рдореЗрдВ "рдореЗрди-рд▓реВрдк" рдРрдкреНрд╕ emscripten_set_main_loop рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдлреНрд░реЗрдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд░рди рдХреЗ рдмреАрдЪ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд╡рд╛рдкрд╕ рдорд┐рд▓ рдЬрд╛рдП, рдФрд░ рдЗрдирдкреБрдЯ рдпрд╛ рдЕрдиреНрдп рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рд╛рде, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛ "рдореЗрди-рд▓реВрдк" рдРрдкреНрд╕ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЬреЗрдПрд╕ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддрд╛)

int main() {
  while (true) {
    frame();
    processEvents();
  }
}

// polyfillable with ASYNCIFY!
void processEvents() {
  __builtin_await(EM_ASM(
    new Promise((resolve, reject) => {
      setTimeout(0, () => resolve());
    })
  ))
}

@ рдХрд╛рдВрдЧрдЬрд╝ рдХреЛ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рдБ (рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЖрдкрдХреЗ рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛрдб рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рдХреНрд░рдо рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯреА рд╕реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):

int main() {
  while (true) {
    frame();
    processEvents();
  }
}

// polyfillable with ASYNCIFY!
void processEvents() {
  __builtin_await(EM_ASM_WAITREF(
    return new Promise(resolve => setTimeout(resolve));
  ));
}

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд╣реА рд╕реНрдЯреИрдХ рдкрд░ JS рд╕реЗ рдПрдХ рд╣реА wasm рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдХрдИ рдХреЙрд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреМрди рд╕реА рдХреЙрд▓ рд░реБрдХ рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреА рд╣реИ?

рдЕрдВрддрд░рддрдо рд╡рд╛рд▓рд╛ред рдЕрдЧрд░ рд╡рд╣ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рддреЛ рдмрд╛рдХреА рдХреЛ рд╕рдордиреНрд╡рдпрд┐рдд рдХрд░рдирд╛ рдЬреЗрдПрд╕ рд░реИрдкрд░ рдХрд╛ рдХрд╛рдо рд╣реИред

@ рдХрд╛рдВрдЧрдЬрд╝ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЧрд▓рдд рд╕рдордЭрд╛ рдерд╛ред рд╣рд╛рдВ, рдЬреИрд╕рд╛ рдХрд┐ @RReverser рдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдпрд╣рд╛рдВ рдПрдХ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ!

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ Asyncify рдХреЗ рд╕рд╛рде рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ __builtin_await рдХреЛ emscripten_sleep(0) (рдЬреЛ setTimeout(0) рдХрд░рддрд╛ рд╣реИ) рдкрд░ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдмрджрд▓рдХрд░ рдЖрдЬ Asyncify рдХреЗ рд╕рдорд╛рди рдХреЛрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред .

рдзрдиреНрдпрд╡рд╛рдж, @RReverser , рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрдЬрд╛рдп (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛) рдХреЙрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдЖрджрд┐рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рдЧрднрдЧ рдмрд░рд╛рдмрд░ рд▓рдЧрддрд╛ рд╣реИ: promise-on-await(f) рдФрд░ await-for-promise(p) ред рдкреВрд░реНрд╡ рдХреЙрд▓ f() рд▓реЗрдХрд┐рди, рдпрджрд┐ f() await-for-promise(p) рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирдпрд╛ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ p рд╣рд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрди рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рдпрдВ рд╣рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╛ await-for-promise рдлрд┐рд░ рд╕реЗ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ)ред рдпрджрд┐ рдХрдИ promise-on-await s рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ await-for-promise рдкрд░ рдХреЙрд▓ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рдХрд╛ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдХрд┐рд╕реА await-for-promise рдкрд░ рдХреЙрд▓ рдХрд┐рд╕реА рднреА promise-on-await рдХреЗ рдмрд╛рд╣рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХреБрдЫ рдмреБрд░рд╛ рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рдХрд┐рд╕реА рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ start рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ await )ред

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ?

@RossTate рдпрд╣ рдХрд╛рдлреА рдХрд░реАрдм рд╣реИ, рд╣рд╛рдВ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИред (рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рдХреЗрд╡рд▓ рд▓рдЧрднрдЧ рд╕рдордХрдХреНрд╖, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕реЗ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ wasm/JS рд╕реАрдорд╛ рдкреНрд░рдмрдВрдзрди рдЧреБрдо рд╣реИред)

рдЙрд╕ рдкрд╛рда рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рд╕реЗ рдРрд╕реЗ рдиреЛрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд░рдЦ рд░рд╣рд╛ рд╣реВрдВред (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдордп рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ?)

@RossTate рджрд┐рд▓рдЪрд╕реНрдк... рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рд╣реИ! рдпрд╣ рдХреЙрд▓ рдХреА рдПрд╕рд┐рдВрдХ рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ ( promise-on-await рдХрд┐рд╕реА рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдПрд╕рд┐рдВрдХ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ), рдФрд░ рд╡рд╛рд╕рдо рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдмреАрдЪ рд╕реЗ Wasm рд╣рдЯрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ (рдХреБрдЫ) рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ - рдпрджрд┐ promise-on-await await-for-promise $ рдкрд░ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ Promise рд▓реМрдЯрд╛рддрд╛ рд╣реИред

@kripken рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрд▓рдЧ рдХреНрдпреЛрдВ рд╣реЛрдЧрд╛? рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╡рд╛рд╕рдо/рдЬреЗрдПрд╕ рд╕реАрдорд╛ рдпрд╣рд╛рдВ рдХреНрдпреЛрдВ рдорд╛рдпрдиреЗ рд░рдЦрддреА рд╣реИред

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

@kripken рдареАрдХ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп await-for-promise рдЖрдпрд╛рдд рдХреЛ Wasm рдЖрдВрддрд░рд┐рдХ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдореЗрд░реА рд╕реЛрдЪ рдпрд╣ рдереА рдХрд┐, wasm рдореЗрдВ await рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдРрд╕рд╛ рдореЙрдбреНрдпреВрд▓ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп await-for-promise рдЖрдпрд╛рдд рдХрд░реЗрдЧрд╛ рдФрд░ рдЙрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдЗрд╕реА рддрд░рд╣, рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЬреЗрдПрд╕ рдХреЛрдб рдЙрдиреНрд╣реЗрдВ promise-on-await рдХреЗ рдЕрдВрджрд░ рдмреБрд▓рд╛рдПрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ JS рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ WebAssembly рд╕реНрдЯреИрдХ рд╕рд╣рд┐рдд рд╕рднреА рд╕реНрдЯреИрдХ рдХрд╛рд░реНрдп рдХреЛ рд╕рдВрднрд╛рд▓реЗрдВрдЧреЗред рдпрд╣ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рднреА рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдПрдХ рдЬреЗрдПрд╕ рдХреЙрд▓рдмреИрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рддрдм рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХреНрд▓реЙрдЬ рдХреЗ рдмрдЬрд╛рдп рдмрд╛рд╣рд░реА рдХреЙрд▓ рдкреЙрдЬрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ --- рдпрд╣ рд╕рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдХреЛрдб рдЪреБрдирддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ рдХреЙрд▓ рдХреЛ promise-on-await рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдирд╣реАрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕рдо рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

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

рдУрд╣ рдареАрдХ рд╣реИ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВ - рдореИрдВрдиреЗ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгреА @RossTate рдХреЛ "рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рджреЛрдмрд╛рд░рд╛ рджреЛрд╣рд░рд╛рдПрдВ, рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЗрд╕рдХрд╛ рд╕рд╣реА рдЖрдХрд╛рд░ рд╣реИ", рдФрд░ рдХреЛрдИ рдареЛрд╕ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рд╣реИред

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░, рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рди рдХреЗрд╡рд▓ JS рдлреНрд░реЗрдо рдмрд▓реНрдХрд┐ wasm рдХреЛ рднреА рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╣реЛрд╕реНрдЯ/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдлрд╝реНрд░реЗрдо рднреА рд╣реИрдВред (рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рдЙрд╕ рд╕реАрдорд╛ рддрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред) рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

myList.forEach((item) => {
  .. call something which ends up pausing ..
});

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

for (let i of something) {
  .. call something which ends up pausing ..
}

рдФрд░ рдпрд╣ рд╕рдм async JS рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдЙрддреНрд╕реБрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ JS рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдмрдбрд╝реА рдЪрд░реНрдЪрд╛рдУрдВ рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред

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

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╡реЗ рдЖрджрд┐рдо рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЬреНрдпрд╛рджрд╛ рдорд╛рдпрдиреЗ рд░рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд╕рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЕрднреА рднреА рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдЕрдкрд╡рд╛рдж (рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдкреНрд░рднрд╛рд╡) рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЛрдиреЛрдВ рдХрд╛ рд╕рдВрдпреЛрдЬрди рдереАред рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░, рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рдВрд╡рд░реНрдзрди рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ (рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЕрдиреНрдп рдореЗрдЬрдмрд╛рди рд╡рд╛рд╕рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВрдЧреЗ)ред рдпрд╣ рдЕрднреНрдпрд╛рд╕ рдпрд╣ рдЖрдХрд▓рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ wasm рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡ рдЧреБрдкреНрдд рд░реВрдк рд╕реЗ JS рдореЗрдВ рдирдП рдЖрджрд┐рдо рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕реЗ JS рд▓реЛрдЧ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЖрдпрд╛рддрд┐рдд await : func (param externref) (result externref) рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред

wasm рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЕрднреА рднреА рдХрдИ рдмрд╛рддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдЬреИрд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдЬрдм рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди GC рдорд╛рди рд▓реМрдЯрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░реНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ await рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЙрд▓ рдЦрддреНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдФрд░ рдЗрд╕реА рддрд░рд╣ред

рдЕрднреНрдпрд╛рд╕ рдкрд░ рд▓реМрдЯрддреЗ рд╣реБрдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдХреЗрд╡рд▓ рддрддреИрдпрд╛ рдХреЗ рдвреЗрд░ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рдЕрдЪреНрдЫреЗ рдХрд╛рд░рдг рд╣реИрдВред рдпрд╣ рдореБрдЭреЗ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдХреЗ рд╕реБрдЭрд╛рд╡ рдкрд░ рд╡рд╛рдкрд╕ рд▓рд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдирдП рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред JS API рдореЗрдВ WebAssembly.instantiateAsync(moduleBytes, imports, "name1", "name2") рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП moduleBytes рдореЗрдВ рдХрдИ рдЖрдпрд╛рдд рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдд import "name1" "name2" (func (param externref) (result externref)) рд╣реИред рдлрд┐рд░ instantiateAsync moduleBytes рдХреЗ рдЕрдиреНрдп рдЖрдпрд╛рддреЛрдВ рдХреЛ рдХреЗрд╡рд▓ imports рджреНрд╡рд╛рд░рд╛ рджрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЖрдпрд╛рдд рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ await-for-promise рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ (рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ promise-on-await ) рддрд╛рдХрд┐ рдЬрдм рдЗрд╕реЗ await-for-promise рдХрд╣рд╛ рдЬрд╛рдП рддреЛ рдпрд╣ рдкрд╣рд▓реЗ рдЧрд╛рд░реНрдб рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рддрдХ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рд╛рдордЧреНрд░реА рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ рд╕реНрдЯреИрдХ рдУрд╡рд░ рдПрдХ рдирдП рдкреНрд░реЙрдорд┐рд╕ рдореЗрдВ рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╣реА рдЖрджрд┐рдо рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЕрдм рдкреНрд░рдердо рд╢реНрд░реЗрдгреА рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдкреИрдЯрд░реНрди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ рд╡рд╛рд╕реНрдо рд╕реНрдЯреИрдХ рдХрднреА рднреА рдХрдмреНрдЬрд╛ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рдкреИрдЯрд░реНрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebAssembly рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╡рд┐рдЪрд╛рд░?

@devsnek

рдореИрдВ рдЕрднреА рднреА рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпреЛрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдЕрдкрд╡рд╛рдж (рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдкреНрд░рднрд╛рд╡) рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

рд╡реЗ рдЗрд╕ рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред

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

рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╕рд┐рдВрдХ / рдПрд╕рд┐рдВрдХреНрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрддрдиреА рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рдЬрд┐рддрдиреА рдХрд┐ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдЕрдкрд╡рд╛рдж рдпрд╛ рдХреЛрд░рдЖрдЙрдЯрд┐рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡реЗ рдПрдХ wasm рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рдЖрдВрддрд░рд┐рдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╣рдо рдПрдХ wasm рдореЙрдбреНрдпреВрд▓ рдФрд░ рдмрд╛рд╣рд░ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╕рд┐рдВрдХ / async рд╕рдорд╕реНрдпрд╛ рд╣реЛрддреА рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХреЛрд░ wasm рд╕реНрдкреЗрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирдП рдирд┐рд░реНрджреЗрд╢ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рд▓рдЧрднрдЧ рд╕рднреА рддрд░реНрдХ wasm JS spec рдореЗрдВ рд╣реИрдВред рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рд╡рд╛рджреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

call $get_promise
await
;; use it!

рддрддреИрдпрд╛ рдореЗрдВ рд╡рд╣ рд╕рд╛рджрдЧреА рдЕрдкрдиреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рднреА рд╣реИ рдХрд┐ рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд╛рдн рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

@RossTate

рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЖрдпрд╛рддрд┐рдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ: func (param externref) (рдкрд░рд┐рдгрд╛рдо externref), рддреЛ рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдЙрд╕ рдЕрдиреБрдорд╛рди рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдЧреЛрд▓ рдЪрдХреНрдХрд░ рд▓рдЧрддрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЗрдПрд╕ рдореЗрдВ рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реАрдзреЗ рдХреНрдпреЛрдВ рди рджрд┐рдЦрд╛рдПрдВ? (рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдЧрд▓рддреА рдХреА рд╣реИ рддреЛ рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ!)

wasm рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдЕрднреА рднреА рдХрдИ рдмрд╛рддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдЬреИрд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ

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

рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓ wasm рд╕реНрдкреЗрдХ рдЬреЛрдбрд╝ рдореВрд▓ рд░реВрдк рд╕реЗ await рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ, рдХрд╣реЗрдВ рдХрд┐ рдпрд╣ "рдХреБрдЫ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ That's it for the core wasm spec! рд▓рд┐рдЦрд╛ред рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдХреЛрд░ рд╡рд╛рд╕рдо рд╕реНрдкреЗрдХ рдореЗрдВ рджрд┐рдЦрд╛рдПрдВ рдЬрд╣рд╛рдВ рд╣рдореЗрдВ рдФрд░ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред

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

рдпрд╣ рдореБрдЭреЗ рдореЗрд░реЗ рдкрд╣рд▓реЗ рдХреЗ рд╕реБрдЭрд╛рд╡ рдкрд░ рд╡рд╛рдкрд╕ рд▓рд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдирдП рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд [рдирдпрд╛ рд╡рд┐рдЪрд╛рд░]

рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ Alternative approaches considered рдореЗрдВ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ? рдРрд╕рд╛ рдХреБрдЫ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рдЕрдЪреНрдЫрд╛ рд╣реИред

@kripken рдорд┐рд▓ рдЧрдпрд╛ред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ await рдПрдХ рдмрд╣реБрдд рд╣реА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдмрд╕ рдЗрд╕ рддрд░рд╣ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдЧрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддреГрдд рдХрд░рдХреЗ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ wasm рдХрд▓реНрдкрдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛

рдирд╣реАрдВ! рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдЧреИрд░-рд╡реЗрдм рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рджреЗрдЦреЗрдВред wasm рд╕реНрдкреЗрдХ рдореЗрдВ await рдХреЗ рдмрд┐рдирд╛, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рддрджрд░реНрде рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ: JS рд╡рд╛рддрд╛рд╡рд░рдг рдХреБрдЫ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдЕрдиреНрдп рд╕реНрдерд╛рди "рд╕рд┐рдВрдХреНрд░реЛрдирд╕" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирдП API рдмрдирд╛рддреЗ рд╣реИрдВ, рдЖрджрд┐ред wasm рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╣реЛрдЧрд╛ рдХрдо рд╕реБрд╕рдВрдЧрдд рд╣реЛрдирд╛, рд╡реЗрдм рд╕реЗ рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдПрдХ рддрддреИрдпрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛, рдЖрджрд┐ред

рд▓реЗрдХрд┐рди рд╣рд╛рдВ, рд╣рдореЗрдВ рдХреЛрд░ рд╡рд╛рд╕рдо рд╕реНрдкреЗрдХ рдкрд╛рд░реНрдЯ рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рддрд╛ рд╣реИ? 99% рддрд░реНрдХ рдЬреЗрдПрд╕ рдкрдХреНрд╖ рдкрд░ рд╣реИ (рд▓реЗрдХрд┐рди @RossTate рдЕрд╕рд╣рдордд рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЕрднреА рднреА рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдореИрдВрдиреЗ рдЕрдкрдиреА рдЖрдЦрд┐рд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдареЛрд╕ рдкреНрд░рд╢реНрди рдкреВрдЫреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреА)ред

рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдпрд╣ рд╣реИ рдХрд┐ рдореВрд▓ wasm рд╕реНрдкреЗрдХ рдЬреЛрдбрд╝ рдореВрд▓ рд░реВрдк рд╕реЗ await рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ, рдХрд╣реЗрдВ рдХрд┐ рдпрд╣ "рдХреБрдЫ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ" рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рдпрд╣реА рд╡рд╣ рд╣реИред

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

рдХреНрдпрд╛ рдХреЛрд░ рд╡рд╛рд╕рдо рд╕реНрдкреЗрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд╣рддрд╛ рд╣реИ?

рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдЖрдпрд╛рдд рдХреЛ рджреВрд╕рд░реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд╕рд╛рде рддрддреНрдХрд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ (рдФрд░ рд╡рд╛рд╕рдо рдХреА рд╕рдВрд░рдЪрдирд╛ рд╕рд┐рджреНрдзрд╛рдВрдд) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдЬреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЙрд╕рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзреА рдХреЙрд▓ рд╣реИред рд╡рд╣реА funcref рдЬреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдкрд░ (рдЕрдкреНрд░рддреНрдпрдХреНрд╖) рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

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

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

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдпрджрд┐ f рдХреБрдЫ wasm рдЙрджрд╛рд╣рд░рдг рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдпреВрдирд░реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдореВрд▓реНрдп рдерд╛, рддреЛ рддрддреНрдХрд╛рд▓-рдкреИрд░рд╛рдореАрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ {"some" : {"import" : f}} рд╢рдмреНрджрд╛рд░реНрде рд░реВрдк рд╕реЗ {"some" : {"import" : (x) => f(x)}} рд╕реЗ рднрд┐рдиреНрди рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓ рдкреВрд░реНрд╡ рдореЗрдВ рд╡рд╛рд╕реНрдо рд╕реНрдЯреИрдХ рдХреЗ рднреАрддрд░ рд░рд╣реЗрдЧрд╛ рдЬрдмрдХрд┐ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдХреЙрд▓ рдЬреЗрдПрд╕ рд╕реНрдЯреИрдХ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░реЗрдЧрд╛, рднрд▓реЗ рд╣реА рд╡рд╣ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рд╣реА рдХреНрдпреЛрдВ рди рд╣реЛред рдЕрдм рддрдХ рдЗрди рддрд╛рддреНрдХрд╛рд▓рд┐рдХрддрд╛-рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдордХрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдореИрдВ рдЗрд╕рдореЗрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреЛрдб-рдорд╛рдЗрдЧреНрд░реЗрд╢рди/рднрд╛рд╖рд╛-рдЗрдВрдЯрд░рдСрдк рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдордп рдпрд╣ рдПрдХ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рд╣реЛрдЧрд╛ред

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

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

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд╛рд╕ рдкрдХреНрд╖ рдкрд░ рдЗрддрдирд╛ рд╣рд▓реНрдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ await рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рдЕрд░реНрдердкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╕рдореНрдореЗрд▓рди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдмрддрд╛рддреЗ рд╣реИрдВ! рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ await рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдпрд╣ рдзрд╛рд░рдг рдХрд░рддрд╛ рд╣реИ; рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдпрд╛рддрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдпрд╣реА рд╕рдЪ рд╣реИред рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ await , рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдпрд╣ рд╣реИ рдХрд┐ рд╕рдореНрдореЗрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рд▓реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ import "control" "await" (func (param externref) (result externref)) рдХреНрд▓реЙрдЬ рд╣реИ, рдФрд░ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╣рдореЗрд╢рд╛ рдЙрд╕ рдЖрдпрд╛рдд рдХреЛ рддреБрд░рдВрдд рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ рдЙрдЪрд┐рдд рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рдеред

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

рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рд╡рд╛рд╕ рдкрдХреНрд╖ рдкрд░ рдЗрддрдирд╛ рд╣рд▓реНрдХрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд┐рд░реНрджреЗрд╢ рдПрдХ рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рдХреЗ рд╕рдорд╛рди рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рдорд╛рди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдореВрд▓ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реАрдПрдо рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдирд┐рд░рд╛рд╢ рд╣реЛрддрд╛ рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @binji рдиреЗ рдореВрд▓ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рдЗрд╕рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛)ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рддрд░реНрдХ рдХреЗ рдмрд╛рдж, memory.grow рдпрд╛ atomic.wait рдЬреИрд╕рд╛ рдХреБрдЫ рднреА import "control" "memory_grow" рдпрд╛ import "control" "atomic_wait" рдХреЗ рдЕрдиреБрд░реВрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рд╡реИрд╕реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд╛рди рд╕реНрддрд░ рдХреЗ рдЗрдВрдЯрд░рдСрдк рдФрд░ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЕрд╡рд╕рд░ (рд╡реАрдПрдо рдФрд░ рдЯреВрд▓рд┐рдВрдЧ рджреЛрдиреЛрдВ рддрд░рдл) рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдк рддрд░реНрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ memory.grow рдЕрднреА рднреА рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЬрд╣рд╛рдВ рд╕реНрдореГрддрд┐ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди atomic.wait рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрд░ рдХреЗ рдмрд╛рд╣рд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ await рдХреЗ рд╕рдорд╛рди рд╣реА рд╣реИ, рдЙрд╕ рд╕реНрддрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬрд┐рд╕ рдкрд░ рд╡рд┐рд░рд╛рдо/рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рд▓рд┐рдП рдХрд┐ await рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ atomic.wait рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рджреВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЪреВрдВрдХрд┐ рдЗрд╕реЗ рд╡реАрдПрдо рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рди рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдХреЛ рддрдм рддрдХ рдмреНрд▓реЙрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдореВрд▓реНрдп рдмрджрд▓ рди рдЬрд╛рдПред

@tlively

"рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ" рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпреБрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдЯреАрдХ рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рд╛рдБред рдореИрдВ рдЕрдм рдХреБрдЫ рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╛рда рд╕реБрдЭрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдпрджрд┐ рд╡рд╣ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛:

When an await instruction is executed on a waitref, the host environment is requested to do some work. Typically there would be a natural meaning to what that work is based on what a waitref is on a specific host (in particular, waiting for some form of host event), but from the wasm module's point of view, the semantics of an await are similar to a call to an imported host function, that is: we don't know exactly what the host will do, but at least expect to give it certain types and receive certain results; after the instruction executes, global state (the store) may change; and an exception may be thrown.

The behavior of an await from the host's perspective may be very different, however, from a call to an imported host function, and might involve something like pausing and resuming the wasm module. It is for this reason that this instruction is defined. For the instruction to be usable on a particlar host, the host would need to define the proper behavior.

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ, рдПрдХ рдФрд░ рддреБрд▓рдирд╛ рдЬреЛ рдЗрд╕реЗ рд▓рд┐рдЦрддреЗ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдИ, рд╡рд╣ рд╣реИ рд▓реЛрдб рдФрд░ рд╕реНрдЯреЛрд░ рдкрд░ рд╕рдВрд░реЗрдЦрдг рд╕рдВрдХреЗрддред Wasm рдЕрд╕рдВрд░реЗрдЦрд┐рдд рднрд╛рд░ рдФрд░ рднрдВрдбрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдВрдХреЗрдд wasm рдореЙрдбреНрдпреВрд▓ (рднрд▓реЗ рд╣реА рд╕рдВрдХреЗрдд рдЧрд▓рдд рд╣реЛ) рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрдЬрдмрд╛рди рдХреЗ рд▓рд┐рдП рд╡реЗ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдПрдХ рдмрд╣реБрдд рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ (рдЬреЛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рддреЛ рдпрд╣ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рднрд┐рдиреНрди рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдпреБрдХреНрддрд┐ рдХрд╣рддреА рд╣реИ: The alignment in load and store instructions does not affect the semantics ред

@RossTate

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

рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рд╡рд╣ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╛рдж рдЖрдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрдЭреЗ рд╣рдорд╛рд░реА рдЧрд▓рддрдлрд╣рдореА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдордЭрд╛рддрд╛ рд╣реИред рдореЙрдбреНрдпреВрд▓ => рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ wasm spec atm рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рдореЗрд░реА рдмрд╛рдд рдереАред рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╡реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдпрд╣рд╛рдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЬреЛ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджрд┐рдпрд╛ рдерд╛! рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред

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

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

рдпрджрд┐ рдХреНрд░реЙрд╕-рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХреЗ рдиреАрдЪреЗ await s рдХреЛ рдЯреНрд░реИрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдЯреНрд░реИрд╡рд░реНрд╕рд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддрд╛рдХрд┐ рдпрд╣ рдирд┐рд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдХрд┐ рд╣реЛрд╕реНрдЯ рд╕реЗ рдЖрдордВрддреНрд░рдг рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдЕрдВрддрд┐рдо рдбрдореА рдлреНрд░реЗрдо рд╕реЗ рдкрд╣рд▓реЗ рдХреНрд░реЙрд╕-рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдореМрдЬреВрдж рд╣реИ рдпрд╛ рдирд╣реАрдВред (┬з 4.5.5)ред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рдПрдХ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рдЬрдЯрд┐рд▓рддрд╛ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдореИрдВ рд░реЙрд╕ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдХреНрд░реЙрд╕-рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдЯреНрд░реИрдк рд╣реЛрдирд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрди рд╢рдмреНрджреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬрд╣рд╛рдВ рдкреВрд░реЗ рд╕реНрдЯреИрдХ рдХреЛ рдореЗрдЬрдмрд╛рди рд╕реЗ рдЕрдВрддрд┐рдо рдЖрдордВрддреНрд░рдг рдкрд░ рд╡рд╛рдкрд╕ рдЬрдорд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ await рдХреЛ рд╣реЛрд╕реНрдЯ рдлрдВрдХреНрд╢рди рдЗрдирд╡реЛрдХреЗрд╢рди (┬з 4.4.7.3) рдХреЗ рд╕рдорд╛рди рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, @kripkenред рд▓реЗрдХрд┐рди рд╣реЛрд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдЗрдирд╡реЛрдХреЗрд╢рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреИрд░-рдирд┐рд░реНрдзрд╛рд░рд┐рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрд░ рд╕реНрдкреЗрдХ рдмрд┐рдВрджреБ рд╕реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдирд╛рдо undefined рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЖрдпрд╛рдд рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо (рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП WASI) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрд░ рд╕реНрдкреЗрдХ, рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ, undefined рдирд┐рд░реНрджреЗрд╢ IMO рд╣реЛрдиреЗ рд╕реЗ рд▓рд╛рдн рдирд╣реАрдВ рдЙрдард╛рддрд╛ рд╣реИред

рдЕрд░реНрдерд╛рддреН, рдореЗрдЬрдмрд╛рди рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдЬреЛ waitref рдкреНрд▓рд╕ рдПрдХ await рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд╡рд╣ рдХреЗрд╡рд▓ рдПрдХ рдЕрд╡рд░реБрджреНрдз рдХреЙрд▓ рд╣реИ, рд╣реИ рдирд╛?

рдпрд╣ рдЧреИрд░-рд╡реЗрдм рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХреЛ рдХреНрдпрд╛ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреИрд╕рд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХреЙрд▓ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

@RReverser , рдореИрдВ рдЙрд╕ рдмрд┐рдВрджреБ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдк рдЗрдВрдЯреНрд░рд┐рдирд┐рдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдореЗрдВ рдПрдХ рдирд┐рд░реНрдгрдп рдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдПрдХ рдСрдкрд░реЗрд╢рди рдХреЛ рдмрд┐рдирд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдмрдирд╛рдо рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдлреИрд╕рд▓реЗ рдореЗрдВ рдПрдХ рдХрд╛рд░рдХ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред memory.grow рдЕрдиреНрдп рд╕реНрдореГрддрд┐ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдереНрд░реЗрдб рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ atomic.wait рдЕрдиреНрдп рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдпрд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЗрди рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЛ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд▓реНрдкрдирд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ atomic.wait рдФрд░ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд await рдХреЗ рдмреАрдЪ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдореЙрдбреНрдпреВрд▓ рдХреЛ atomic.wait рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдЬреЗрдВрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╕реНрдкреЗрдВрдб рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

@рдХреНрд░рд┐рдкрдХреЗрди :

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

рд╣рд╛рдВ, рдЗрд╕рд▓рд┐рдП coroutine-ish рдЧреБрдгрдирдЦрдВрдб рдХреЛ рдкрд┐рдЫрд▓реЗ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп-рдЕрдкрд╡рд╛рдж рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЕрднреА рднреА рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдШрдЯрдирд╛рдУрдВ/рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╣реА рдзрд╛рд░рдгрд╛ рд╣реИ, рд▓реЗрдХрд┐рди try рдирд┐рд░реНрджреЗрд╢ рдЫреЛрдЯреЗ рдЖрджрд┐рдо рдореЗрдВ рд╡рд┐рдШрдЯрд┐рдд рд╣реЛ рдЧрдпрд╛ рд╣реИ - рдЬреЛ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХреЛ рд╕рд░рд▓ рдФрд░ рд▓рд╛рдЧрдд рдореЙрдбрд▓ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдЕрдзрд┐рдХ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рднреА рд╣реИред

рдЖрд╢рдп рдЕрднреА рднреА рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рд╕рд╛рд░ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ async рдкреНрд░реЗрд░рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред JS async рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, JS API рд╕рдВрднрд╡рддрдГ рдПрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд await рдИрд╡реЗрдВрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ (JS рд╡рд╛рджреЗ рдХреЛ рдПрдХ рдПрдХреНрд╕рдЯрд░реНрдирд░реЗрдлрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдХрд░) рдХрд┐ рдПрдХ Wasm рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рд▓рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП throw ред рдмреЗрд╢рдХ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рд╡рд░рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╡рд░реНрддрдорд╛рди рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрднреА рднреА рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЕрдкрдирд╛ рд╕рд┐рд░ рд▓рдкреЗрдЯрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред :)

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рдкреБрд░рд╛рдиреЗ Wasm рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ await рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ JS рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ async рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ await рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдХреЗрдВрджреНрд░реАрдп рдмрд╛рдзрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдПрдХрд▓ (async) рдлрд╝рдВрдХреНрд╢рди рдХреЗ _local_ рд░реВрдкрд╛рдВрддрд░рдг рджреНрд╡рд╛рд░рд╛ await рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддрд╛ рд╣реИ!

рдЙрд╕ рдмрд╛рдзрд╛ рдХреЗ рдмрд┐рдирд╛, рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдпрд╛ рддреЛ рдПрдХ _global_ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░рд┐рд╡рд░реНрддрди (рдЬреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ Asyncify рдХрд░рддрд╛ рд╣реИ) рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ рд╣рд░ рдХреЙрд▓ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдорд╣рдВрдЧреА рд╣реЛ рдЬрд╛рдПрдЧреА (рдЖрдк рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдирд╣реАрдВ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдХреЙрд▓ рдкреНрд░рддреАрдХреНрд╖рд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреА рд╣реИрдВ)ред рдпрд╛, рд╕рдорд╛рди рд░реВрдк рд╕реЗ, рдЗрдВрдЬрдиреЛрдВ рдХреЛ рдХрдИ рд╕реНрдЯреИрдХ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА!

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

@ рд░реЛрд╕рдмрд░реНрдЧ

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдкреБрд░рд╛рдиреЗ рд╡рд╛рд╕рдо рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдХреНрдпрд╛ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ JS рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИ, рдЬреЛ рдХреЗрд╡рд▓ async рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

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

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЗрд░рд╛рджрд╛ рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИ! рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ред

рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрдЯреИрдХ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рдХрд▓реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣ рдХреЛрд░рдЖрдЙрдЯ рд╕реНрдЯрд╛рдЗрд▓ рд╕реНрдЯреИрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ:

  • рдХреЗрд╡рд▓ рд╕рдВрдкреВрд░реНрдг wasm рдЙрджрд╛рд╣рд░рдг рд░реБрдХ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрдВрджрд░ рд╕реНрдЯреИрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдХреЛрд░ рд╡рд╛рд╕рдо рд╕реНрдкреЗрдХ рдореЗрдВ рдХреЛрдИ рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬреЗрдПрд╕ рдкрдХреНрд╖ рдкрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рдЕрдм рддрдХ рдХреБрдЫ рд▓реЛрдЧ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рддрд░реАрдХрд╛ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред)
  • Coroutines рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрдЯреИрдХ рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
  • рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕реНрдЯреИрдХ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЛрдИ рдлреЛрд░реНрдХрд┐рдВрдЧ / рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд▓реМрдЯрдирд╛ рдирд╣реАрдВ рд╣реИ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдпрд╣ рд╣реЛрдЧрд╛ рдпрд╛ рдирд╣реАрдВ?)
  • рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди рдореЙрдбрд▓ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реИред рдкреНрд░рддреАрдХреНрд╖рд╛ рдЬреЗрдПрд╕ рдореЗрдВ рдПрдХ рд╡рд╛рджреЗ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдб рдФрд░ рд╡рд┐рд▓рдВрдмрддрд╛ рд╣реИред рддреЛ рдпрд╣ рдареАрдХ рд╣реИ рдЕрдЧрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд░реБрдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рд╢рд╛рдпрдж coroutines рд╕реЗ рдХрдо рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред

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

рд▓рдВрдмреА рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡ рдкрд╛рда рд╕реЗ рд╣реА рдХреБрдЫ рджреЛрд╣рд░рд╛рд╡, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИред рд▓реНрдпреВрд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдм рддрдХ @acfoltzer рдХреА рдЯрд┐рдкреНрдкрдгреА рдЙрддреНрд╕рд╛рд╣рдЬрдирдХ рд╣реИ!

@kripken рдХреА рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХреБрдЫ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдВрдкреВрд░реНрдг wasm рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ рдЬреЛ рд░реБрдХ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд░реБрдХреЗ рд╣реБрдП рд╕реНрдЯреИрдХ рдкрд░ рд╣реЛрд╕реНрдЯ рдлреНрд░реЗрдо рд╕реЗ wasm рдореЗрдВ рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╣реЛрд╕реНрдЯ рдлреНрд░реЗрдо рдХреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд╛рджрд╛ (рдпрд╛ рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдПрдирд╛рд▓реЙрдЧ) рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкреВрд░реНрд╡ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВред

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

@ рд░реЛрд╕рдмрд░реНрдЧ

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЬреЗрдПрд╕ рдПрдХреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЬреЗрдПрд╕ рдПрдХреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╕реНрдЯреИрдХ (рдпрд╛ рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рднреА WebAssembly рдореЙрдбреНрдпреВрд▓) рдореЗрдВ рджреЗрдЦреЗ рдЧрдП рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдпрд╣ рдЗрд╕реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╕реНрдЯреИрдХ (рдпрд╛ рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рднреА WebAssembly рдореЙрдбреНрдпреВрд▓) рдореЗрдВ рджреЗрдЦреЗ рдЧрдП рдХрд┐рд╕реА рднреА рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдареАрдХ рд╣реИ, рдЬреИрд╕реЗ atomic.wait ред

@taralx

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЬреЗрдПрд╕ рдПрдХреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рддреЛ рдпрджрд┐ рдЖрдкрдХрд╛ рд╕рд░рд▓реАрдХрд░рдг рд╡реАрдПрдо рдХреА рдорджрдж рдХрд░реЗрдЧрд╛ рддреЛ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ!

(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдереА, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ рддреЛ Asyncify рдореЗрдВ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдм рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЯреВрд▓рдЪреЗрди рд╕реНрддрд░ред рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ @rossberg рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдЖрдк рд╡рд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдЕрдЧрд░ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ!)

рдПрдХ рдУрд░ рдкреБрди: рдкреНрд░рд╡реЗрд╢ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЧреЗрдо рдЗрдВрдЬрди рдПрдХ рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рддреЗ рд╕рдордп UI рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдП (Asyncify рдЖрдЬ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ)ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдзреНрд╡рдирд┐ рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ _unexpected concurrency_ рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред рдПрдХ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рддреЗ рд╕рдордп рд╕рдВрдкрддреНрддрд┐ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ 2 рдзрд╛рдЧреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рд╡реЗрдмрд╡рд░реНрдХрд░ + SharedArrayBuffer рдкрд░ рдореИрдк рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╡рд╣ рд╡реЗрдмрд╡рд░реНрдХрд░реНрд╕ рд╕реЗ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡реЗрдм рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ)ред рдЕрдиреНрдпрдерд╛ рдПрдЯреЙрдорд┐рдХреНрд╕.рд╡реЗрдЯ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдереНрд░реЗрдб рдореЗрдВ рдПрд╕рд┐рдВрдХ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рдореИрдк рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкреВрд░реНрдг рдЙрдкрдпреЛрдЧ рдХреЗрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣рд▓ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реЗ рд╕реНрдЯреИрдХ (JS/Wasm/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдиреЗрдЯрд┐рд╡) рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдордЬрдмреВрдд рд▓рдЧрддрд╛ рд╣реИред

рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реЗ рд╕реНрдЯреИрдХ (JS/Wasm/рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдиреЗрдЯрд┐рд╡) рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдмрд╣реБрдд рд╕рд░рд▓ рдФрд░ рдордЬрдмреВрдд рд▓рдЧрддрд╛ рд╣реИред

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

@alexp-sssup

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕рдореЗрдХрди рдкреЗрд╢ рдХрд░реЗрдЧрд╛ред

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

@RReverser рдиреЗ рдЬреЛ рдХрд╣рд╛, рдЙрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рди рд╣реА рд╣реЛрдЧрд╛ ред рд▓реЗрдХрд┐рди рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣рд░ рдЬрдЧрд╣ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╣рд╛рдВ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдЧрдИ рд╣реИ, рдкреБрди: рдкреНрд░рд╡реЗрд╢ рдмрд┐рд▓реНрдХреБрд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдкреВрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдШрдЯрдирд╛рдПрдВ рддрдм рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрдм рдХреЛрдИ (рдП) рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реЛред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрди: рдкреНрд░рд╡реЗрд╢ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

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

рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореЙрдбреНрдпреВрд▓ рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ (рд╕рднреА рдПрдХ рд╣реА рдореЗрдореЛрд░реА, рдореНрдпреВрдЯреЗрдмрд▓ рдЧреНрд▓реЛрдмрд▓реНрд╕ рдЗрддреНрдпрд╛рджрд┐ рдЖрдпрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?), рдЗрд╕рд▓рд┐рдП рдПрдХ рдкреБрди: рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╣реЛрдЧреА

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

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

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

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЦреЗрд▓ рдЪреБрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдФрд░ рднреА рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рддрд╛ рд╣реИ, рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд WebAssembly.Global рдпрд╛ WebAssembly.Table рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде, рдпрд╣ рдкрд╛рд░рджрд░реНрд╢реА рдкреЙрд▓реАрдлрд┐рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рддрд╛ рд╣реИред

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

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

рдЦрд░рд╛рдм рдкреНрд░рджрд░реНрд╢рди

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рд╣реИ?

рд╣рд╛рдБ, рдореИрдВ рдЗрд╕реЗ рддрдм рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ рдЬрдм рдореИрдВ рдордВрдЧрд▓рд╡рд╛рд░ (рдпрд╛, рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛, рдмреБрдзрд╡рд╛рд░) рдХреЛ рдХрд╛рдо рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реВрдБ, рдпрд╛ рдПрдХ рдХреЛ рд╡реНрд╣рд┐рдк рдХрд░рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ en рдЦрд╛рд▓реА async JS рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдмреЗрдВрдЪрдорд╛рд░реНрдХ рдмрдирд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╢рд┐рдХреНрд╖рд╛рдкреНрд░рдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЕрд░реЗ рд╣рд╛рдБ, рдореЗрд░рд╛ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрдмреЗрдВрдЪрдорд╛рд░реНрдХ рднреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд╣реЗрдб рддреБрд▓рдирд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рдереЗред

рдорд╛рдЗрдХреНрд░реЛрдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рд╡рд┐рд▓рдВрдмрддрд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рдпрджрд┐ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд 1ms рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗрд╡рд▓ 1/s рджрд░ рдкрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП?

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

рдореИрдВ рдЗрд╕реЗ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╕реБрдЭрд╛ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдПрдХ рдкреЙрд▓реАрдлрд┐рд▓ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдЧреИрд░-рдкреБрдирд░реНрдкреНрд░рд╡реЗрд╢ рд╕рдорд╛рдзрд╛рди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@taralx рдУрд╣, рдареАрдХ рд╣реИ, рдЕрдм рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдзрдиреНрдпрд╡рд╛рджред

@taralx :

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд┐рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЬреЗрдПрд╕ рдПрдХреАрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдмреБрд░рд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдЙрдирдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдХрд╛ рд╡рд┐рд░реЛрдзреА рд╣реЛрдЧрд╛ред

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

@rossberg : рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдХрд┐рд╕реА рднреА Wasm рдореЙрдбреНрдпреВрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИред рд▓реЗрдХрд┐рди рддрдм рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рд╕реАрдорд┐рдд рд╣реИред

рдпрд╣ рдмреБрд░рд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрдИ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдорд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдЙрдирдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдХрд╛ рд╡рд┐рд░реЛрдзреА рд╣реЛрдЧрд╛ред

рдкреЙрд▓реАрдлрд┐рд▓рд┐рдВрдЧ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдпрд╣ рдореЗрд░реА рдмрд╛рдд рдереА - atomic.wait рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

@taralx , atomic.wait рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддрд╛ рд╣реИред рдХреМрди рд╕реА рдореЗрдореЛрд░реА рдФрд░ рд╕реНрдерд╛рди await рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛, рдФрд░ рдХреЛрдИ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреМрди рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдЙрд╕ рдореЗрдореЛрд░реА рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВ?

@rossberg рдХреНрдпрд╛ рдЖрдк рдЙрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ? рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ рдХрд┐ рдЧреИрд░-рдкреБрдирд░реНрд╡рд┐рддреНрддрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

@taralx , рджреЛ рдореЙрдбреНрдпреВрд▓ рдП рдФрд░ рдмреА рд▓реЛрдб рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреБрдЫ рдирд┐рд░реНрдпрд╛рдд рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, A.f рдФрд░ B.g рдХрд╣реЗрдВред рдХреЙрд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рджреЛрдиреЛрдВ await рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЗ рджреЛ рдЯреБрдХрдбрд╝реЗ рдХреНрд░рдорд╢рдГ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рд╡реЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╣рддреЗ рд╣реИрдВред рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдмрд╛рдзрд┐рдд рдпрд╛ рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдХреЛрдИ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдмрджрд▓реЗ рдмрд┐рдирд╛ рдП рдФрд░ рдмреА рдХреЛ рд╕реА рдореЗрдВ рд╡рд┐рд▓рдп рдпрд╛ рд░рд┐рдлреИрдХреНрдЯрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдЪрд╛рдирдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЗ рджреЛрдиреЛрдВ рдЯреБрдХрдбрд╝реЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЫрд┐рдкреЗ рд╣реБрдП рд╕рд╛рдЭрд╛ рд░рд╛рдЬреНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреВрд░реА рдкрд░ рдбрд░рд╛рд╡рдирд╛ рдХрд╛рд░реНрд░рд╡рд╛рдИред

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

рд▓реЗрдХрд┐рди рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВ, рдирд╣реАрдВ? рдЬрдм рднреА рдХреЛрдИ рдореЙрдбреНрдпреВрд▓ рдХреЙрд▓ рдХреЛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдмрд╛рд╣рд░реА рдХреЛрдб рдореЙрдбреНрдпреВрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рджреМрд░рд╛рди рдкреБрди: рдкреНрд░рд╡реЗрд╢ рдХрд┐рд╕реА рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдбрд░рд╛рд╡рдирд╛ рдпрд╛ рд╕рдорд╡рд░реНрддреА рд╣реИред рд╢рд╛рдпрдж рдореБрдЭреЗ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ?

(рд╕рдВрдкрд╛рджрд┐рдд)

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

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

(рдКрдкрд░ рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рд╕рдВрдкрд╛рджрд┐рдд)

рдЕрдм рддрдХ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рд╛рдорд╛рдиреНрдп рд░реБрдЪрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рдЦреБрд▓реЗ рдкреНрд░рд╢реНрди рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рдкрдХреНрд╖ рдкрд░ 100% рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╕рд┐рд░реНрдл 99% - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдкреВрд░реНрд╡ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рдкреНрд░рдореБрдЦ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рд╡рд╣ рд╣реЛрдЧрд╛ рд╡реЗрдм рдХреЗрд╕ рдХреЗ рд▓рд┐рдП рдареАрдХ рд░рд╣реЗрдВ, рддреЛ рд╢рд╛рдпрдж рдпрд╣ рдареАрдХ рд╣реИред рдПрдХ рдФрд░ рдмрдбрд╝рд╛ рдЦреБрд▓рд╛ рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╡реАрдПрдо рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдПред

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

рд╕рд┐рд░реНрдл FYI рдХрд░реЗрдВ рдХреЗ рд▓рд┐рдП
рд╣рдо рдПрдХ рд╕рдорд╛рди рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рд╕реНрдЯреИрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдкреНрд░рд╕реНрддрд╛рд╡ рдПрдХ рд╕рд╛рде рд░рдЦреЗрдВрдЧреЗ
рд╕рдордп рд╕реАрдорд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЖрдкрдХрд╛ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ -
рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?
рдлреНрд░рд╛рдВрд╕рд┐рд╕

рдЧреБрд░реБ, 28 рдордИ, 2020 рдХреЛ рдЕрдкрд░рд╛рд╣реНрди 3:51 рдмрдЬреЗ рдПрд▓реЛрди рдЬрд╝рдХрд╛рдИ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЕрдм рддрдХ рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рдж!

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рд░реБрдЪрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдБ рд╣реИрдВ
рдмрдбрд╝реЗ рдЦреБрд▓реЗ рдкреНрд░рд╢реНрди рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ JS рдХреА рдУрд░ рд╕реЗ 100% рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЙрдЪрд┐рдд
99% - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реНрд╡ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рдкреНрд░рдореБрдЦ рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рджреВрд░ рдХрд░ рджреЗрдЧрд╛
рд╣реИ, рдФрд░ рдпрд╣ рд╡реЗрдм рдХреЗрд╕ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдареАрдХ рд╣реИред
рдПрдХ рдФрд░ рдмрдбрд╝рд╛ рдЦреБрд▓рд╛ рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ VMs рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдПред

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

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/WebAssembly/design/issues/1345#issuecomment-635649331 ,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAQAXUCLZ4CJVQYEUBK23BLRT3TFLANCNFSM4NEJW2PQ
.

>

рдлреНрд░рд╛рдВрд╕рд┐рд╕ рдореИрдХрдХреЗрдмреЗ
рджреБрд░реНрднрд╛рдЧреНрдп

@fgmccabe

рд╣рдореЗрдВ рдЙрд╕ рдкрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЪрд░реНрдЪрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред

рдЖрдо рддреМрд░ рдкрд░, рдЬрдм рддрдХ рдЖрдкрдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдЬреЗрдПрд╕ рдкрдХреНрд╖ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рдмрдирд╛ рджреЗрдЧрд╛ (рдЬреЛ рдЬреЗрдПрд╕ рдкрдХреНрд╖ рдкрд░ 99% -100% рд╣реИ)ред

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

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

рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдм WebAssembly рдХреЗ рд╕рд╛рде рдЗрди рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: JS рдпрд╛ wasmред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХрдИ рдШрдЯрдХреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдареАрдХ рд╡реИрд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рдореИрдВ рдЗрдиреНрд╣реЗрдВ "рджреНрд╡рд┐рдкрдХреНрд╖реАрдп" рдШрдЯрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реВрдВрдЧрд╛ред рдЕрднреА, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрднрдпрд▓рд┐рдВрдЧреА рдШрдЯрдХ рдЬреЗрдПрд╕ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╡рд╛рд╕рдо рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗ рдЬрд╛рдПрдВрдЧреЗред рдЗрд╕ "рдХреЛрдб рдорд╛рдЗрдЧреНрд░реЗрд╢рди" рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдХ рдШрдЯрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдпрд╣ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЦрд┐рд▓реМрдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЪрд╛рд╣реЗ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ "рд▓рд╛рдЧреВ рдХрд░реЗрдВ" рдкреНрд░реЛрдЧреНрд░рд╛рдо рдШрдЯрдХ (f, x) => f(x) JS рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реЛ рдпрд╛ wasm рдореЗрдВ рд╕рдордЧреНрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдПрдХ рдХреЛрдб-рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рд┐рджреНрдзрд╛рдВрдд рд╣реИред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдпрд╛ рддреЛ рдореЙрдбреНрдпреВрд▓-рд░рдЪрдирд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдпрд╛ рдХреЛрдб-рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реИрдВред рдкреВрд░реНрд╡ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм await рдЙрд╕ рд╕реНрдЯреИрдХ рдХреЛ рдХреИрдкреНрдЪрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди wasm рдореЙрдбреНрдпреВрд▓ рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реАрдорд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЙрдбреНрдпреВрд▓ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рд╕рд╛рде рдЬреБрдбрд╝ рдЬрд╛рддреЗ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм await рдЙрд╕ рд╕реНрдЯреИрдХ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛwasm рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реАрдорд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб JS рд╕реЗ wasm рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рддрд╛рдХрд┐ (f, x) => f(x) рд╕реЗ рдХреБрдЫ рд╕рд░рд▓ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд╣реЛ рдЬрд╛рдП JS to wasm рд╕рдордЧреНрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ)ред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпреЗ рдЙрд▓реНрд▓рдВрдШрди рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЗ рдЦрд░рд╛рдм рдбрд┐рдЬрд╛рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдХрд╛рд░рдг рд╣реИрдВред рдмрд▓реНрдХрд┐, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╡рд╣ рд▓рдХреНрд╖реНрдп рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреГрддреНрд░рд┐рдо рд╕реАрдорд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЙрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдордиреЗ рдЖрдПрдЧреА: WebAssembly рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рдЗрди рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рддрд╛ рд╣реИ, рдЕрдХреНрд╕рд░ рдЬреЗрдПрд╕ рдХреЛ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдЬреЗрдПрд╕ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореЗрд░реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЙрд╕ рдореБрджреНрджреЗ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдЧреА (рдЬреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП)ред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореЗрд░реА рдорд╛рдзреНрдпрдорд┐рдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЗрд╡рд▓ JS API рдореЗрдВ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ JS рд╣реИ рдЬреЛ рдпрд╣рд╛рдБ рд╕реАрдорд┐рдд рдХрд╛рд░рдХ рд╣реИ, рдмрдЬрд╛рдп WebAssembly рдХреЛ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ wasm рдХреА рдХреЛрдИ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред

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

рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╣рд╛рдВ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЬрдмрдХрд┐ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд wasm рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗрдм рдкрд░ рдореВрд▓рднреВрдд рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ JS рдФрд░ wasm рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд╕реНрддрд▓рд┐рдЦрд┐рдд JS рд╣реИ рдЬреЛ async рд╣реИ рдФрд░ рдкреЛрд░реНрдЯреЗрдб wasm рдЬреЛ рд╕рд┐рдВрдХ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЙрдирдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдареАрдХ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ wasm рдФрд░ JS рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╣рд╕ рд╣реЛ рд╕рдХрддреА рд╣реИ)ред

рдореИрдВ рдпрд╣рд╛рдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рдордп рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рд╕реАрдзреЗ рдХреБрдЫ рд╡реАрдПрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдкрд╣реБрдВрдЪрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдиреЗ рдЕрдм рддрдХ рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЙрдирдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд░реЛрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

рдЕрдВрдд рдореЗрдВ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рд╕рднреА рдХреЗ рд╕рдордп рдХреА рдмрд░реНрдмрд╛рджреА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдЪрд░реНрдЪрд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд▓реЛрдЧреЛрдВ рдХреЛ рдзрдиреНрдпрд╡рд╛рдж! рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдХреЛрд░рдЯрд╛рдЗрди/рд╕реНрдЯреИрдХ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

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

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

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

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

ghost picture ghost  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

beriberikix picture beriberikix  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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