WebAssembly: significado, vantagens, casos de uso e mais

Apanhado no hype do WebAssembly, mas não sabe exatamente o que é? Aqui está o baixo.

WebAssembly ou Wasm é um formato de código binário para criar programas que podem ser executados em qualquer arquitetura de computador.

O sistema é composto por uma máquina virtual e um compilador que traduz o código de computador de linguagens de programação, como C ou C++, para os formatos .wat legível por humanos e .wasm binário.

O objetivo original do WebAssembly era permitir que os programadores desenvolvessem aplicativos de alto desempenho para páginas da Web, permitindo velocidades de execução quase nativas dentro de um navegador. Mas a tecnologia agora parece estar evoluindo para além dos navegadores e para a nuvem.

Este guia mostra tudo o que você precisa saber sobre essa tecnologia em evolução, seus pontos fortes e fracos, bem como seu potencial futuro.

O que é WebAssembly?

Webassembly. é um formato de código binário que é executado em uma máquina virtual e que diferentes linguagens podem compilar. Ele foi projetado para ser portátil e pode ser executado em um navegador da Web ou como um aplicativo de servidor.

Lançado pela primeira vez em 2017, o WebAssembly é uma recomendação do W3C desde 2019 e é mantido por vários colaboradores, incluindo Mozilla, Google, Microsoft, Red Hat e muitos outros.

O objetivo original era desenvolver velocidades de execução quase nativas, como você encontraria com aplicativos C/C++ dentro do navegador. Também se destina a ser um padrão da Web seguro, de padrão aberto, depurável e sem versão, compatível com versões anteriores e compatível com JavaScript.

Como funciona o WebAssembly?

O WebAssembly foi projetado como um mecanismo de tempo de execução, como Java ou JavaScript, que pode ser incorporado a um navegador ou ambiente de servidor para executar código de computador compilado nos formatos binário .wasm ou texto .wat.

Para escrever código para execução do WebAssembly, o desenvolvedor escreve o programa em qualquer uma das várias linguagens suportadas. Em seguida, compile-o usando um compilador WebAssembly AOT (Ahead of Time) ou JIT (just in time).

Esse código pode fazer a maior parte do trabalho no ambiente de execução, mas não pode acessar ou modificar os objetos DOM de um navegador. Qualquer interação desse tipo deve passar por JavaScript.

Como criar um aplicativo WebAssembly de exemplo

A criação de um aplicativo Wasm simples para o navegador da web é possível com apenas algumas etapas, como você pode ver abaixo:

  1. Baixe e instale o SDK Emscripten.
  2. Escreva sua amostra olamundo.c código ou fazê-lo em C++/Rust se preferir.
  3. Execute emcc olámundo.c -s WASM=1 -s olámundo.html em um terminal para compilar o código para WebAssembly com Emscripten. Ele criará os arquivos binários, HTML e JavaScript do Wasm que você precisa (código de cola).
  4. Sirva a página helloworld.html através do seu navegador da web.

As vantagens do WebAssembly

Existem muitas razões para adotar o WebAssembly e suas tecnologias relacionadas, elas incluem:

  • Desempenho quase nativo – O WebAssembly tem um design de nível tão baixo que oferece desempenhos semelhantes a linguagens de baixo nível, como C e C++.
  • Segurança – O sistema foi projetado para ser seguro isolando-o em um ambiente virtual com acesso limitado ao sistema.
  • Padrão aberto – Muitas organizações e indivíduos estão contribuindo para o WebAssembly e é uma recomendação oficial do W3C.
  • Leve – WebAssembly compila em código binário para ser executado em uma máquina virtual. Este código é portátil e não precisa nem vem com arquivos de sistema.
  • Suporte multilíngue – Mais de 50 idiomas podem ser compilados no WebAssembly.
  • Plataforma independente – A máquina virtual WebAssembly é projetada para que cada arquitetura apresente o mesmo ambiente de tempo de execução. Tudo o que um desenvolvedor precisa fazer é escrever código para WebAssembly.

As limitações do WebAssembly

  • Trabalho em progresso – O padrão ainda está em desenvolvimento e, portanto, muitos recursos e melhorias ainda estão por vir.
  • Sem coleta de lixo – O WebAssembly ainda não possui coleta de lixo, embora possa ser implementado em breve.
  • Sem acesso ao DOM – Você não pode acessar o DOM de um navegador da Web diretamente do WebAssembly, você precisará passar pelo JavaScript.

WebAssembly vs Java

Java é uma das primeiras implementações do WebAssembly. Ele foi projetado como uma linguagem de gravação única e execução em qualquer lugar, mas desenvolveu muitos problemas ao longo do caminho.

Assim como no Java, o WebAssembly usa um RE (Runtime Environment) para executar seu código, mas, diferentemente do Java, você pode escrever o WebAssembly na linguagem de sua escolha.

WebAssembly vs JavaScript

O WebAssembly é executado no navegador ou em outro ambiente host, assim como JavaScript. No entanto, onde o JavaScript é entregue ao ambiente de execução em formato de texto e compilado na hora, o WebAssembly tem formatos de texto e binários.

Dentro dos navegadores da Web, o JavaScript tem acesso ao DOM, enquanto o WebAssembly não. No entanto, quando se trata de velocidade de execução, o WebAssembly supera o JavaScript, com suas velocidades de execução de código quase nativas.

A velocidade é onde o WebAssembly brilha e a razão pela qual é ideal para tantos usos. Você pode carregar o WebAssembly em um navegador usando JavaScript e os dois códigos podem ser executados juntos e compartilhar recursos.

WebAssembly vs Docker vs Kubernetes

Docker e Kubernetes são duas das tecnologias populares que potencializam a nuvem computação. Docker é uma tecnologia de contêiner que permite aos desenvolvedores empacotar um aplicativo com todas as dependências do sistema em um único pacote. Isso facilita a implantação do aplicativo em qualquer ambiente de nuvem em um segundo ou menos.

O Kubernetes, por outro lado, é um de código aberto sistema para gerenciar e implantar aplicativos em contêineres, como Docker, CRI-O, containerd e qualquer implementação de Kubernetes CRI (Container Runtime Interface). O Kubernetes também facilita o dimensionamento de implantações em nuvem em vários servidores ou máquinas virtuais.

Desse ponto de vista, o WebAssembly é mais semelhante ao Docker e pode ser executado como um aplicativo de nuvem em contêiner usando o Kubernetes. Ele também oferece muitas vantagens sobre o Docker, mas provavelmente não o substituirá.

Além do navegador

No início, havia servidores web. Você tinha que dedicar uma máquina completa como servidor. Em seguida, havia máquinas virtuais, ou VMs, que permitiam que um servidor fosse executado em apenas um ou mais threads de CPU. Ainda assim, você precisava ter uma VM dedicada.

Cloud computing possibilitou iniciar e executar servidores somente quando necessário, por meio da conteinerização dos aplicativos. Isso levou a uma redução nos custos, pois você só tinha que pagar pelo que usa – não mais máquinas dedicadas. Mas ainda há alguns problemas.

Primeiro, os arquivos docker podem ter vários Gigabytes de tamanho, e isso significa um pequeno atraso no inicialização e outras questões de gestão. Um arquivo Wasm semelhante, no entanto, pode ter apenas alguns MB porque é um binário pré-compilado. Isso proporciona um tempo de inicialização muito mais rápido do que o Docker, perfeito para determinados aplicativos de tempo crítico.

Em segundo lugar, o design do WebAssembly significa que o desenvolvedor não precisa gerenciar e atribuir recursos do sistema, ele pode simplesmente chegar ao ponto usando sua linguagem de programação preferida.

Esses recursos tornam o WebAssembly ideal para executar microsserviços em nuvem, embora os aplicativos Docker ainda sejam preferíveis para aplicativos que exigem mais controle sobre o ambiente operacional e o sistema de arquivos.

Para mais informações, projetos como WasmCloudName e WasmEdge estão desenvolvendo o WebAssembly em uma plataforma de computação viável.

Casos de uso do Wasm

Existem muitos casos de uso para WebAssembly, dada sua natureza peculiar. Eles podem ser divididos em três grandes grupos; configurações no navegador, fora do navegador e híbridas.

O tipo no navegador é autoexplicativo e fora do navegador refere-se principalmente a implantações de servidor, IoT e nuvem, enquanto o híbrido se refere a uma mistura dos dois.

Veja a seguir os casos de uso em que o Wasm pode se destacar:

  • Código de alto desempenho já existente – Código antigo, mas maravilhoso, que você pode simplesmente portar para o WebAssembly.
  • Novo código de alto desempenho – Aqueles que você precisa projetar e implementar do zero.
  • Portando aplicativos de desktop para a web – Isso pode abrir uma nova geração de soluções de desktop baseadas na web, como edição de vídeo baseada na web.
  • Cloud computing – Correndo ao lado do Docker e Kubernetes para novas oportunidades.

Veja a seguir os aplicativos e cenários específicos em que o Wasm pode se destacar:

  • Edição de vídeo e imagem
  • Design de jogo
  • AI aplicações
  • Aplicativos de realidade virtual e aumentada
  • Aplicações de música
  • Aplicações P2P
  • Aplicativos do lado do servidor
  • Cálculos de nuvem/cluster
  • Projeto auxiliado por computador
  • Simulação de plataforma OS
  • Criptografia
  • Servidor web local
  • Aplicativos de área de trabalho remota
  • Visualizações científicas
  • Aplicativos nativos híbridos em smartphones
  • Em dispositivos IoT

Lista de linguagens e estruturas compatíveis

Mais de 50 linguagens são compiladas no WebAssembly, e aqui estão algumas das mais populares:

  • C
  • C + +
  • R
  • Ruby
  • rápido
  • Go
  • Kotlin
  • Ferrugem
  • PHP
  • blazer – Uma estrutura para desenvolvedores .NET.
  • JwebAssembly – Compilador para bytecode Java e linguagens relacionadas como JRuby, Jython, Groovy, Scala e Kotlin.
  • Teixo – Uma estrutura Rust para criar aplicativos Web multithread usando WebAssembly.
  • AssemblyScript – Uma linguagem projetada especificamente para criar código WebAssembly.
  • Grão – Uma linguagem funcional fortemente tipada.
  • Motoko

Você pode encontrar mais idiomas aqui.

Lista de Tempos de Execução e Ferramentas do WebAssembly

  • Todos os principais navegadores têm suporte Wasm
  • Piodide – Tempo de execução do Python no navegador com a pilha científica do Python, incluindo Pandas, NumPy, SciPy.
  • amor
  • peso – Para microsserviços e aplicativos da web
  • Wasi – Interface de sistema modular
  • WasmTime – Tempo de execução WebAssembly rápido e seguro.
  • máquina de lavar
  • Luce
  • wasmCloud – Ambiente em nuvem
  • Krustlet – Kubernetes kublete para rodar o Wasm, escrito em Rust.
  • WasmEdge – Ambiente de tempo de execução de nuvem e borda

Conclusão

Chegamos ao fim de nossa jornada para o WebAssembly e o que ele reserva para a computação. E como você pode ver, ele tem muitas promessas.

Ainda é um trabalho em andamento, mas em constante desenvolvimento. E se você estiver interessado, você pode encontrar mais informações aqui, aqui e aqui.

Nnamdi Okeke

Nnamdi Okeke

Nnamdi Okeke é um entusiasta de computadores que adora ler uma grande variedade de livros. Ele tem preferência por Linux sobre Windows/Mac e tem usado
Ubuntu desde seus primeiros dias. Você pode pegá-lo no twitter via bongotrax

Artigos: 290

Receba materiais tecnológicos

Tendências de tecnologia, tendências de inicialização, análises, renda online, ferramentas da web e marketing uma ou duas vezes por mês