Como compilar convertendo C++ para JavaScript e executar no browser

image_pdfimage_print

Para executar C++ diretamente no navegador não é possível. Da mesma forma, a conversão para Javascript direta não parece ser fácil e nem efetiva.

No entanto, existe atualmente a possibilidade de efetuar a conversão para um novo padrão que além de executar no navegador, é integrado ao JavaScript, tendo interoperabilidade, além de conseguir executar mais rápido que o próprio JavaScript para uma série de atividades, mas ainda mais lento que o correspondente código nativo. Num primeiro momento do projeto, o código era convertido para um subset específico de JavaScript, mas o projeto evoluiu em escala mundial com a criação de um novo padrão, agora suportado por todos os principais navegadores, chamado WebAssembly.

Encontramos performances que variaram de 65 a 80% da velocidade nativa, apenas como referência. Outros resultados poderão ser encontrados dependendo do código, ações e outros fatores.

Aqui iremos falar do WebAssembly e do Emscripten. Como muitas histórias sobre inovação tecnológica, esta começou com os videogames.

“Mozilla Alon Zakai” queria ter um jogo que ele ajudou a escrever em C ++ funcionando na web. Pensou em convertê-lo em código JavaScript que o faria funcionar bem na Web usando apenas um navegador.

Isso foi em 2010 e, naquela época, converter C ++ para JavaScript era inviável. Então ele começou a trabalhar para adaptar uma ferramenta de código aberto que poderia traduzir o código C ++ para o JavaScript automaticamente.

O projeto foi chamado de Emscripten. Conseguiu-se formalizar os padrões de JavaScript permitidos, para tornar o contrato entre o Emscripten e o navegador completamente limpo. Chamaram o subconjunto resultante de JavaScript de asm.js e no final otimizou o mecanismo de JavaScript do Firefox para executar o código resultante ainda mais rápido.

Isso nos leva ao presente onde o Emscripten pode pegar o código escrito em C ++ e convertê-lo diretamente em WebAssembly. E haverá modos de executar outras linguas, incluindo Rust, Lua, Python, Java e C #.

Com WebAssembly, bases de código já existentes poderam ser carregadas em alguns segundos e, em seguida, executar em 80% da velocidade de programas nativos. E se espera que o tempo de carregamento e a velocidade de execução melhorem à medida que os motores dos navegadores que executam o código são melhorados.

Eles começaram com um jogo C ++ porque “Se pudéssemos fazer jogos funcionarem bem na Web, outros aplicativos computacionalmente intensivos logo seguiriam”.

De acordo com o engenheiro de software da Mozilla Luke Wagner,  o nome de Emscripten era um “mash-up de ‘script’ do JavaScript e ’embiggen’ do programa de TV The Simpsons.

Para mais detalhes, verifique a página do projeto de como compilar C++ para JavaScript, assim como o suporte a compilação de Python para JavaScript ou num melhor termo, como rodar programas escritos em python no navegador, assim como executar programas C++ nativamente no navegador.

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!