Design: рд╣рдореЗрдВ рдЧреЛрдВрдж рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдм рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдЕрдкреНрд░реИрд▓ 2018  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: WebAssembly/design

рдореИрдВ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реВрдВред

рдПрдХ рд╣рдореЗрдВ рдХреБрдЫ рдЧреЛрдВрдж рдХреЛрдб рдЪрд╛рд╣рд┐рдП:

int addThree(uint8_t *buf, int len) {
  uint8_t *item;
  uint8_t *end = buf + len;

  for (item = buf; item<end; item++) {
    *item += 3;
  }

  return 0;
}

рд▓реЗрдХрд┐рди, рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ .wasm рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

int adder (int a, int b) {
    return a + b;
}

рддреЛ, рдЧреЛрдВрдж рдХреЛрдб рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ? рдореБрдЭреЗ рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рдорд┐рд▓реЗред

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

рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЧреЛрдВрдж рдХреЛрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдбрд░ рд╣реИ рдЬреЛ рдПрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯрд┐рдкреНрдкрдгреА рдХрд╣рддреА рд╣реИ: JS рдФрд░ C++ рдбреЗрдЯрд╛ рдЕрднреНрдпрд╛рд╡реЗрджрди (рдЬреИрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕), рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднреНрдпрд╛рд╡реЗрджрди (рдпрд╛рдиреА C++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП JS рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛) рдХреЗ рдмреАрдЪ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рднреА рдмрдирд╛рддрд╛ рд╣реИред

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

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

рдЕрдВрддрддрдГ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдЧреЛрдВрдж рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдХрд┐рд╕ рдХреНрд░реЙрд╕-рдмрд╛рдЙрдВрдбреНрд░реА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (JS рд╕реЗ C++ рдореЗрдВ рдФрд░ C++ рд╕реЗ JS рдореЗрдВ)ред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ WebAssembly рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдПрдХ рдмрдЧ рдХреЗ рдмрдЬрд╛рдп Emscripten рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИред

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

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

рд▓реЗрдХрд┐рди, рдпрд╣ рдореЗрд░реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред рдХреБрдЫ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рд╕реЗ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕рдордЭрд╛рддрд╛ рд╣реИ:

рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдореЗрдВ, рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде wasm рдФрд░ GC рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣рд╛рдБ рдпрд╣реА рдорддрд▓рдм рд╣реИ?
рдЕрдиреНрдпрдерд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрд╕ рдЧреЛрдВрдж рдХреЛрдб рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдЫреЛрдЯреА рдпрд╛ рдордзреНрдп рдЕрд╡рдзрд┐ рдореЗрдВ рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реА/рд╕реА++ рдЪреАрдЬреЛрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЦреЛрд▓ рдмрдирд╛рдиреЗ рдореЗрдВ рдмрд╣реБрдд рдХрд╛рдо рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЬреЗрдПрд╕ рдЪреАрдЬрд╝ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреНрд▓реВ рдХреЛрдб рдореЗрдВ C рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ JS рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред C++ рд╕реНрддрд░ рдкрд░, JS рдореЗрдВ C++ рдХреНрд▓рд╛рд╕ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдФрд░ JS рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рд╣реИрдХрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, JS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ wasm рд╕реЗ рд╡реЗрдм API рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреНрд▓реВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдФрд░ рджреВрд╕рд░реЗ:

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

рдЬрдм рдореИрдВ рдХреБрдЫ рд╕рд░рд▓ рд╕реА/рд╕реА ++ рдХреЛрдб рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЗрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ wasm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдФрд░ export.xxxFn() ред

int adder (int a, int b) {
    return a + b;
}

рдФрд░ рдЬрдм рдореИрдВ рдмрдлрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЧреЛрдВрдж рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

# C/C++
int addThree(uint8_t *buf, int len) {
  uint8_t *item;
  uint8_t *end = buf + len;

  for (item = buf; item<end; item++) {
    *item += 3;
  }

  return 0;
}

# deal with buffer in JS
...
let dataHeap = new Uint8Array(Module.HEAPU8.buffer, dataPtr, nDataBytes);
dataHeap.set(new Uint8Array(buffer_pcm.buffer));
...

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

рдКрдкрд░ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдЧреЛрдВрдж рдХреЛрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЛрдбрд░ рд╣реИ рдЬреЛ рдПрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЯрд┐рдкреНрдкрдгреА рдХрд╣рддреА рд╣реИ: JS рдФрд░ C++ рдбреЗрдЯрд╛ рдЕрднреНрдпрд╛рд╡реЗрджрди (рдЬреИрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕), рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднреНрдпрд╛рд╡реЗрджрди (рдпрд╛рдиреА C++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП JS рдкреНрд░реЙрдХреНрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛) рдХреЗ рдмреАрдЪ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рднреА рдмрдирд╛рддрд╛ рд╣реИред

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

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

рдЕрдВрддрддрдГ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрд╕ рдЧреЛрдВрдж рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдХрд┐рд╕ рдХреНрд░реЙрд╕-рдмрд╛рдЙрдВрдбреНрд░реА рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ (JS рд╕реЗ C++ рдореЗрдВ рдФрд░ C++ рд╕реЗ JS рдореЗрдВ)ред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ WebAssembly рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рдПрдХ рдмрдЧ рдХреЗ рдмрдЬрд╛рдп Emscripten рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИред

рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж

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

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

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

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

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

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

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