Wasmer 2.0, ืขืจื›ืช ื›ืœื™ื ืœื™ืฆื™ืจืช ื™ื™ืฉื•ืžื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ WebAssembly, ื–ืžื™ื ื”

ืคืจื•ื™ืงื˜ Wasmer ืคืจืกื ืืช ื”ืžื”ื“ื•ืจื” ื”ื’ื“ื•ืœื” ื”ืฉื ื™ื™ื” ืฉืœื•, ื•ืคื™ืชื— ื–ืžืŸ ืจื™ืฆื” ืœื‘ื™ืฆื•ืข ืžื•ื“ื•ืœื™ WebAssembly ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื”ื ืœื™ืฆื™ืจืช ื™ื™ืฉื•ืžื™ื ืื•ื ื™ื‘ืจืกืœื™ื™ื ืฉื™ื›ื•ืœื™ื ืœืจื•ืฅ ืขืœ ืžืขืจื›ื•ืช ื”ืคืขืœื” ืฉื•ื ื•ืช, ื›ืžื• ื’ื ืœื”ืคืขืœืช ืงื•ื“ ืœื ืžื”ื™ืžืŸ ื‘ื‘ื™ื“ื•ื“. ืงื•ื“ ื”ืคืจื•ื™ืงื˜ ื›ืชื•ื‘ ื‘-Rust ื•ืžื•ืคืฅ ืชื—ืช ืจื™ืฉื™ื•ืŸ MIT.

ื ื™ื™ื“ื•ืช ืžื•ืฉื’ืช ืขืœ ื™ื“ื™ ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ ืงื•ื“ ื™ื™ืฉื•ื ืœืงื•ื“ ื‘ื™ื ื™ื™ื WebAssembly ื‘ืจืžื” ื ืžื•ื›ื”, ืฉื™ื›ื•ืœ ืœืคืขื•ืœ ื‘ื›ืœ ืžืขืจื›ืช ื”ืคืขืœื” ืื• ืœื”ื™ื•ืช ืžื•ื˜ืžืข ื‘ืชื•ื›ื ื™ื•ืช ื‘ืฉืคื•ืช ืชื›ื ื•ืช ืื—ืจื•ืช. ื”ืชื•ื›ื ื™ื•ืช ื”ืŸ ืžื™ื›ืœื™ื ืงืœื™ื ืฉืžืจื™ืฆื™ื ืคืกืื•ื“ื•ืงื•ื“ WebAssembly. ืงื•ื ื˜ื™ื™ื ืจื™ื ืืœื• ืื™ื ื ืงืฉื•ืจื™ื ืœืžืขืจื›ืช ื”ื”ืคืขืœื” ื•ื™ื›ื•ืœื™ื ืœื›ืœื•ืœ ืงื•ื“ ืฉื ื›ืชื‘ ื‘ืžืงื•ืจ ื‘ื›ืœ ืฉืคืช ืชื›ื ื•ืช. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ืขืจื›ืช ื”ื›ืœื™ื ืฉืœ Emscripten ื›ื“ื™ ืœื”ื“ืจ ืœ-WebAssembly. ื›ื“ื™ ืœืชืจื’ื ืืช WebAssembly ืœืงื•ื“ ืžื›ื•ื ื” ืฉืœ ื”ืคืœื˜ืคื•ืจืžื” ื”ื ื•ื›ื—ื™ืช, ื”ื•ื ืชื•ืžืš ื‘ื—ื™ื‘ื•ืจ ืฉืœ ืจื›ื™ื‘ื™ ืงื•ืžืคื™ืœืฆื™ื” ืฉื•ื ื™ื (Singlepass, Cranelift, LLVM) ื•ืžื ื•ืขื™ื (ื‘ืืžืฆืขื•ืช JIT ืื• ื™ืฆื™ืจืช ืงื•ื“ ืžื›ื•ื ื”).

ื‘ืงืจืช ื’ื™ืฉื” ื•ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืžืขืจื›ืช ื ื™ืชื ื•ืช ื‘ืืžืฆืขื•ืช ื”-API ืฉืœ WASI (WebAssembly System Interface) ื”ืžืกืคืง ืžืžืฉืงื™ ืชื›ื ื•ืช ืœืขื‘ื•ื“ื” ืขื ืงื‘ืฆื™ื, ืฉืงืขื™ื ื•ืคื•ื ืงืฆื™ื•ืช ื ื•ืกืคื•ืช ืฉืžืกืคืงื•ืช ืžืขืจื›ืช ื”ื”ืคืขืœื”. ื™ื™ืฉื•ืžื™ื ืžื‘ื•ื“ื“ื™ื ืžื”ืžืขืจื›ืช ื”ืจืืฉื™ืช ื‘ืกื‘ื™ื‘ืช ืืจื’ื– ื—ื•ืœ ื•ื™ืฉ ืœื”ื ื’ื™ืฉื” ืจืง ืœืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ืžื•ืฆื”ืจืช (ืžื ื’ื ื•ืŸ ืื‘ื˜ื—ื” ื”ืžื‘ื•ืกืก ืขืœ ื ื™ื”ื•ืœ ื™ื›ื•ืœื•ืช - ืœืคืขื•ืœื•ืช ืขื ื›ืœ ืื—ื“ ืžื”ืžืฉืื‘ื™ื (ืงื‘ืฆื™ื, ืกืคืจื™ื•ืช, ืฉืงืขื™ื, ืงืจื™ืื•ืช ืžืขืจื›ืช ื•ื›ื•'), ื™ืฉ ืœืชืช ืœื‘ืงืฉื” ืืช ื”ืกืžื›ื•ื™ื•ืช ื”ืžืชืื™ืžื•ืช).

ื›ื“ื™ ืœื”ืคืขื™ืœ ืงื•ื ื˜ื™ื™ื ืจ 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.

ื”ืคืœื˜ืคื•ืจืžื” ืžืืคืฉืจืช ืœืš ืœื”ืฉื™ื’ ื‘ื™ืฆื•ืขื™ ื‘ื™ืฆื•ืข ื™ื™ืฉื•ืžื™ื ืงืจื•ื‘ื™ื ืœืžื›ืœื•ืœื™ื ืžืงื•ืžื™ื™ื. ื‘ืืžืฆืขื•ืช Native Object Engine ืขื‘ื•ืจ ืžื•ื“ื•ืœ WebAssembly, ืืชื” ื™ื›ื•ืœ ืœื™ืฆื•ืจ ืงื•ื“ ืžื›ื•ื ื” ("wasmer compile -native" ืœื™ืฆื™ืจืช ืงื•ื‘ืฆื™ ืื•ื‘ื™ื™ืงื˜ .so, .dylib ื•-.dll ืžื”ื•ื“ืจื™ื ืžืจืืฉ), ืฉื“ื•ืจืฉ ื–ืžืŸ ืจื™ืฆื” ืžื™ื ื™ืžืœื™ ืœื”ืคืขืœื”, ืืš ืฉื•ืžืจ ืขืœ ื›ืœ ื‘ื™ื“ื•ื“ ืืจื’ื– ื”ื—ื•ืœ ืžืืคื™ื™ื ื™ื. ืืคืฉืจ ืœืกืคืง ืชื•ื›ื ื™ื•ืช ืžื”ื•ื“ืจื•ืช ืžืจืืฉ ืขื Wasmer ืžื•ื‘ื ื™ืช. ื”-Rust API ื•-Wasm-C-API ืžื•ืฆืขื™ื ืœื™ืฆื™ืจืช ื”ืจื—ื‘ื•ืช ื•ื”ืจื—ื‘ื•ืช.

ืฉื™ื ื•ื™ ืžืฉืžืขื•ืชื™ ื‘ืžืกืคืจ ื”ื’ืจืกื” ืฉืœ Wasmer ืงืฉื•ืจ ื‘ื”ื›ื ืกืช ืฉื™ื ื•ื™ื™ื ืœื ืชื•ืืžื™ื ืœ-API ื”ืคื ื™ืžื™, ืฉืœื“ื‘ืจื™ ื”ืžืคืชื—ื™ื ืœื ื™ืฉืคื™ืขื• ืขืœ 99% ืžืžืฉืชืžืฉื™ ื”ืคืœื˜ืคื•ืจืžื”. ื‘ื™ืŸ ื”ืฉื™ื ื•ื™ื™ื ื”ืฉื•ื‘ืจื™ื ืืช ื”ืชืื™ืžื•ืช, ื™ืฉื ื• ื’ื ืฉื™ื ื•ื™ ื‘ืคื•ืจืžื˜ ืฉืœ ืžื•ื“ื•ืœื™ Wasm ื‘ืกื™ื“ืจื” (ืžื•ื“ื•ืœื™ื ืžืกื•ื“ืจื™ื ื‘- Wasmer 1.0 ืœื ื™ื•ื›ืœื• ืœืฉืžืฉ ื‘- Wasmer 2.0). ืฉื™ื ื•ื™ื™ื ื ื•ืกืคื™ื:

  • ืชืžื™ื›ื” ื‘ื”ื•ืจืื•ืช SIMD (Single Instruction, Multiple Data), ื”ืžืืคืฉืจ ื”ืงื‘ื™ืœื” ืฉืœ ืคืขื•ืœื•ืช ื ืชื•ื ื™ื. ืชื—ื•ืžื™ื ืฉื‘ื”ื ื”ืฉื™ืžื•ืฉ ื‘- SIMD ื™ื›ื•ืœ ืœืฉืคืจ ืžืฉืžืขื•ืชื™ืช ืืช ื”ื‘ื™ืฆื•ืขื™ื ื›ื•ืœืœื™ื ืœืžื™ื“ืช ืžื›ื•ื ื”, ืงื™ื“ื•ื“ ื•ืคืขื ื•ื— ื•ื™ื“ืื•, ืขื™ื‘ื•ื“ ืชืžื•ื ื”, ื”ื“ืžื™ื™ืช ืชื”ืœื™ื›ื™ื ืคื™ื–ื™ื™ื ื•ืžื ื™ืคื•ืœืฆื™ื” ื’ืจืคื™ืช.
  • ืชืžื™ื›ื” ื‘ืกื•ื’ื™ ื”ืชื™ื™ื—ืกื•ืช, ื”ืžืืคืฉืจืช ืœืžื•ื“ื•ืœื™ Wasm ืœื’ืฉืช ืœืžื™ื“ืข ื‘ืžื•ื“ื•ืœื™ื ืื—ืจื™ื ืื• ื‘ืกื‘ื™ื‘ื” ื”ื‘ืกื™ืกื™ืช.
  • ื‘ื•ืฆืขื• ืื•ืคื˜ื™ืžื™ื–ืฆื™ื•ืช ืžืฉืžืขื•ืชื™ื•ืช ืฉืœ ื‘ื™ืฆื•ืขื™ื. ืžื”ื™ืจื•ืช ื–ืžืŸ ื”ืจื™ืฆื” ืฉืœ LLVM ืขื ืžืกืคืจื™ ื ืงื•ื“ื” ืฆืคื” ื”ื•ื’ื“ืœื” ื‘ื›-50%. ืงืจื™ืื•ืช ืคื•ื ืงืฆื™ื” ื”ื•ืืฆื• ืžืฉืžืขื•ืชื™ืช ืขืœ ื™ื“ื™ ืฆืžืฆื•ื ืžืฆื‘ื™ื ื”ื“ื•ืจืฉื™ื ื’ื™ืฉื” ืœืงืจื ืœ. ื‘ื™ืฆื•ืขื™ ืžื—ื•ืœืœ ื”ืงื•ื“ ืฉืœ Cranelift ื”ื•ื’ื“ืœื• ื‘-40%. ื–ืžืŸ ื“ื”-ืกื™ื“ืจื™ืืœื™ื–ืฆื™ื” ืฉืœ ื ืชื•ื ื™ื ืžื•ืคื—ืช.
    Wasmer 2.0, ืขืจื›ืช ื›ืœื™ื ืœื™ืฆื™ืจืช ื™ื™ืฉื•ืžื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ WebAssembly, ื–ืžื™ื ื”
    Wasmer 2.0, ืขืจื›ืช ื›ืœื™ื ืœื™ืฆื™ืจืช ื™ื™ืฉื•ืžื™ื ื”ืžื‘ื•ืกืกื™ื ืขืœ WebAssembly, ื–ืžื™ื ื”
  • ื›ื“ื™ ืœืฉืงืฃ ื‘ืฆื•ืจื” ืžื“ื•ื™ืงืช ื™ื•ืชืจ ืืช ื”ืžื”ื•ืช, ืฉืžื•ืช ื”ืžื ื•ืขื™ื ืฉื•ื ื•: JIT โ†’ Universal, Native โ†’ Dylib (ืกืคืจื™ื™ื” ื“ื™ื ืžื™ืช), ืงื•ื‘ืฅ ืื•ื‘ื™ื™ืงื˜ โ†’ StaticLib (ืกืคืจื™ื™ื” ืกื˜ื˜ื™ืช).

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”