- A comunidade Swift vem desenvolvendo de forma contínua o suporte a WebAssembly (Wasm) e, com base nisso, propõe uma visão de longo prazo
- WebAssembly é um conjunto de instruções de máquina virtual voltado para portabilidade, segurança e desempenho, podendo ser executado em várias plataformas
- Com suporte a Wasm no Swift, será possível usar Swift em novos ambientes, incluindo o navegador, ampliando seu potencial de uso em aplicações cliente/servidor
Características de segurança e interface de sistema
- O Wasm é vantajoso em termos de segurança porque só pode executar funções explicitamente importadas, sem acesso direto ao sistema
- WASI (WebAssembly System Interface) fornece APIs padronizadas para que o Wasm possa interagir com o sistema operacional hospedeiro
- O Swift funciona no alvo
wasm32-unknown-wasi com base na WASI libc e já pode ser usado por meio de interoperabilidade com C
- O W3C está gerenciando de forma integrada o sistema de tipos do Wasm e o encadeamento entre módulos por meio do Component Model
- Com
wit-tool, é possível gerar .wit a partir de declarações Swift, e o caminho inverso também é suportado
Principais casos de uso
- É possível compilar macros Swift para Wasm e distribuí-las como binários executáveis em qualquer lugar
- É possível virtualizar a execução de plugins do SwiftPM, manifests, macros etc. para reforçar a segurança
- O Wasm pode gerar binários otimizados com compilação JIT ou AOT, o que minimiza a perda de desempenho
- Componentes Swift virtualizados com Wasm podem ser executados sem processo separado, eliminando a sobrecarga de IPC
Objetivos propostos
- Expandir a cobertura de APIs com suporte a WASI na biblioteca padrão do Swift
- É necessário criar um ambiente de CI para automação de testes
- Melhorar as ferramentas de compilação cruzada
- Simplificar o gerenciamento de versões e a instalação do Swift SDK
- Integrar o Component Model
- Dar suporte para que as especificações mais recentes do WASI também possam ser usadas no Swift
- Melhorar a interoperabilidade com outros componentes Wasm
- O objetivo é tornar a experiência de usar componentes Wasm no Swift equivalente à de C/C++
- Melhorar o ambiente de depuração do Swift em Wasm
Pontos relacionados à depuração
- A depuração em Wasm é limitada e não há recursos nativos de introspecção
- Existem duas abordagens principais
- Um runtime Wasm com suporte a LLDB e ao protocolo GDB
- Um depurador embutido no mecanismo Wasm
- Ambientes de navegador e fora do navegador exigem abordagens de depuração diferentes
- Ferramentas como o Chrome DevTools podem aproveitar informações DWARF, mas os metadados do Swift e a avaliação de expressões JIT exigem integração adicional
Multithreading e concorrência
- Atualmente, o Wasm só oferece operações atômicas com consistência sequencial
- A criação de threads depende do ambiente hospedeiro
- Existem duas propostas de threading:
wasi-threads (abordagem existente, suportada por algumas ferramentas e runtimes)
shared-everything-threads (nova proposta, com potencial de se tornar padrão no futuro)
- O Swift oferece suporte a
wasm32-unknown-wasi (single-thread) e wasm32-unknown-wasip1-threads (multithread)
- No momento, como o libdispatch não oferece suporte a wasi-threads, está sendo usado um executor de Swift Concurrency baseado em single-thread
Espaço de endereçamento de 64 bits
- O Wasm usa espaço de endereçamento de 32 bits por padrão
- A proposta de memória de 64 bits (
memory64) está em fase de implementação
- Para que o Swift dê suporte a isso, será necessária cooperação da toolchain WebAssembly ou mudanças na estrutura de metadados do Swift
Bibliotecas compartilhadas
- Existem duas abordagens
- Linkagem dinâmica no estilo Emscripten: não padronizada e dependente de recursos do runtime
- Linkagem estática baseada no Component Model: pode ser usada sem recursos especiais do runtime, mas não permite carregamento em tempo de execução
- Para usar bibliotecas compartilhadas no Swift, é necessário compilar no modo PIC (Position-Independent Code) e seguir uma convenção de linkagem definida
1 comentários
Swift é bom, mas será que o Swift abandonado consegue voltar à vida..