4 pontos por GN⁺ 2023-09-06 | 1 comentários | Compartilhar no WhatsApp
  • Watlings é um projeto prático para aprender WebAssembly Text Format corrigindo vários pequenos programas
  • Cada exercício é concluído seguindo as instruções no diretório exercises, e as respostas são testadas com npm start 001_hello
  • Para conferir a solução, use npm run show 001_hello; para aplicar a solução diretamente ao exercício, use o comando npm run solve 001_hello
  • A compilação e os testes usam Node 23+ e wasm-tools, com o script chamando wasm-tools parse internamente
  • Os exercícios a partir do número 015 usam recursos mais novos do WebAssembly, como exception handling e GC types, e exigem a flag --experimental-wasm-exnref, disponível apenas no Node.js 23 ou superior
  • Há uma versão web que pode ser executada no navegador, e é recomendado usar VSCode com a extensão wat-lsp como editor
  • A abordagem de aprendizado é centrada em escrever diretamente, apresentando tarefas e contexto por meio de comentários em cada arquivo, reduzindo explicações ao mínimo e promovendo exposição repetida à sintaxe em diferentes contextos
  • Como referências para a estrutura do projeto, são citados rustlings e Ziglings

1 comentários

 
GN⁺ 2023-09-06
Opiniões do Hacker News
  • Vejo isso com frequência por aí, mas o que falta no WASM no navegador não é apenas acesso ao DOM, e sim praticamente todas as APIs Web, incluindo fetch e XMLHttpRequest
    A lista de APIs Web que o navegador oferece, mas que o WASM não oferece, está aqui; o DOM é só uma delas: https://developer.mozilla.org/en-US/docs/Web/API
    Ainda assim, quando o GC for finalizado e tiver suporte nos navegadores, talvez seja possível usar essas interfaces. Dizem que, com suporte a GC, código WebAssembly poderá referenciar e acessar JavaScript, o DOM e objetos definidos em WebIDL comum
    Veja o último parágrafo: https://webassembly.org/docs/web/

  • Parece muito parecido com o modelo do Exercism. O Exercism também tem um curso de WASM gratuito cheio de pequenos exercícios: https://exercism.org/tracks/wasm
    Fico curioso se o autor considerou contribuir para esse curso ou trabalhar junto com eles. Assim poderia alcançar um público maior e também aproveitar as ferramentas existentes do Exercism

    • Gosto muito do Exercism, mas o modelo de exercícios deles é bem mais aberto, com blocos muito maiores e relativamente menos didático
      É um bom modelo em certos contextos, mas o formato deste repositório está mais próximo de rustlings ou ziglings, em que se aprende sintaxe e recursos com exemplos de código
      O módulo de Wasm do Exercism não está exatamente “quebrado”, então não sei se minhas contribuições seriam bem-vindas
    • O que não gosto no Exercism é que, fora as linguagens populares, os exercícios em geral não são muito estruturados
      Em outras palavras, parecem mais um conjunto de problemas no estilo LeetCode ordenados por dificuldade
      Um curso de verdade deveria organizar os exercícios por recursos da linguagem. O Exercism já criou uma ótima interface para isso, mas ela não é usada na maioria das linguagens: https://exercism.org/tracks/csharp/concepts
  • Uma das minhas formas favoritas de aprender uma nova linguagem ou framework são os koans, e isso me lembrou deles: https://github.com/ahmdrefat/awesome-koans/blob/master/koans...
    A progressão suave de recursos básicos para avançados, junto com o fluxo estilo TDD de ver um teste falhar, entender o motivo e depois corrigir, combina bem com o aprendizado. Também dá aquela dose de dopamina do momento “ahá!”

    • Parece uma boa forma de aprender uma linguagem sozinho. Pena que Rust ficou de fora; alguém teria um link para recomendar?
  • Para experimentar recursos como GC no WASM, é melhor usar o wasm-opt do Binaryen em vez do WABT. O wasm-opt dá suporte a muito mais extensões do WASM

  • Bem legal
    Não mexi profundamente com WASM diretamente, mas pretendo testar este guia, e acho que, depois de alguns anos, ele já trouxe grandes ganhos para o desenvolvimento Web
    Não é o “assassino do JavaScript” que alguns esperavam, mas esse nunca foi o objetivo. Em vez disso, ele se integrou muito bem ao ecossistema existente para otimizar casos de uso já existentes e também viabilizar novos casos quando há necessidade de computação pesada
    É um ganho líquido para todos os desenvolvedores Web. Temos bibliotecas mais rápidas, ferramentas de desenvolvimento impressionantes e binários Node mais portáveis

    • Tenho acompanhado WASM de longe, e entendo que o motivo de ele não ser um assassino do JS é que não consegue acessar diretamente o DOM nem a maioria das APIs do DOM
      Fico curioso se há outros motivos que eu esteja deixando passar
  • É bom ver a adoção do WebAssembly continuar avançando. A Microsoft costuma aparecer pouco por aqui, mas, se você tem interesse em WASM, recomendo muito experimentar o Blazor WebAssembly
    É um framework muito poderoso que permite usar C#, a maior parte das bibliotecas .NET e até pacotes NuGet no navegador como WASM compilado

    • Quando você diz “a maior parte dos pacotes NuGet”, quais são as limitações?
      Se for um pacote que precisa conseguir ler arquivos do disco, ele simplesmente falha de cara, ou a interface de leitura de arquivos repassa a operação para algo como renderização do lado do servidor?
    • Pelo que li, parece ter o mesmo problema de compilar Go para WASM. O payload é grande e, mesmo depois de comprimido, costuma ter vários MB
  • Projeto ótimo
    Mantenho um repositório um pouco relacionado aqui: https://github.com/eliben/wasm-wat-samples/

    • Parece realmente útil. Eu gostaria de ter conhecido isso quando estava aprendendo wat pela primeira vez; deve servir como uma ótima referência
  • Tentei usar WASM, mas tive problemas para expor uma conexão com banco de dados SQLite que eu queria acessar localmente
    Fico curioso se alguém já fez algo parecido ou conhece bons materiais sobre isso

  • É realmente interessante que WebAssembly pareça uma linguagem de verdade que dá para escrever à mão até certo ponto
    Acho que isso reduz bastante a barreira de entrada para usá-lo como alvo

  • À medida que WebAssembly se torna a linguagem comum de vários ecossistemas, vale cada vez mais investir tempo para entender bem como ele funciona