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

Wprowadzono trzecie główne wydanie projektu Wasmer, które rozwija ś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 wykonywania niezaufanego kodu w izolacji. Kod projektu napisany jest w języku Rust i jest rozpowszechniany na licencji MIT.

Możliwość uruchomienia pojedynczej aplikacji na wielu platformach osiąga się poprzez kompilację kodu do niskopoziomowego kodu pośredniego WebAssembly, który może działać na dowolnym systemie operacyjnym lub być osadzony 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).

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). 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.

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.

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.

Główne zmiany w Wasmer 3.0:

  • Dodano możliwość tworzenia natywnych plików wykonywalnych dla dowolnej platformy. Polecenie „wasmer create-exe” zostało całkowicie przeprojektowane w celu konwersji pliku kodu pośredniego WebAssembly na samodzielne pliki wykonywalne dla platform Linux, Windows i macOS, które można uruchomić bez instalowania samego Wasmera.
  • Możliwe jest uruchomienie pakietów WAPM znajdujących się w katalogu wapm.io za pomocą polecenia „wasmer run”. Na przykład uruchomienie „wasmer run python/python” spowoduje pobranie pakietu Pythona z repozytorium wapm.io i uruchomienie go.
  • API Wasmer Rust zostało całkowicie przeprojektowane, zmieniając styl pracy z pamięcią i zapewniając możliwość bezpiecznego zapisywania obiektów Wasm w strukturze Sklepu. Zaproponowano nową strukturę MemoryView, która umożliwia odczyt i zapis danych w liniowym obszarze pamięci.
  • Zaimplementowano zestaw komponentów wasmer-js umożliwiający uruchomienie Wasmer w przeglądarce internetowej i interakcję z nim za pomocą JavaScript przy użyciu biblioteki wasm-bindgen. Wasmer-js w swoich możliwościach odpowiada komponentom wasmer-sys zaprojektowanym do uruchamiania Wasmera na zwykłych systemach operacyjnych.
  • Silniki zostały uproszczone. Zamiast osobnych silników do JIT, linkowania dynamicznego i statycznego (Universal, Dylib, StaticLib) oferowany jest teraz jeden wspólny silnik, a ładowanie i zapisywanie kodu kontrolowane jest na poziomie ustawiania parametrów.
  • Do deserializacji artefaktów wykorzystywany jest framework rkyv, który zapewnia działanie w trybie zerowej kopii, tj. który nie wymaga dodatkowej alokacji pamięci i wykonuje deserializację tylko przy użyciu początkowo dostarczonego bufora. Zastosowanie rkyv znacznie zwiększyło prędkość uruchamiania.
  • Udoskonalono kompilator jednoprzebiegowy Singlepass, dodając obsługę funkcji wielowartościowych, zwiększoną niezawodność i dodając obsługę ramek obsługujących wyjątki.
  • Ulepszona implementacja interfejsu API WASI (WebAssembly System Interface). Rozwiązano problemy w interfejsie oprogramowania WASI do pracy z systemem plików. Typy wewnętrzne zostały przeprojektowane przy użyciu WAI (interfejsy WebAssembly), co umożliwi w przyszłości szereg nowych funkcji.

Źródło: opennet.ru

Dodaj komentarz