Quando o navegador começou, era apenas uma janela para exibir algum texto e talvez algumas imagens. Era apenas uma nova forma de distribuir o mesmo tipo de documentos que você encontra em uma mesa de centro, como revistas ou livros.
Java, JavaScript e CSS mudaram tudo isso. Bastou apenas adicionar um pouco da funcionalidade completa de Turing, e programadores inteligentes encontraram maneiras de duplicar processadores de texto, jogos e muito mais dentro do que antes era um contêiner para palavras e imagens paradas.
Apesar de toda a criatividade, porém, os aplicativos executados em navegadores ainda eram mais lentos e consumiam mais recursos do que o código nativo. WebAssembly foi projetado para corrigir isso. O código vem pré-compilado, portanto não há necessidade de nada just-In-time. É muito menor, o que reduz os custos de largura de banda e os atrasos na rede. Ele oferece uma solução geral de baixo nível, para que os desenvolvedores possam entregar código ao navegador sem se rebaixar ao nível do JavaScript ou mesmo precisar transpilar seu código.
Mas a história não para por aí. Os desenvolvedores estão encontrando maneiras de fazer mais com o WebAssembly do que entregar páginas da web animadas e adicionar zip aos anúncios. WebAssembly, ou Wasm, é uma tecnologia fundamental que ocupa um lugar em ferramentas e infraestrutura em todas as pilhas. Aqui estão alguns dos exemplos recentes mais intrigantes que encontramos.
11 novos casos de uso para WebAssembly
A lista de soluções inteligentes continua crescendo. Tudo começou devagar, mas agora existem centenas de aplicações surpreendentes para WebAssembly. Talvez um destes inspire seu próximo projeto:
- Bis dos miniaplicativos
- Decodificação de fala
- Regras de modularidade
- Cadernos Wasm
- Análise de dados
- Videogames antigos
- Funciona como um serviço
- Bancos de dados maiores e mais próximos
- Explorando bancos de dados
- Avançando a inteligência
- Plug-ins em todos os lugares
Bis dos miniaplicativos
Você já ouviu alguém ficar nostálgico com os dias em que o código Java rodava como miniaplicativos em seu navegador? Provavelmente não. Essa funcionalidade nativa nunca foi entregue e praticamente desapareceu anos atrás. Mas agora você pode recuperar a magia com CheerpJ, uma versão da JVM compilada em WebAssembly. É como voltar ao passado e assistir O Matrix ou Caça à Boa Vontademas sem nenhum dos aborrecimentos dos anos 90, como ter que rebobinar a fita VHS antes de devolvê-la.
Decodificação de fala
Se você ainda tem alguma noção de que o navegador é apenas para código de brinquedo, o Ermine AI é um bom exemplo de como os desenvolvedores do Wasm não se importam com essas limitações antigas. A ferramenta reúne um modelo completo de IA para reconhecimento de fala que será executado localmente, presumivelmente entre os momentos em que o restante do código do navegador está atendendo a algum legado. marcação. A página da modelo alerta que a inicialização pode ser um pouco lenta porque demora para baixar tudo.
Regras de modularidade
Claro, os contêineres são ótimos para implantar software em servidores, mas e em outros lugares? Container2Wasm ainda é um experimento, mas converte todos os seus arquivos em um blob Wasm que pode ser executado em qualquer lugar que possa executar binários WebAssembly. Se o código precisar de ajuda com a emulação, a ferramenta também vem com o emulador x86 ou RISK-V correto.
Cadernos Wasm
Muitos cientistas de dados entregam seus resultados em notebooks apoiados por projetos como o Jupyter. Eles agrupam código, dados e texto de uma forma que torna mais fácil para qualquer leitor experimentar o software. Se você deseja executar um comando ou invocar uma função, tudo o que você precisa fazer é clicar com o botão direito. É uma forma ideal de compartilhar software em um ambiente aberto e dinâmico que envolve o leitor.
A configuração do notebook normalmente depende de um servidor para computação. Do ponto de vista administrativo, isso significa configurá-lo e garantir que ele esteja executando o Python. Agora, kits de ferramentas baseados em Wasm, como Marimo e Sphinx, tornam o trabalho ainda mais fácil, permitindo que você execute o código Python diretamente no navegador. Tudo que você precisa é de uma versão Wasm do Python, Pyodide. Configurar o servidor é muito mais fácil e não há necessidade de lidar com a computação de todos.
Análise de dados
Outra coisa que os cientistas de dados gostam de fazer é usar R para analisar seus dados e, em seguida, usar ferramentas como o Sweve para formatá-los. Normalmente isso significa instalar o R em sua máquina local ou em um servidor. Agora, ferramentas baseadas em Wasm, como WebR e R-universe, transformam esse código R em Wasm diretamente, para que ele seja executado diretamente no navegador. Qualquer pessoa que leia sua análise poderá executar seu código R sem instalar a linguagem ou precisar garantir que a versão correta esteja disponível.
Videogames antigos
Todos se lembram dos jogos de sua juventude desperdiçada. A boa notícia é que você ainda pode perder fins de semana inteiros jogando esses clássicos, tudo sem o incômodo de tentar recompilar código C ou Pascal antigo. Projetos como o Wasm-4 garantem que todos os seus antigos simuladores de vôo e jogos de aventura favoritos continuem vivos, diretamente no seu navegador. Quem não gosta de reinos bidimensionais desenhados com gráficos de 8 bits ou wireframe?
Funciona como um serviço
Muitos dos principais serviços em nuvem que oferecem suporte a microsserviços e às chamadas soluções sem servidor estão naturalmente interessados em oferecer suporte ao Wasm. É uma maneira ideal de empacotar uma pequena quantidade de código que pode ser inicializada rapidamente porque está quase totalmente compilada. Provedores de nuvem como Fermyon, Cloudflare e Wasmer oferecem suporte a módulos WebAssembly de diversas maneiras. Outros provedores estão agrupando os módulos com ferramentas como WasmEdge e executando-os usando recursos do tempo de execução do Node para iniciar o código WebAssembly.
Bancos de dados maiores e mais próximos
No modelo tradicional, o banco de dados é um processo sagrado executado em uma máquina separada – de preferência em seu próprio espaço virtual protegido em algum local blindado. Isso ainda pode ser a realidade como a conhecemos, mas os desenvolvedores estão começando a pensar de forma diferente. Por que não simplesmente encaixar um banco de dados completo e rico em recursos em um navegador para que o código possa usar todos os recursos? Claro, o W3 nos deu sistemas de valores-chave como a API WebStorage ou modelos mais rápidos e profundos como IndexedDB, mas ambos são limitados. Projetos como PGLite, DuckDB e SQLite 3 estão prontos para armazenar coleções de dados muito maiores e analisá-las com uma gama muito maior de funções SQL. Eles são mais rápidos e também oferecem APIs de nível inferior para que você possa vinculá-los a outros projetos Wasm.
Explorando bancos de dados
Wasm não é apenas um mecanismo de entrega para adicionar bancos de dados maiores e mais capazes às suas páginas da web. Alguns desenvolvedores estão invertendo essa visão e incorporando código Wasm dentro de bancos de dados para adicionar funções definidas pelo usuário (UDF). SingleStore, por exemplo, permite que os desenvolvedores adicionem UDFs e suas primas, funções com valor de tabela. Outras ferramentas de streaming de dados, como InfinyOn e Redpanda, permitem transformar as informações com funções Wasm à medida que elas fluem pelo sistema. Wasm pode acabar sendo o formato dominante para incorporar novas habilidades computacionais onde quer que os dados sejam armazenados.
Avançando a inteligência
Embora o WebAssembly possa não ser uma opção natural para ser incorporado profundamente nos LLMs ou nas redes neurais que fazem parte da IA generativa, isso não significa que lhe falte um lugar na pilha. WasmEdge, por exemplo, tem dois sistemas de plugins para TensorFlow (aqui e aqui) e um para PyTorch, para que seu código possa interagir perfeitamente com os cálculos de IA. Dylibso experimentou conectar IAs como ChatGPT com módulos Extism. Em outras palavras, Wasm pode ser a ferramenta que você precisa para unir seu código com IAs.
Plug-ins em todos os lugares
WebAssembly não serve apenas para bancos de dados ou IAs. Muitos pacotes de software desejam tornar mais fácil para os usuários finais adicionar um pouco de funcionalidade para estender o conjunto de recursos padrão. Isso significa desenvolver uma API que permita que novos códigos se misturem com códigos antigos sem introduzir falhas de segurança ou destruir a eficiência. Wasm acabou sendo um sistema muito bom para fazer isso porque foi projetado para fazer mais ou menos a mesma coisa com páginas da web. Possui segurança, brevidade e eficiência muito bem projetadas.
Muitos pacotes de software já oferecem isso. Uma rápida olhada os encontra em todos os lugares, desde projetos Apache até migração de dados Zendesk. Os programadores contam com ferramentas básicas como o Extism para oferecer suporte a todas as principais linguagens e algumas que não são tão comuns com SDKs e bibliotecas PDK. Wasmi é outra opção que se concentra em sistemas restritos ou embarcados. Quando chega a hora de gerar as ligações, os programadores recorrem a fp-bindgen, wasm-bindgen ou wit-bindgen para fazer o trabalho de trabalho.
Conclusão
Existe um limite para o que você pode fazer com WebAssembly? Na verdade. Esse é basicamente o ponto. Wasm abre portas para que os usuários possam obter o que desejam do software. É modularidade tornada rápida, poderosa e onipresente.