Foi lançada a versão 5.0 do projeto Wasmer, que desenvolve um runtime para execução de módulos WebAssembly, podendo ser usado para criar aplicações versáteis que podem funcionar em diferentes sistemas operacionais. Wasmer também pode ser utilizado para a execução isolada de blocos de código não confiáveis dentro de aplicações comuns. O código do projeto é escrito na linguagem Rust e é distribuído sob a licença MIT.
A capacidade de rodar uma aplicação em diferentes plataformas é realizada através da compilação para um código intermediário de baixo nível WebAssembly, que pode ser executado em qualquer sistema operacional ou incorporado em programas em outras linguagens de programação. Os programas são contêineres leves, onde o pseudocódigo WebAssembly é executado. Esses contêineres não estão atrelados ao sistema operacional e podem incluir código originalmente escrito em qualquer linguagem de programação.
Diferentes backends são oferecidos para a execução do código intermediário WebAssembly ou sua tradução em código de máquina da plataforma de destino:
- Backend baseado no compilador Singlepass, otimizado para uso em blockchains.
- Backend baseado no gerador de código Cranelift, otimizado para uso durante o processo de desenvolvimento.
- Backend baseado no compilador LLVM, otimizado para uso em implementações de produção.
- Backend para execução em navegadores web.
- Backend baseado no motor JavaScript JavascriptCore, otimizado para uso na plataforma macOS.
- Backend baseado no motor JavaScript V8, otimizado para aplicações nas plataformas iOS e Android.
- Backend baseado no interpretador Wasmi, otimizado para blockchains e projetos Rust que não utilizam a biblioteca padrão (nostd).
- Backend baseado no runtime WAMR, otimizado para a plataforma iOS.
As aplicações são isoladas do sistema principal em um ambiente sandbox e têm acesso apenas às funcionalidades declaradas. Para o isolamento, é utilizado um mecanismo baseado no controle de capacidades — para ações com cada um dos recursos (arquivos, diretórios, sockets, chamadas de sistema, etc.), o aplicativo deve receber as devidas permissões. O controle de acesso e a interação com o sistema são garantidos através da API WASI (WebAssembly System Interface), que fornece interfaces de programação para trabalhar com arquivos, sockets e outras funções do sistema.
A plataforma permite alcançar um desempenho na execução de aplicativos próximo ao das compilações nativas. Com o Native Object Engine para o módulo WebAssembly, é possível gerar código de máquina, cuja execução requer um runtime mínimo, mas mantém todas as capacidades de isolamento sandbox. É possível fornecer programas pré-compilados com o Wasmer embutido. Para criação de extensões e complementos, estão disponíveis as APIs Rust e Wasm-C-API.
Para executar um contêiner WebAssembly, basta instalar o runtime Wasmer no sistema, que é fornecido 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. O Wasmer também está disponível na forma de uma biblioteca que pode ser usada para incorporar código WebAssembly em programas nas linguagens Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir e Java.
Novidades principais do Wasmer 5.0:
- Implementada a possibilidade de usar interpretadores WebAssembly.
- Adicionado um backend experimental baseado no interpretador leve Wasmi, permitindo executar código intermediário WebAssembly em ambientes com recursos limitados.
- Adicionado um backend experimental baseado no runtime WebAssembly WAMR (WebAssembly Micro Runtime), otimizado para consumo mínimo de recursos e adequado para dispositivos com pouca memória RAM.
- Adicionado um backend experimental baseado no motor JavaScript v8, usado em navegadores com base no Chromium. A principal vantagem do uso do backend baseado no V8 é a possibilidade de usar o depurador embutido neste motor e ferramentas para desenvolvedores web, além da disponibilidade no V8 de funcionalidades avançadas do WebAssembly, como tratamento de exceções e coleta de lixo.
- Adicionada suporte experimental para a arquitetura Loongarch64 no backend que utiliza LLVM.
- Adicionada suporte para a plataforma iOS, disponível ao usar os backends WAMR, Wasmi e V8.
- Suporte ao compilador Emscripten foi descontinuado.
- Dependências atualizadas, incluindo LLVM 18, gerador de código Cranelift 27 e framework rkyv 0.8.
- Otimização de desempenho realizada. Por exemplo, ao executar operações de desserialização de módulos, observa-se um aumento de desempenho de até 50%.







Fonte: opennet.ru







