Comparando o JavaScript com o WebAssembly

Neste breve post estarei comparando os benefícios de do JavaScript em relação ao Web Assembly e vice-versa. Esta é apenas uma introdução não técnica no tópico que tem a intenção de apontar as vantagens de cada tecnologia,

Performance

O WebAssembly é significativamente mais rápido que o JavaScript em termos de desempenho. Isso ocorre porque o código binário é compilado diretamente para a máquina e não precisa ser interpretado pelo navegador. Além disso, o WebAssembly tem acesso direto à memória do sistema, o que o torna mais eficiente em termos de uso de recursos.

Portabilidade

O JavaScript é uma linguagem portável e pode ser executada em qualquer navegador que suporte JavaScript. Já o WebAssembly, por outro lado, é uma tecnologia específica do navegador e, portanto, não pode ser executada fora do contexto do navegador.

Linguagens suportadas

O JavaScript é uma linguagem de programação completa e pode ser utilizada para escrever qualquer tipo de aplicação web. Já o WebAssembly, por outro lado, é projetado para ser usado como uma plataforma de execução para outras linguagens, como C, C++, Rust, entre outras.

Desenvolvimento

O JavaScript é uma linguagem de programação de alto nível e fácil de aprender, o que o torna uma ótima opção para iniciantes e desenvolvedores web. Já o WebAssembly é uma tecnologia mais avançada e que requer conhecimentos em programação de baixo nível e compilação de código.


Conclusão

Em resumo, o JavaScript e o WebAssembly são tecnologias complementares que possuem suas próprias vantagens e desvantagens. O JavaScript é uma linguagem versátil e amplamente utilizada, enquanto o WebAssembly é uma tecnologia de performance mais alta. Ambas têm seu lugar na web e a escolha entre uma ou outra dependerá das necessidades específicas de cada aplicação.

A API do Google V8 une o WebAssembly e a Web assíncrona

Os desenvolvedores do mecanismo V8 JavaScript/WebAssembly do Google introduziram a API JavaScript Promise Integration (JSPI), permitindo que aplicativos WebAssembly que assumem que o acesso à funcionalidade externa seja síncrono funcionem sem problemas em ambientes assíncronos. Isso foi feito pois hoje, API WebAssembly JavaScript Promise Integration suspende um aplicativo Wasm quando ele emite uma chamada de API síncrona e a retoma quando a operação de E/S assíncrona é concluída.

Importante!!!!!

Atualmente em estágio experimental, o JSPI ainda não deve ser usado em aplicativos de produção, disseram os desenvolvedores. Eventualmente, ele se tornará um padrão para implementação nos principais navegadores, disseram eles.

Quando aconteceu?

Apresentado em uma postagem de blog V8 em 19 de janeiro, o JSPI faz a ponte entre aplicativos WebAssembly síncronos e APIs da Web assíncronos. Isso é feito suspendendo o aplicativo quando ele emite uma chamada de API síncrona e retomando quando a operação de E/S assíncrona é concluída. E o JSPI faz isso com pouquíssimas alterações no próprio aplicativo.

Muitas APIs modernas na Web funcionam de forma assíncrona, dividindo a funcionalidade no início e na resolução de uma operação. JSPI intercepta o JavaScript Promise retornado de uma chamada de API assíncrona, suspendendo a lógica principal do aplicativo WebAssembly e retornando um Promise da exportação usada para entrar no aplicativo WebAssembly. Quando a API assíncrona é concluída, o aplicativo WebAssembly é retomado para que possa processar os resultados da chamada de API.

Trabalhar com Promises é difícil, particularmente com WebAssembly, porque a manipulação direta de Promises no WebAssembly não é possível, disseram os desenvolvedores. O JSPI permite que os desenvolvedores criem aplicativos WebAssembly usando APIs síncronas e ainda participem do ecossistema assíncrono da web.

O JSPI está sendo desenvolvido nas arquiteturas Intel e ARM64. Está disponível para Linux, Windows, macOS e ChromeOS. Os desenvolvedores podem testar o JSPI localmente acessando chrome://flags no Chrome, procurando por “Experimental WebAssembly JavaScript Promise Integration (JSPI)” e marcando a caixa. Recomenda-se o uso do canal Chrome Canary. JSPI ainda não pode ser habilitado para usuários finais.

O WebAssembly foi aclamado como um avanço no desempenho de aplicativos da web. O formato de instrução binária permite que muitas linguagens de programação diferentes, incluindo C/C++, C# e Rust, sejam usadas para programação na web.

CheerpJ 2.0: Converta apps Java em JavaScript

Foi lançado o CheerpJ 2.0(https://leaningtech.com/pages/cheerpj.html) da Learning Techonologies (https://leaningtech.com). Com ele é possível converter aplicações web client em código HTML5/WebAssembly/JavaScript.

Como funciona?

  1. Compilação antecipada:
    • O compilador do CheerpJ processa o bytecode antecipadamente, gerando um código JavaScript otimizado que pode rodar em qualquer browser.
  2. Runtime CheerpJ:
    • Em paralelo com a aplicação convertida, ele executa um runtime altamente otimizado utilizando JavaScript e WebAssembly. Isso mantém a execução 100% no lado do cliente.
  3. Compilador Java online:
    • Sempre que uma nova classe for gerada, o CheerpJ a converte na hora.

O legal da tecnologia é que ela permite converter com o bytecode do Java, então você nem precisa ter o código fonte. Outra coisa importante é que ela é 100% compatível com o Java 8(incluindo reflections e classes dinâmicas). Isso torna possível trabalhar com client Swing, applets e bibliotecas.

Se você quiser ver alguns exemplos, acesse a página de demo do CheerpJ (https://leaningtech.com/pages/cheerpj_demos.html) . Se você preferir testar na prática, vale a pena acessar o code playground (https://javafiddle.leaningtech.com) e criar algumas aplicações para ver os resultados.

Richard Feldman e o futuro da web.

Richard Feldman, na ReactiveConf em Praga, fez algumas previsões sobre o futuro da Web até 2025. Ele afirma que aposta em prever as evoluções de tecnologias atuais, como TypeScript e WebAssembly.

Apesar de o TypeScript estar evoluindo gradativamente, ainda há muitas reclamações em relação à sua verbosidade, que afeta a legibilidade do código-fonte. Mas Feldman afirma que o TypeScript será a escolha mais comum entre os desenvolvedores de projetos comerciais.

Com relação ao WebAssembly, Feldman sustenta que o futuro não seja guiado pelo WebAssembly por conta de seu desempenho aprimorado. Ele acredita que o WebAssembly permitirá a concorrência com as lojas e instaladores de apps.

Com relação ao gerenciamento de pacotes, Feldman afirma que o npm continuará relevante, mas que até o final de 2025, ocorrerá algum incidente de segurança, infectando pelo menos um pacote malicioso e afetando muitos desenvolvedores.

Feldman acredita que as linguagens de compilação para o JavaScript estarão crescendo, mas nenhuma de modo tão rápido quanto o TypeScript.

Fonte: https://www.infoq.com/news/2019/11/reactiveconf-2019-web-prediction/

Gostou desta notícia? Comente abaixo!