Wasmer 2.0, WebAssembly-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЯреБрд▓рдХрд┐рдЯ, рдЙрдкрд▓рдмреНрдз рдЫ

Wasmer рдкрд░рд┐рдпреЛрдЬрдирд╛рд▓реЗ рдпрд╕рдХреЛ рджреЛрд╕реНрд░реЛ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдЬрд╛рд░реА рдЧрд░реЗрдХреЛ рдЫ, WebAssembly рдореЛрдбреНрдпреБрд▓рд╣рд░реВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд░рдирдЯрд╛рдЗрдо рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджреИ рдЬреБрди рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рдЬреБрди рд╡рд┐рднрд┐рдиреНрди рдЕрдкрд░реЗрдЯрд┐рдЩ рд╕рд┐рд╕реНрдЯрдорд╣рд░реВрдорд╛ рдЪрд▓реНрди рд╕рдХреНрдЫ, рд╕рд╛рдереИ рдЕрд▓рдЧрд╛рд╡рдорд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреЛрдб рдЪрд▓рд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб Rust рдорд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫ рд░ MIT рд▓рд╛рдЗрд╕реЗрдиреНрд╕ рдЕрдиреНрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд рдЫред

рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХрдо-рд╕реНрддрд░ WebAssembly рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдбрдорд╛ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдХреЛрдб рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реЗрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди рдХреБрдиреИ рдкрдирд┐ 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 рд╡рд╕реНрддреБ рдлрд╛рдЗрд▓рд╣рд░реВ) рдЙрддреНрдкрдиреНрди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдЬрд╕рд▓рд╛рдИ рдЪрд▓рд╛рдЙрди рдиреНрдпреВрдирддрдо рд░рдирдЯрд╛рдЗрдо рдЪрд╛рд╣рд┐рдиреНрдЫ, рддрд░ рд╕рдмреИ рд╕реНрдпрд╛рдиреНрдбрдмрдХреНрд╕ рдЕрд▓рдЧрд╛рд╡ рдХрд╛рдпрдо рд░рд╛рдЦреНрдЫред рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реБред рдмрд┐рд▓реНрдЯ-рдЗрди рд╡рд╛рд╕реНрдорд░рдХреЛ рд╕рд╛рде рдкреВрд░реНрд╡рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░рд┐рдПрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВ рдЖрдкреВрд░реНрддрд┐ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред Rust API рд░ Wasm-C-API рдПрдб-рдЕрдирд╣рд░реВ рд░ рд╡рд┐рд╕реНрддрд╛рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкреНрд░рд╕реНрддрд╛рд╡ рдЧрд░рд┐рдПрдХреЛ рдЫред

Wasmer рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдВрдЦреНрдпрд╛ рдорд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдЖрдиреНрддрд░рд┐рдХ API рдорд╛ рдЕрд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдкрд░рд┐рдЪрдп рд╕рдВрдЧ рд╕рдореНрдмрдиреНрдзрд┐рдд рдЫ, рдЬреЛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реБ рдХреЛ рдЕрдиреБрд╕рд╛рд░, рдкреНрд▓реЗрдЯрдлрд░реНрдо рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реБ рдХреЛ 99% рд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрдиред рдЕрдиреБрдХреВрд▓рддрд╛ рддреЛрдбреНрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдордзреНрдпреЗ, рдХреНрд░рдордмрджреНрдз Wasm рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рдврд╛рдБрдЪрд╛рдорд╛ рдкрдирд┐ рдкрд░рд┐рд╡рд░реНрддрди рдЫ (Wasmer 1.0 рдорд╛ рдХреНрд░рдордмрджреНрдз рдореЛрдбреНрдпреБрд▓рд╣рд░реВ Wasmer 2.0 рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫреИрди)ред рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ:

  • SIMD (рдПрдХрд▓ рдирд┐рд░реНрджреЗрд╢рди, рдмрд╣реБ рдбреЗрдЯрд╛) рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди, рдбреЗрдЯрд╛ рд╕рдЮреНрдЪрд╛рд▓рдирд╣рд░реВрдХреЛ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдЕрдиреБрдорддрд┐ рджрд┐рдБрджреИред SIMD рдХреЛ рдкреНрд░рдпреЛрдЧрд▓реЗ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрдирдорд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╕реБрдзрд╛рд░ рдЧрд░реНрди рд╕рдХреНрдиреЗ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдорд╛ рдореЗрд╕рд┐рди рд▓рд░реНрдирд┐рдЩ, рднрд┐рдбрд┐рдпреЛ рдЗрдиреНрдХреЛрдбрд┐рдЩ рд░ рдбрд┐рдХреЛрдбрд┐рдЩ, рдЫрд╡рд┐ рдкреНрд░рд╢реЛрдзрди, рднреМрддрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд┐рдореБрд▓реЗрд╢рди, рд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╣реЗрд░рдлреЗрд░ рд╕рдорд╛рд╡реЗрд╢ рдЫрдиреНред
  • рд╕рдиреНрджрд░реНрдн рдкреНрд░рдХрд╛рд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди, Wasm рдореЛрдбреНрдпреБрд▓рд╣рд░реВрд▓рд╛рдИ рдЕрдиреНрдп рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдорд╛ рд╡рд╛ рдЕрдиреНрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкрд╣реБрдБрдЪ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдБрджреИред
  • рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдЕрдиреБрдХреВрд▓рдирд╣рд░реВ рдмрдирд╛рдЗрдПрдХрд╛ рдЫрдиреНред рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЛрдЗрдиреНрдЯ рдирдореНрдмрд░рд╣рд░реВрдХреЛ рд╕рд╛рде LLVM рд░рдирдЯрд╛рдЗрдордХреЛ рдЧрддрд┐ рд▓рдЧрднрдЧ 50% рджреНрд╡рд╛рд░рд╛ рдмрдврд╛рдЗрдПрдХреЛ рдЫред рдХрд░реНрдиреЗрд▓рдорд╛ рдкрд╣реБрдБрдЪ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрд▓рд╛рдИ рдШрдЯрд╛рдПрд░ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓рд╣рд░реВрд▓рд╛рдИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░реВрдкрдорд╛ рджреНрд░реБрдд рдЧрд░рд┐рдПрдХреЛ рдЫред рдХреНрд░реЗрдирд▓рд┐рдлреНрдЯ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдкреНрд░рджрд░реНрд╢рди 40% рджреНрд╡рд╛рд░рд╛ рдмрдврд╛рдЗрдПрдХреЛ рдЫред рдбреЗрдЯрд╛ deserialization рд╕рдордп рдШрдЯреНрдпреЛред
    Wasmer 2.0, WebAssembly-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЯреБрд▓рдХрд┐рдЯ, рдЙрдкрд▓рдмреНрдз рдЫ
    Wasmer 2.0, WebAssembly-рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдЯреБрд▓рдХрд┐рдЯ, рдЙрдкрд▓рдмреНрдз рдЫ
  • рд╕рд╛рд░рд▓рд╛рдИ рдЕрдЭ рд╕рд╣реА рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрди, рдЗрдиреНрдЬрд┐рдирд╣рд░реВрдХреЛ рдирд╛рдорд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдПрдХреЛ рдЫ: JIT тЖТ рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА, рдиреЗрдЯрд┐рдн тЖТ Dylib (рдЧрддрд┐рд╢реАрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп), рд╡рд╕реНрддреБ рдлрд╛рдЗрд▓ тЖТ StaticLib (рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп)ред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди