Animar um compilador de código aberto de C/C++ para WebAssembly e JavaScript

animar

Cheerp: um compilador C++ para a Web

Foi anunciado recentemente Cheerp versão 3.0, um compilador que permite compilar qualquer código C/C++ em WebAssembly ou JavaScript. A nova ramificação é notável por mover o compilador e as bibliotecas que o acompanham para usar licenças Apache 2.0 e LLVM permissivas, em vez da política de licença limitada aplicada anteriormente, que oferece uma opção de licença GPLv2 para projetos não comerciais e um proprietário de licença para projetos comerciais.

O Cheerp pode ser usado para portar aplicativos e bibliotecas C/C++ existentes para execução no navegador ou para criar aplicativos da Web de alto desempenho e componentes WebAssembly do zero.

Já se passou mais de um ano desde o lançamento anterior do Cheerp ( Cheerp 2.7 ), e esta nova versão está repleta de novos recursos e otimizações que, mais uma vez, movem o estado da arte do uso do C++ como linguagem de programação para aplicativos da Web. e jogos.

Mais importante ainda, com este lançamento estamos fazendo uma mudança significativa no modelo de licenciamento do Cheerp. A partir do Cheerp 3.0, todos os principais componentes e bibliotecas do compilador agora são licenciados permissivamente sob a licença Apache 2.0/LLVM. Isso marca uma mudança radical em relação ao nosso modelo anterior de licença comercial GPLv2/dupla, permitindo que o Cheerp 3.0 seja usado para qualquer finalidade, sem restrições.

Sobre o Cheerp

O projeto permite combinar código C/C++ e JavaScript em um aplicativo da web com a capacidade de acessar do código JavaScript às funções originalmente desenvolvidas em C/C++ e do código C/C++ aos objetos JavaScript, bibliotecas JavaScript, APIs da Web e todos os recursos do DOM, além de permitir que você crie construções mistas, parte de o código que compila para JavaScript e parte para WebAssembly. Oferece suporte a projetos de compilação que usam as bibliotecas libc e libc++ padrão.

Comparado com o compilador Emscripten, Cheerp gera código intermediário WebAssembly mais otimizado e compacto (Em média, os tamanhos de arquivo resultantes são 7% menores.)

Conceitualmente, as diferenças se resumem ao fato de que Inscrever-se é usado como o formato de objeto do WebAssembly e executa ligação e otimização no estágio de pós-processamento do Webassembly. (was-opt). O Cheerp usa o bytecode LLVM como uma representação intermediária para bibliotecas e arquivos de objeto, permitindo otimizações mais amplas em todo o projeto usando metadados no nível LLVM sem a necessidade de pós-processamento.

Artigo relacionado:
Emscripten 3.0, uma cadeia de ferramentas de construção para WebAssembly usando LLVM

Além disso, Cheerp usa o otimizador PreExecuter para executar código preventivamente em tempo de compilação, por exemplo, para converter construtores usados ​​para inicializar objetos globais em constantes. Além disso, PartialExecuter é usado durante a compilação, que, com base na análise dos parâmetros da função, remove o código que não será usado na execução.

Cheerp também pode gerar código JavaScript para trabalhar dinamicamente com a memória. coberto pelo coletor de lixo. Em particular, em vez de emular um espaço de endereço tradicional com arrays digitados, o Cheerp fornece um mapeamento direto de objetos C++ para objetos JavaScript, o que reduz o consumo de memória porque o coletor de lixo JavaScript tem a capacidade de remover objetos não utilizados. Para melhorar o desempenho, o código intermediário WebAssembly gerado usa extensões SIMD para orquestrar a paralelização das operações de dados.

Cheerp pode ser usado como uma plataforma para construir aplicações web embarcadas cliente/servidor em C++. Na prática atual, é comum desenvolver um front-end separado baseado em navegador escrito em JavaScript e um back-end separado escrito em PHP, Python, Ruby ou JavaScript/Node.js.

O Cheerp fornece os meios para criar aplicativos da Web C++ completos que suportam back-end e front-end em uma única base de código.

Durante o processo de construção, o lado do servidor é compilado em código nativo e a interface é convertida em uma representação JavaScript. A depuração de todos os componentes do projeto, incluindo aqueles convertidos para JavaScript, é realizada usando textos-fonte C++ usando a tecnologia Source Map.

Finalmente, se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir

O código do compilador é baseado nos desenvolvimentos LLVM e Clang e inclui otimizações adicionais para melhorar o desempenho e reduzir o tamanho da saída compilada.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: AB Internet Networks 2008 SL
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.