Entenda como o wasm foi projetado para oferecer mais performance, flexibilidade e segurança na sua aplicabilidade e porque você precisa conhecer
WebAssembly (ou Wasm) é um formato de instrução binária para máquinas virtuais. O Wasm é o bytecode executado pelos browsers, que permite, além de JavaScript, que outras linguagens de programação, como C e Rust, sejam executadas neles.
De acordo com o webassembly.org, o Wasm foi projetado para ser:
- eficiente, aproveitando os recursos de hardware comuns disponíveis em uma ampla gama de plataformas;
- aberto e depurável, para manter a natureza da web sem versão, testada por recursos e compatível com versões anteriores; e
- seguro, quando incorporado na web, aplicará as políticas de segurança de mesma origem e permissões do navegador.
Para Vinícius Alves Montanheiro, desenvolvedor full-stack da Supero, o WebAssembly é uma evolução em termos de código binário, pois abre uma série de novas possibilidades para o desenvolvimento de software:
Já imaginou executar o Photoshop ou seu jogo favorito diretamente pelo seu navegador? Isso já é possível com o Wasm. É a quarta linguagem a ser executada nativamente em navegadores e fornece um caminho para executar códigos escritos em múltiplas linguagens na web, com velocidades próximas às das linguagens nativas com apps, sendo hoje executados na web, onde antes não era possível.
Não à toa, o WebAssembly, que nasceu em 2017, se tornou uma recomendação da World Wide Web Consortium, em 2019, juntamente com HTML, CSS e JavaScript.
Neste artigo, vamos abordar sobre os objetivos do WebAssembly, quais os problemas que ele resolve, onde estudar melhor sobre o assunto, casos de uso e ainda, porque sua empresa deve usar Wasm.
Objetivos da inovação poderosa chamada WebAssembly
De acordo com seus criadores, o principal objetivo do WebAssembly é facilitar aplicativos de alto desempenho em navegadores web, apesar do formato ter sido construído para ser executado e integrado também a outros ambientes.
Entretanto, a grande inovação deste código binário é que ele traz o desempenho de aplicativos nativos para a web de uma forma completamente segura e ainda permite uma funcionalidade completa de jogos, aplicativos principais e todo o espectro de software que pode ser executado em um computador.
Por isso, desenvolvedores de código aberto estão continuamente contribuindo para o conjunto de recursos do WebAssembly até que possam capturar com eficiência as principais linguagens. Eles estão entusiasmados com a ideia de ter um alvo de compilação universal que poderia eventualmente desbloquear a habilidade de qualquer linguagem de almejá-lo.
De acordo com Montanheiro, o grande propósito da WebAssembly é a compatibilidade.
Imagine um mundo onde as aplicações serão compatíveis entre vários dispositivos, independente do sistema operacional e do navegador. O WebAssembly oferece a mesma segurança e políticas de permissões dos navegadores, e ainda trabalha em harmonia com outras tecnologias web, mantendo a compatibilidade retroativa.
Não é por acaso que os desenvolvedores consideram o wasm uma abordagem revolucionária. O que se acredita é que ainda há otimizações que vão levar o WebAssembly ainda mais longe, permitindo que aplicativos enormes carreguem rapidamente, mesmo em dispositivos móveis.
Confira: Resultados do business agility: o que as organizações estão construindo?
Que problemas tradicionais o wasm resolve
O principal problema que o WebAssembly pretende resolver é o desempenho, Embora tenhamos JavaScript na web, ele não foi realmente projetado para ser rápido com um aplicativo muito grande. Já o Wasm, por ser construído apenas como um formato binário e muito compacto para fazer o download, torna-se muito eficiente para compilar e executar.
Segundo Vinícius Montanheiro, resumidamente, o wasm resolve problemas de:
- Compatibilidade;
- Segurança;
- Desempenho em aplicações web – preenchendo a lacuna de execução de alto desempenho sem a necessidade de usar qualquer tipo de plugins;
- Acesso a recursos nativos; e
- outros problemas que antes só era possível resolver na camada do servidor (backend).
Estudar Wasm
Para quem deseja se aprofundar no tema, o livro Level Up with WebAssembly, de Robert Aboukhalil promete ser altamente prático e inclui receitas que o autor usou para converter software para a web com sucesso.
Outra referência no assunto que aborda problemas que o WebAssembly resolve é o engenheiro de software sênior da Continuation Labs, Gabriel Cuvillier, que descreve o wasm como “uma pilha tecnológica difícil de aprender, com arestas e um alvo em movimento rápido. Este último ponto pode explicar por que ainda é difícil ter um livro atualizado e aprofundado sobre a plataforma. Muito pode ser feito, mas apenas com dinheiro / tempo / recursos de conhecimento suficientes”.
O desenvolvedor Full-Stack da Supero também indica o site emscripten.org/ como uma boa referência para o tema.
Leia também: Quanto custa a manutenção de um aplicativo?
Wasm além do browser: o ecossistema webassembly
De acordo com Vinícius, um dos grandes benefícios do WebAssembly é que ele oferece a possibilidade de compilar código em outras linguagens.
O Wasm possui um compilador official source to source chamado Emscripten. O Emscripten permite várias otimizações de build e possui um backend LLVM, mas é suportado apenas para as linguagens C/C++ e Rust. Com a expansão da tecnologia, hoje existem algumas opções para outras linguagens de alto nível como Go, C#, Java, D, Perl, Python, Scala, Kotlin, Swift e Ruby.
Segundo o desenvolvedor, para provar que não há limites a respeito do que possa ser realizado, o WebAssembly foi projetado para funcionar bem na Web, mas não se limita a ela.
A WebAssembly System Interface, ou WASI, é uma família de APIs para WebAssembly projetada e padronizada por meio do WASI Subgroup do W3C WebAssembly Community Group. Inicialmente, o foco está em APIs orientadas ao sistema, abrangendo arquivos, redes e vários recursos nativos por meio de Capability-based security, só que isso já é outra história.
Veja: Quais as tendências em segurança dos softwares?
Casos de uso: web e não web
O WebAssembly surgiu para que os desenvolvedores entregassem aplicativos poderosos na web e em dispositivos móveis, que antes não conseguiriam.
Isto porque o wasm é um dos principais impulsionadores de desempenho para aplicativos da web e agora está disponível nos principais navegadores.
Quem está usando?
Google, Microsoft, Mozilla e Apple são alguns nomes que têm trabalhado em conjunto para tornar os navegadores mais rápidos. Para se ter uma ideia, no protótipo atual criado, o navegador processa o WebAssembly 23 vezes mais rápido que um código JavaScript tradicional.
Para o desenvolvedor full-stack da Supero, os casos mais comuns de uso do WebAssembly são:
- Disponibilização de recursos nativos para o navegador como Socket UDP;
- Reconhecimento de padrões com Inteligência Artificial (IA);
- Conversões de vídeos e arquivos;
- Execução de aplicações sem necessidade de download; e
- Instalação com alto desempenho.
Entenda: Como alinhar a estratégia cloud à sua transformação digital?
Por que sua empresa deve utilizar Wasm?
Além de mais desempenho na Web e maior conectividade, o Wasm é importante para as empresas porque oferece aos desenvolvedores mais flexibilidade na escolha ao escrever código para o navegador.
Com o Webassembly, os desenvolvedores passam a escrever para a web na linguagem que melhor se adapta a eles e a sua aplicação. Pode ser uma linguagem orientada a objetos fortemente tipada ou algo focado em programação funcional.
E para quem pensa que o Wasm veio para substituir o JavaScript, Vinícius rebate:
O WebAssembly trabalha junto às tecnologias da Web, inclusive o módulo de comunicação é em JavaScript, ou seja, o Javascript continua sendo utilizado para realizar a chamada dos métodos no WebAssembly que por fim realiza a execução.
Não por acaso, a adoção do WebAssembly pelas empresas cresce a cada ano. Segundo o desenvolvedor da Supero, projetos que usam Wasm relatam sucesso.
Várias empresas já estão utilizando Wasm. Por exemplo, a EA games já usa, desde o Batlefield 5 (2018), vários recursos da Web tipo o WebRTC (Comunicação em tempo real em chamadas de áudio e vídeo), compartilhamento de telas, são chamadas Javascript sendo feitas a uma implementação de baixo nível em C++. Até a Microsoft deu o braço a torcer, seus navegadores Internet Explorer (descontinuado) e Edge, agora possuem a Engine do Chromium (versão Open Source do Chrome), isso foi feito pensando na compatibilidade com o WebAssembly.
E se você está se perguntando se a sua organização deveria usar wasm em apps web, o Vinícius responde:
Se a empresa tem necessidade de oferecer uma aplicação com alta performance na nuvem ou utilização de recursos nativos, o WebAssembly é bastante indicado. Eu mesmo já utilizei na Supero Tecnologia para comunicar um sistema web com uma impressora, enviar comandos, receber status e gerenciar seus recursos.
A jornada WebAssembly
Como vimos, se você é desenvolvedor, em algum momento da sua carreira será afetado pelo WebAssembly. Isso porque essa abordagem revolucionária de formato binário para a web veio para ficar.
Contudo, podemos concluir que o WebAssembly é definitivamente uma melhoria para o que temos hoje, que é o desenvolvimento em JavaScript. Além disso, é um grande avanço também para o navegador.
Podemos esperar então que é o início de uma nova era com menos códigos, melhor desempenho e eliminar bugs?
Provavelmente, sim! Mas, o futuro e os novos desenvolvedores nos dirão. E, você, ficou interessado no assunto? Quer saber mais a respeito deste universo de desenvolvimento de softwares? Assine nossa newsletter e receba artigos e notícias do universo da tecnologia.