A arte do WebAssembly

Aleksandr Shitik
Aleksandr Shitik

Escrevo meus próprios posts e livros, e faço resenhas de filmes e livros. Especialista em cosmologia e astronomia, TI, produtividade e planejamento.

A arte do WebAssembly
Rick Battagline
Gêneros: Programação
Ano de publicação: 2022
Ano de leitura: 2025
Minha avaliação: Normal
Número de leituras: 1
Total de páginas: 312
Resumo (páginas): 14
Idioma original da publicação: Inglês
Traduções para outros idiomas: Russo

Descrição geral

Um livro de 312 páginas composto por 11 capítulos. Além do texto, contém uma grande quantidade de código e várias ilustrações explicativas que esclarecem exemplos específicos. O nível de leitura é avançado. Ao final de cada capítulo, há um resumo conciso.

Visão rápida

Os dois primeiros capítulos funcionam como uma introdução à tecnologia. O autor explica a necessidade do WebAssembly, onde ele é empregado e demonstra formas de interagir com ele. É apresentado o formato textual do WebAssembly (WAT), e o primeiro programa — Olá, mundo! — é analisado em detalhes. O WAT é usado durante quase toda a leitura do livro.

O próximo capítulo aborda funções e integração mais profunda com o JavaScript. São explorados os tipos de dados, o uso de variáveis (globais e locais), estruturas condicionais (if/else), laços e desvios. Alguns desses tópicos já são mencionados levemente no segundo capítulo.

Em seguida, vem um capítulo essencialmente teórico sobre manipulação de números. Se você já trabalhou com representações em binário direto, complemento de um e complemento de dois, ou com operações bit a bit (deslocamentos, máscaras, XOR), esse capítulo trará uma sensação de nostalgia bem-vinda.

Depois, um capítulo dedicado às cadeias de caracteres: são abordadas as codificações ASCII e Unicode, o armazenamento de strings na memória linear e outros detalhes relacionados.

A seguir, um capítulo mais técnico que aprofunda o uso da memória linear. Com base nela, é desenvolvido um exemplo interessante — um programa que detecta colisões entre objetos. Esse exemplo é depois aprimorado e expandido.

Em seguida, vários capítulos focam na criação de uma mini aplicação web completa. Um deles trata da configuração de um servidor Node.js e da interação com o DOM; outro explora o uso do Canvas.

Depois disso, o autor explica como depurar código WebAssembly, encontrar e corrigir erros e identificar funções que consomem muitos recursos. Esses temas são tratados em dois capítulos distintos.

O livro termina com um capítulo sobre o AssemblyScript — uma linguagem de alto nível criada especificamente para WebAssembly. Também é feita uma comparação de desempenho com outras abordagens.

Minha opinião

Este ano, o WebAssembly completa 10 anos — uma idade suficientemente madura para avaliar se cumpriu ou não as expectativas e qual seu espaço atual no mercado. É verdade que grandes empresas como Google (Docs), Figma e Photoshop já utilizam WebAssembly para reescrever trechos críticos ou até módulos inteiros. Ainda assim, sua adoção no desenvolvimento web geral é lenta, e JavaScript/TypeScript seguem dominando sem concorrência direta.

Uma possível razão é a ausência de coletor de lixo embutido, o que torna o WebAssembly pouco adequado para linguagens como Python ou Java. Diferentemente de C++ ou Rust, projetadas com gerenciamento de memória em mente, essas linguagens têm dificuldade para se adaptar ao modelo do WebAssembly (embora tenha havido progresso significativo nesse campo nos últimos anos). Outro ponto é a impossibilidade de acessar o DOM diretamente. Tentativas de usar o WebAssembly por meio de camadas de compilação ou com excesso de chamadas a partir do JavaScript podem resultar até em desempenho inferior ao do código JS nativo.

Conforme se lê o livro, vai ficando claro por que o WebAssembly ainda é usado em casos pontuais e não se tornou comum no desenvolvimento geral. É, de fato, uma tecnologia complexa. Imagine misturar assembly com uma linguagem um pouco mais alta e acrescentar uma sintaxe semelhante ao Lisp. É mais ou menos essa a sensação ao ler o livro. Não trabalho com código de baixo nível há muito tempo, então muitos capítulos foram difíceис. Claro, houve momentos em que me envolvi com a abordagem e até gostei de analisar o código. Mas, no geral, o livro me pareceu bastante exigente. Pela primeira vez em muito tempo, senti vontade de dividir as frases do autor em trechos menores para melhor compreensão.

Para ter uma compreensão básica do WebAssembly e aprender WAT, o livro é excelente. Mas ele claramente não é suficiente para começar a aplicar a tecnologia em um projeto profissional logo após a leitura.

Вверх