Wasmer 3.0, um kit de ferramentas para construir aplicativos baseados em WebAssembly, está disponível

Este é o terceiro grande lançamento do projeto Wasmer, que desenvolve um tempo de execução para a execução de módulos WebAssembly que podem ser usados ​​para criar aplicativos universais que podem ser executados em diferentes sistemas operacionais, bem como execução em sandbox de código não confiável. O código do projeto é escrito em Rust e distribuído sob a licença MIT.

A capacidade de executar o mesmo aplicativo em diferentes plataformas é fornecida pela compilação do código em um código intermediário WebAssembly de baixo nível que pode ser executado em qualquer sistema operacional ou incorporado a programas em outras linguagens de programação. Programas são contêineres leves que executam pseudocódigo WebAssembly. Esses contêineres não estão vinculados ao sistema operacional e podem incluir código originalmente escrito em qualquer linguagem de programação. O kit de ferramentas Emscripten pode ser usado para compilar para WebAssembly. Para traduzir o WebAssembly no código de máquina da plataforma atual, é possível conectar diferentes backends de compilação (Singlepass, Cranelift, LLVM) e mecanismos (usando JIT ou gerando código de máquina).

Os aplicativos são isolados do sistema principal em um ambiente sandbox e têm acesso apenas à funcionalidade declarada (mecanismo de segurança baseado em capacidade - para ações com cada um dos recursos (arquivos, diretórios, soquetes, chamadas de sistema etc.), o aplicativo deve seja dada a devida autoridade). O controle de acesso e a interação com o sistema são fornecidos por meio da API WASI (WebAssembly System Interface), que fornece interfaces de programação para trabalhar com arquivos, soquetes e outras funções fornecidas pelo sistema operacional.

A plataforma permite alcançar um desempenho de execução de aplicativos próximo ao dos assemblies nativos. Usando o Native Object Engine para um módulo WebAssembly, você pode gerar código nativo ("wasmer compile -native" para gerar arquivos de objeto .so, .dylib e .dll pré-compilados), que requer tempo de execução mínimo para executar, mas retém todos os recursos de isolamento de caixa de areia. É possível fornecer programas pré-compilados com Wasmer embutido. Rust API e Wasm-C-API são oferecidos para criar complementos e complementos.

Para iniciar um contêiner WebAssembly, basta instalar o Wasmer runtime no sistema, que vem sem dependências externas (“curl https://get.wasmer.io -sSfL | sh”), e executar o arquivo necessário (“wasmer test .wasm”). Os programas são distribuídos na forma de módulos WebAssembly comuns, que podem ser gerenciados usando o gerenciador de pacotes WAPM. Wasmer também está disponível como uma biblioteca que pode ser usada para incorporar código WebAssembly em programas Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir e Java.

Principais mudanças no Wasmer 3.0:

  • Adicionado a capacidade de criar arquivos executáveis ​​nativos para qualquer plataforma. O comando "wasmer create-exe" foi completamente redesenhado para converter um arquivo de código intermediário do WebAssembly em executáveis ​​independentes para plataformas Linux, Windows e macOS que podem ser executados sem instalar o próprio Wasmer.
  • Foi fornecida a capacidade de executar pacotes WAPM localizados no diretório wapm.io usando o comando "wasmer run". Por exemplo, executar "wasmer run python/python" fará o download do pacote python do repositório wapm.io e o executará.
  • A API Wasmer Rust foi completamente redesenhada, na qual o estilo de trabalhar com a memória foi alterado e a capacidade de armazenar objetos Wasm com segurança na estrutura Store foi fornecida. É proposta uma nova estrutura MemoryView que permite ler e escrever dados em uma área de memória linear.
  • Um conjunto de componentes wasmer-js foi implementado para executar o Wasmer em um navegador da Web e interagir com ele a partir do JavaScript usando a biblioteca wasm-bindgen. O Wasmer-js é semelhante em funcionalidade aos componentes wasmer-sys projetados para executar o Wasmer em sistemas operacionais regulares.
  • Motores simplificados. Em vez de mecanismos separados para JIT, vinculação dinâmica e estática (Universal, Dylib, StaticLib), um mecanismo comum agora é oferecido e carrega e salva código no qual é controlado no nível de configuração de parâmetro.
  • Para desserializar artefatos, é usada a estrutura rkyv, que fornece operação de cópia zero, ou seja, não exigindo alocação de memória adicional e executando a desserialização usando apenas o buffer fornecido inicialmente. O uso de rkyv aumentou significativamente a velocidade de inicialização.
  • O compilador Singlepass foi aprimorado para oferecer suporte a funções de vários valores, melhorar a confiabilidade e adicionar suporte para quadros de manipulação de exceção.
  • Implementação aprimorada da API WASI (WebAssembly System Interface). Problemas corrigidos na API WASI para trabalhar com o sistema de arquivos. Os tipos internos foram redesenhados usando WAI (WebAssembly Interfaces), o que permitirá que uma série de novos recursos sejam implementados no futuro.

Fonte: opennet.ru

Adicionar um comentário