Emscripten 4.0 está disponível, um compilador de C/C++ para WebAssembly

Foi lançado o conjunto de ferramentas Emscripten 4.0, permitindo compilar código em C/C++ e outras linguagens que têm front-ends baseados em LLVM em um código intermediário universal de baixo nível em WebAssembly. O resultado obtido pode ser utilizado para integração com projetos em JavaScript, execução em navegadores web, uso em Node.js ou criação de aplicações multiplataforma isoladas, executadas com o runtime wasm. O código do projeto é distribuído sob a licença MIT. O compilador utiliza as contribuições do projeto LLVM, e para a geração de WebAssembly e otimização, emprega a biblioteca Binaryen.

O objetivo principal do Emscripten é criar uma ferramenta que permita executar código Web independentemente da linguagem de programação em que esse código foi originalmente escrito. Aplicações compiladas podem usar chamadas de bibliotecas padrão C e C++ (libc, libcxx), extensões C++, multithreading baseado em pthreads, API POSIX e muitas bibliotecas multimídia. API para integração com APIs Web e código em JavaScript são fornecidas separadamente.

O Emscripten suporta a translação da saída da biblioteca SDL2 através do Canvas e também implementa suporte a OpenGL e EGL através da API WebGL, permitindo a conversão de aplicações gráficas e jogos em WebAssembly (por exemplo, há uma porta do toolkit Qt, suportando motores de jogos como Unreal Engine e Unity, assim como o motor de simulação de processos físicos Bullet).

Além da compilação de código em C/C++, projetos para a execução de interpretadores em navegadores estão se desenvolvendo separadamente e máquinas virtuais para as linguagens Lua, C#, Python, Ruby e Perl. Além disso, é possível aplicar front-ends para LLVM que sejam diferentes do Clang, como front-ends para linguagens como Swift, Rust, D e Fortran.

A atribuição do número da versão 4.0 está relacionada a mudanças que quebram a compatibilidade no nível ABI (na recompilação de projetos em Emscripten 4.0 será necessária a recompilação de arquivos de objeto e bibliotecas compiladas por versões anteriores do Emscripten). As principais mudanças na versão Emscripten 4.0:

  • Foi adicionada a opção «-sWASM_LEAGCY_EXCEPTIONS» para escolher entre os antigos e novos mecanismos de tratamento de exceções. Por padrão, o mecanismo antigo continua a ser utilizado, uma vez que nem todos os navegadores implementaram as funcionalidades do WebAssembly para trabalhar com os novos manipuladores de exceções.
  • Os componentes compiler-rt, libcxx, libcxxabi e libunwind foram atualizados para a versão 19 do LLVM.
  • A versão mínima suportada do navegador Safari nas compilações (configuração MIN_SAFARI_VERSION) foi aumentada de 14.1 para 15.0, permitindo ativar por padrão várias funcionalidades avançadas do WebAssembly:
    • Foi incluído o uso de novas instruções para conversão de tipo float para int (nontrapping-fptoint), que, em vez de gerar uma exceção em caso de estouro, retornam o valor mínimo ou máximo possível (necessário para SIMD).
    • A opção WASM_BIGINT foi ativada, permitindo que tipos BigInt sejam utilizados para troca de valores inteiros de 64 bits entre WebAssembly e código JavaScript.
    • A opção BULK_MEMORY foi ativada, permitindo que instruções WebAssembly memory.copy e memory.fill sejam utilizadas para implementar as funções C memcpy e memset.
  • Na função PATH.basename(), a normalização de caminhos (PATH.normalize()) foi desativada, ou seja, a chamada ‘PATH.basename(«a/.»)’ agora retornará ‘.’ em vez de ‘a’, e ‘PATH.basename(«a/b/..»)’ retornará ‘..’ em vez de ‘a’.
  • Ao usar a opção ‘-sMODULARIZE’, funções factory que criam e retornam instâncias de módulos WebAssembly e objetos para JavaScript agora são marcadas como ‘async’ ao serem compiladas no modo WASM_ASYNC_COMPILATION, que é aplicado por padrão.
  • Foi adicionada a capacidade de especificar bibliotecas JavaScript usando a opção ‘-lfoo.js’. Ao contrário da opção ‘—js-library’, a busca pela biblioteca é realizada em todos os caminhos especificados pela opção ‘-L’.
  • Ao compilar em modo de depuração (-O0 ou -sASSERTIONS), a versão de depuração da função malloc, com verificações de assertivas habilitadas que detectam erros como chamadas duplas à função free(), é ativada por padrão.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster