Wasmer 2.0, WebAssembly рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдНрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреВрд▓рдХрд┐рдЯ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ

Wasmer рдкреНрд░рдХрд▓реНрдкрд╛рдиреЗ рддреНрдпрд╛рдЪреЗ рджреБрд╕рд░реЗ рдореЛрдареЗ рдкреНрд░рдХрд╛рд╢рди рдЬрд╛рд░реА рдХреЗрд▓реЗ рдЖрд╣реЗ, WebAssembly рдореЙрдбреНрдпреВрд▓реНрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд░рдирдЯрд╛рдЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рд╕рд╛рд░реНрд╡рддреНрд░рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ рдЬреЛ рднрд┐рдиреНрди рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╡рд░ рдЪрд╛рд▓реВ рд╢рдХрддреЛ, рддрд╕реЗрдЪ рдЕрд╡рд┐рд╢реНрд╡рд╛рд╕реВ рдХреЛрдб рдЕрд▓рдЧрд╛рд╡рдордзреНрдпреЗ рдЪрд╛рд▓рд╡реВ рд╢рдХрддреЛ. рдкреНрд░рдХрд▓реНрдк рдХреЛрдб Rust рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ MIT рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.

рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рд╡реЗрдмрдЕрд╕реЗрдВрдмрд▓реА рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдХреЛрдбрдордзреНрдпреЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реВрди рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реА рдЬрд╛рддреЗ, рдЬреЛ рдХреЛрдгрддреНрдпрд╛рд╣реА OS рд╡рд░ рдЪрд╛рд▓реВ рд╢рдХрддреЛ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдВрдордзреАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ рдПрдореНрдмреЗрдб рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗ рд╣рд▓рдХреЗ рдХрдВрдЯреЗрдирд░ рдЖрд╣реЗрдд рдЬреЗ WebAssembly рд╕реНрдпреВрдбреЛрдХреЛрдб рдЪрд╛рд▓рд╡рддрд╛рдд. рд╣реЗ рдХрдВрдЯреЗрдирд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорд╢реА рдЬреЛрдбрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд рдЖрдгрд┐ рдореВрд│рддрдГ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖реЗрдд рд▓рд┐рд╣рд┐рд▓реЗрд▓реЗ рдХреЛрдб рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛рдд. Emscripten рдЯреВрд▓рдХрд┐рдЯ WebAssembly рд╡рд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдК рд╢рдХрддреЗ. рд╡рд░реНрддрдорд╛рди рдкреНрд▓реЕрдЯрдлреЙрд░реНрдордЪреНрдпрд╛ рдорд╢реАрди рдХреЛрдбрдордзреНрдпреЗ WebAssembly рдЪреЗ рднрд╛рд╖рд╛рдВрддрд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреЗ рд╡рд┐рд╡рд┐рдз рд╕рдВрдХрд▓рд┐рдд рдмреЕрдХрдПрдВрдбреНрд╕ (Singlepass, Cranelift, LLVM) рдЖрдгрд┐ рдЗрдВрдЬрд┐рди (JIT рдХрд┐рдВрд╡рд╛ рдорд╢реАрди рдХреЛрдб рдЬрдирд░реЗрд╢рди рд╡рд╛рдкрд░реВрди) рдЪреНрдпрд╛ рдХрдиреЗрдХреНрд╢рдирд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ.

WASI (WebAssembly System Interface) API рд╡рд╛рдкрд░реВрди рдкреНрд░рдгрд╛рд▓реАрд╕рд╣ рдкреНрд░рд╡реЗрд╢ рдирд┐рдпрдВрддреНрд░рдг рдЖрдгрд┐ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ, рдЬреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдорджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕, рд╕реЙрдХреЗрдЯреНрд╕ рдЖрдгрд┐ рдЗрддрд░ рдлрдВрдХреНрд╢рдиреНрд╕рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЛ. рд╕рдБрдбрдмреЙрдХреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рддреАрд▓ рдореБрдЦреНрдп рдкреНрд░рдгрд╛рд▓реАрдкрд╛рд╕реВрди рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рд╡реЗрдЧрд│реЗ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдлрдХреНрдд рдШреЛрд╖рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддреЗрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рддреЛ (рдХреНрд╖рдорддрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдирд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рдпрдВрддреНрд░рдгрд╛ - рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрдирд╛рдВрд╕рд╣ рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА (рдлрд╛рдИрд▓реНрд╕, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛, рд╕реЙрдХреЗрдЯреНрд╕, рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдЗ.), рдЕрд░реНрдЬрд╛рд▓рд╛ рдпреЛрдЧреНрдп рдЕрдзрд┐рдХрд╛рд░ рджрд┐рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд).

WebAssembly рдХрдВрдЯреЗрдирд░ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдлрдХреНрдд рд░рдирдЯрд╛рдЗрдо рд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ Wasmer рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛, рдЬреЗ рдмрд╛рд╣реНрдп рдЕрд╡рд▓рдВрдмрдирд╛рд╢рд┐рд╡рд╛рдп рдпреЗрддреЗ (тАЬcurl https://get.wasmer.io -sSfL | shтАЭ), рдЖрдгрд┐ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓ (тАЬwasmer test.wasmтАЭ) рдЪрд╛рд▓рд╡рд╛. ). рдХрд╛рд░реНрдпрдХреНрд░рдо рдирд┐рдпрдорд┐рдд WebAssembly рдореЙрдбреНрдпреВрд▓реНрд╕рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рд╡рд┐рддрд░реАрдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд, рдЬреЗ WAPM рдкреЕрдХреЗрдЬ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╡рд╛рдкрд░реВрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд. Wasmer рдПрдХ рд▓рд╛рдпрдмреНрд░рд░реА рдореНрд╣рдгреВрди рджреЗрдЦреАрд▓ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ рдЬреНрдпрд╛рдЪрд╛ рдЙрдкрдпреЛрдЧ WebAssembly рдХреЛрдб Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir рдЖрдгрд┐ Java рдкреНрд░реЛрдЧреНрд░рд╛рдореНрд╕рдордзреНрдпреЗ рдПрдореНрдмреЗрдб рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.

рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрдЯрд┐рд╡реНрд╣ рдЕрд╕реЗрдВрдмреНрд▓реАрдЪреНрдпрд╛ рдЬрд╡рд│ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЛ. WebAssembly рдореЙрдбреНрдпреВрд▓рд╕рд╛рдареА рдиреЗрдЯрд┐рд╡реНрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдВрдЬрд┐рди рд╡рд╛рдкрд░реВрди, рддреБрдореНрд╣реА рдорд╢реАрди рдХреЛрдб рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░реВ рд╢рдХрддрд╛ (тАЬwasmer compile -nativeтАЭ precompiled .so, .dylib рдЖрдгрд┐ .dll рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓реНрд╕ рд╡реНрдпреБрддреНрдкрдиреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА), рдЬреНрдпрд╛рд▓рд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХрд┐рдорд╛рди рд░рдирдЯрд╛рдЗрдо рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд░рдВрддреБ рд╕рд░реНрд╡ рд╕рдБрдбрдмреЙрдХреНрд╕ рдЕрд▓рдЧрд╛рд╡ рд░рд╛рдЦреВрди рдареЗрд╡рддреЛ. рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ. рдЕрдВрдЧрднреВрдд Wasmer рд╕рд╣ рдкреВрд░реНрд╡рд╕рдВрдХрд▓рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреБрд░рд╡рдгреЗ рд╢рдХреНрдп рдЖрд╣реЗ. рд░рд╕реНрдЯ API рдЖрдгрд┐ Wasm-C-API рдЕреЕрдб-рдСрди рдЖрдгрд┐ рд╡рд┐рд╕реНрддрд╛рд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдлрд░ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.

Wasmer рдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреА рдХреНрд░рдорд╛рдВрдХрд╛рдордзреНрдпреЗ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдмрджрд▓ рдЕрдВрддрд░реНрдЧрдд API рдордзреНрдпреЗ рд╡рд┐рд╕рдВрдЧрдд рдмрджрд▓рд╛рдВрдЪреНрдпрд╛ рдкрд░рд┐рдЪрдпрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдЬреЗ рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдЪреНрдпрд╛ рдорддреЗ, 99% рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдирд╛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдгрд╛рд░ рдирд╛рд╣реА. рд╕реБрд╕рдВрдЧрддрддрд╛ рдЦрдВрдбрд┐рдд рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рдмрджрд▓рд╛рдВрдордзреНрдпреЗ, рдЕрдиреБрдХреНрд░рдорд┐рдд Wasm рдореЙрдбреНрдпреБрд▓реНрд╕рдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рддреАрд▓ рдмрджрд▓ рджреЗрдЦреАрд▓ рдЖрд╣реЗ (Wasmer 1.0 рдордзреНрдпреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗрд▓реЗрд▓реЗ рдореЙрдбреНрдпреВрд▓ Wasmer 2.0 рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реАрдд). рдЗрддрд░ рдмрджрд▓:

  • SIMD (рд╕рд┐рдВрдЧрд▓ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди, рдорд▓реНрдЯрд┐рдкрд▓ рдбреЗрдЯрд╛) рд╕реВрдЪрдирд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди, рдбреЗрдЯрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреНрдпрд╛ рд╕рдорд╛рдВрддрд░реАрдХрд░рдгрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. рдЬреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдВрдордзреНрдпреЗ SIMD рдЪрд╛ рд╡рд╛рдкрд░ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рдирд╛рдд рд▓рдХреНрд╖рдгреАрдп рд╕реБрдзрд╛рд░рдгрд╛ рдХрд░реВ рд╢рдХрддреЛ рддреНрдпрд╛рдд рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ, рд╡реНрд╣рд┐рдбрд┐рдУ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЖрдгрд┐ рдбреАрдХреЛрдбрд┐рдВрдЧ, рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ, рдлрд┐рдЬрд┐рдХрд▓ рдкреНрд░реЛрд╕реЗрд╕ рд╕рд┐рдореНрдпреБрд▓реЗрд╢рди рдЖрдгрд┐ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдореЕрдирд┐рдкреБрд▓реЗрд╢рди рдпрд╛рдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рд╣реЛрддреЛ.
  • рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╛рдареА рд╕рдорд░реНрдерди, Wasm рдореЙрдбреНрдпреВрд▓реНрд╕рдирд╛ рдЗрддрд░ рдореЙрдбреНрдпреВрд▓реНрд╕рдордзреНрдпреЗ рдХрд┐рдВрд╡рд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдорд╛рд╣рд┐рддреА рдНрдХреНрд╕реЗрд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.
  • рд▓рдХреНрд╖рдгреАрдп рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдСрдкреНрдЯрд┐рдорд╛рдпрдЭреЗрд╢рди рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗрдд. рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдХреНрд░рдорд╛рдВрдХрд╛рдВрд╕рд╣ LLVM рд░рдирдЯрд╛рдЗрдордЪреА рдЧрддреА рдЕрдВрджрд╛рдЬреЗ 50% рдиреЗ рд╡рд╛рдврд╡рд▓реА рдЖрд╣реЗ. рдХрд░реНрдирд▓рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкрд░рд┐рд╕реНрдерд┐рддреА рдХрдореА рдХрд░реВрди рдлрдВрдХреНрд╢рди рдХреЙрд▓реНрд╕ рд▓рдХреНрд╖рдгреАрдпрд░реАрддреНрдпрд╛ рд╡реЗрдЧрд╡рд╛рди рдЭрд╛рд▓реЗ рдЖрд╣реЗрдд. рдХреНрд░реЗрдирд▓рд┐рдлреНрдЯ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди 40% рдиреЗ рд╡рд╛рдврд▓реЗ рдЖрд╣реЗ. рдбреЗрдЯрд╛ рдбрд┐рд╕рд┐рд░рд┐рдпрд▓рд╛рдпрдЭреЗрд╢рди рд╡реЗрд│ рдХрдореА рдХреЗрд▓рд╛.
    Wasmer 2.0, WebAssembly рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдНрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреВрд▓рдХрд┐рдЯ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ
    Wasmer 2.0, WebAssembly рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдНрдкреНрд▓рд┐рдХреЗрд╢рди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЯреВрд▓рдХрд┐рдЯ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ
  • рд╕рд╛рд░ рдЕрдзрд┐рдХ рдЕрдЪреВрдХрдкрдгреЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЗрдВрдЬрд┐рдирдЪреА рдирд╛рд╡реЗ рдмрджрд▓рд▓реА рдЖрд╣реЗрдд: JIT тЖТ рдпреБрдирд┐рд╡реНрд╣рд░реНрд╕рд▓, рдиреЗрдЯрд┐рд╡реНрд╣ тЖТ рдбрд╛рдпрд▓рд┐рдм (рдбрд╛рдпрдиреЕрдорд┐рдХ рд▓рд╛рдпрдмреНрд░рд░реА), рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╛рдЗрд▓ тЖТ рд╕реНрдЯреЕрдЯрд┐рдХрд▓рд┐рдм (рд╕реНрдЯреЕрдЯрд┐рдХ рд▓рд╛рдпрдмреНрд░рд░реА).

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛