4 pontos por GN⁺ 2025-04-07 | 1 comentários | Compartilhar no WhatsApp
  • 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

  1. 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
  2. Melhorar as ferramentas de compilação cruzada
    • Simplificar o gerenciamento de versões e a instalação do Swift SDK
  3. Integrar o Component Model
    • Dar suporte para que as especificações mais recentes do WASI também possam ser usadas no Swift
  4. Melhorar a interoperabilidade com outros componentes Wasm
    • O objetivo é tornar a experiência de usar componentes Wasm no Swift equivalente à de C/C++
  5. 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
    1. Um runtime Wasm com suporte a LLDB e ao protocolo GDB
    2. 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
    1. Linkagem dinâmica no estilo Emscripten: não padronizada e dependente de recursos do runtime
    2. 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

 
kandk 2025-04-07

Swift é bom, mas será que o Swift abandonado consegue voltar à vida..