Dostępny jest Wasmer 2.0, zestaw narzędzi do budowania aplikacji opartych na WebAssembly

Projekt Wasmer wydał drugą główną wersję, rozwijającą środowisko wykonawcze do wykonywania modułów WebAssembly, które można wykorzystać do tworzenia uniwersalnych aplikacji, które mogą działać na różnych systemach operacyjnych, a także do uruchamiania niezaufanego kodu w izolacji. Kod projektu napisany jest w języku Rust i jest rozpowszechniany na licencji MIT.

Przenośność osiąga się poprzez kompilację kodu aplikacji do niskopoziomowego kodu pośredniego WebAssembly, który można uruchomić w dowolnym systemie operacyjnym lub osadzić w programach w innych językach programowania. Programy są lekkimi kontenerami, w których uruchamiany jest pseudokod WebAssembly. Kontenery te nie są powiązane z systemem operacyjnym i mogą zawierać kod oryginalnie napisany w dowolnym języku programowania. Do kompilacji do WebAssembly można użyć zestawu narzędzi Emscripten. Aby przetłumaczyć WebAssembly na kod maszynowy bieżącej platformy, obsługuje połączenie różnych backendów kompilacji (Singlepass, Cranelift, LLVM) i silników (przy użyciu JIT lub generowania kodu maszynowego).

Kontrola dostępu i interakcja z systemem odbywa się za pomocą API WASI (WebAssembly System Interface), które udostępnia interfejsy programistyczne do pracy z plikami, gniazdami i innymi funkcjami udostępnianymi przez system operacyjny. Aplikacje są odizolowane od głównego systemu w środowisku sandbox i mają dostęp tylko do zadeklarowanej funkcjonalności (mechanizm bezpieczeństwa oparty na zarządzaniu możliwościami - dla akcji z każdym z zasobów (pliki, katalogi, gniazda, wywołania systemowe itp.), wniosek musi posiadać odpowiednie uprawnienia).

Aby uruchomić kontener WebAssembly, wystarczy zainstalować Wasmer w systemie wykonawczym, który jest dostarczany bez zewnętrznych zależności („curl https://get.wasmer.io -sSfL | sh”) i uruchomić niezbędny plik („wasmer test.wasm” ). Programy są dystrybuowane w postaci zwykłych modułów WebAssembly, którymi można zarządzać za pomocą menedżera pakietów WAPM. Wasmer jest również dostępny jako biblioteka, której można używać do osadzania kodu WebAssembly w programach Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir i Java.

Platforma pozwala na osiągnięcie wydajności wykonywania aplikacji zbliżonej do natywnych zespołów. Używając Native Object Engine dla modułu WebAssembly, możesz wygenerować kod maszynowy („wasmer Compare -native” w celu wygenerowania prekompilowanych plików obiektowych .so, .dylib i .dll), który wymaga minimalnego czasu działania, ale zachowuje całą izolację piaskownicy cechy. Istnieje możliwość dostarczenia prekompilowanych programów z wbudowanym Wasmerem. Do tworzenia dodatków i rozszerzeń oferowane są Rust API i Wasm-C-API.

Znacząca zmiana numeru wersji Wasmera wiąże się z wprowadzeniem niekompatybilnych zmian w wewnętrznym API, które zdaniem twórców nie dotkną 99% użytkowników platformy. Wśród zmian psujących kompatybilność jest także zmiana formatu serializowanych modułów Wasm (moduły serializowane w Wasmer 1.0 nie będą mogły być użyte w Wasmer 2.0). Inne zmiany:

  • Obsługa instrukcji SIMD (Single Manual, Multiple Data), umożliwiająca równoległość operacji na danych. Obszary, w których zastosowanie SIMD może znacznie poprawić wydajność, obejmują uczenie maszynowe, kodowanie i dekodowanie wideo, przetwarzanie obrazu, symulację procesów fizycznych i manipulację grafiką.
  • Obsługa typów referencyjnych, umożliwiająca modułom Wasm dostęp do informacji w innych modułach lub w środowisku bazowym.
  • Dokonano znaczących optymalizacji wydajności. Szybkość działania LLVM z liczbami zmiennoprzecinkowymi została zwiększona o około 50%. Wywołania funkcji zostały znacznie przyspieszone poprzez ograniczenie sytuacji wymagających dostępu do jądra. Wydajność generatora kodu Cranelift została zwiększona o 40%. Skrócony czas deserializacji danych.
    Dostępny jest Wasmer 2.0, zestaw narzędzi do budowania aplikacji opartych na WebAssembly
    Dostępny jest Wasmer 2.0, zestaw narzędzi do budowania aplikacji opartych na WebAssembly
  • Aby dokładniej oddać istotę, zmieniono nazwy silników: JIT → Universal, Native → Dylib (Dynamic Library), Object File → StaticLib (Static Library).

Źródło: opennet.ru

Dodaj komentarz