Design: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдвреЗрд░/рдвреЗрд░ рддрдХ рдкрд╣реБрдВрдЪрдирд╛

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

рдХреНрдпрд╛ рдЖрдпрд╛рддрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдХреЙрд▓рд┐рдВрдЧ WASM рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдвреЗрд░ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ?

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

рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдбрдмреНрд▓реНрдпреВрдПрдПрд╕рдПрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдСрд░реНрдереЛрдЧреЛрдирд▓реА рд▓рдЧрд╛рддрд╛рд░ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдХреЙрд▓ рдХреЗ рдмреАрдЪ, рдмрд▓реНрдХрд┐ рдХреЙрд▓ рдХреЗ рднреАрддрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм рд╡реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рджреЗрдЦреЗрдВ https://github.com/ewasm/wasm -рдореАрдЯрд░рд┐рдВрдЧ)ред

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

рдПрдХ WebAssembly рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдвреЗрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдореЗрдореЛрд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдлреНрд▓реИрдЯ рд╡реЗрдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рдЬрдм C++ рдЬреИрд╕реА рднрд╛рд╖рд╛ рдХреЛ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдвреЗрд░ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдбреЗрдЯрд╛ рднреА рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, WebAssembly рдХреЙрд▓ рд╕реНрдЯреИрдХ (рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЙрдирдХреЗ рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдХрд╛ рд╕реНрдЯреИрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ) рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм C++ рдЬреИрд╕реА рднрд╛рд╖рд╛ рдХреЛ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ C++ рд╕реНрдЯреИрдХ рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░ рдпреЗ "рдкрддрд╛-рд▓рд┐рдпрд╛ рдЧрдпрд╛" рд╕реА ++ рдЪрд░ рдФрд░ рдмрдбрд╝реЗ рд╕рд░рдгреА рд╣реЛрддреЗ рд╣реИрдВред

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

рдХреНрдпрд╛ рдЖрдпрд╛рддрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ рдХреЙрд▓рд┐рдВрдЧ WASM рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдвреЗрд░ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рд╣рд╛рдВ, рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ WebAssembly.Memory рд╡рд╕реНрддреБ рд╣реЛрдЧреА, рдФрд░ рдЗрд╕рдХреА buffer рд╕рдВрдкрддреНрддрд┐ рд░реИрдЦрд┐рдХ рд╕реНрдореГрддрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде ArrayBuffer ред

рд╕рдВрдмрдВрдзрд┐рдд, рдХреНрдпрд╛ рдЖрдпрд╛рддрд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдЙрджрд╛рд╣рд░рдг рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

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

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

рдПрдХ WebAssembly рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдвреЗрд░ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдореЗрдореЛрд░реА рд╣реЛрддреА рд╣реИ рдЬреЛ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдПрдХ рдлреНрд▓реИрдЯ рд╡реЗрдХреНрдЯрд░ рд╣реЛрддрд╛ рд╣реИред рдЬрдм C++ рдЬреИрд╕реА рднрд╛рд╖рд╛ рдХреЛ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдвреЗрд░ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдбреЗрдЯрд╛ рднреА рдРрд╕рд╛ рд╣реА рд╣реЛрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, WebAssembly рдХреЙрд▓ рд╕реНрдЯреИрдХ (рдЬрд┐рд╕рдореЗрдВ рдХреЙрд▓ рдХрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЙрдирдХреЗ рд╕реНрдерд╛рдиреАрдп рд▓реЛрдЧреЛрдВ рдХрд╛ рд╕реНрдЯреИрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ) рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм C++ рдЬреИрд╕реА рднрд╛рд╖рд╛ рдХреЛ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ C++ рд╕реНрдЯреИрдХ рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдо рддреМрд░ рдкрд░ рдпреЗ "рдкрддрд╛-рд▓рд┐рдпрд╛ рдЧрдпрд╛" рд╕реА ++ рдЪрд░ рдФрд░ рдмрдбрд╝реЗ рд╕рд░рдгреА рд╣реЛрддреЗ рд╣реИрдВред

рдЖрд╣, рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рддреЛ __heap_base рдпрд╣реА рд╣реИ!

Instance {
  exports: 
   { memory: Memory {},
     __heap_base: 66560,
     __data_end: 1024,
     main: [Function: 2],
     fac: [Function: 3] }
}

рдЖрдкрдХрд╛ рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!

WebAssembly.рд╕реНрдореГрддрд┐ рдХреЛ рдвреЗрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

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

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

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

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

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

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

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