Cheerp компілятор з відкритим вихідним кодом від C/C++ до WebAssembly і JavaScript

веселитися

Cheerp: компілятор C++ для Інтернету

Нещодавно це було оголошено Випуск Cheerp 3.0, компілятор, який дозволяє скомпілювати будь-який код C/C++ у WebAssembly або JavaScript. Нова гілка примітна тим, що компілятор і супутні бібліотеки переходять на використання дозвільних ліцензій Apache 2.0 і LLVM замість попередньо застосованої політики обмеженої ліцензії, яка пропонує варіант ліцензії GPLv2 для некомерційних проектів і власника ліцензії для комерційних проектів.

Cheerp можна використовувати як для портування існуючих додатків і бібліотек C/C++ для запуску в браузері, так і для створення високопродуктивних веб-додатків і компонентів WebAssembly з нуля.

З моменту попереднього випуску Cheerp (Cheerp 2.7) минуло більше року, і ця нова версія наповнена новими функціями та оптимізаціями, які знову переходять на сучасний рівень використання C++ як мови програмування для веб-додатків. ігри.

Найважливіше те, що в цьому випуску ми вносимо значні зміни в модель ліцензування Cheerp. Починаючи з версії Cheerp 3.0, усі основні компоненти компілятора та бібліотеки тепер ліцензовані відповідно до ліцензії Apache 2.0/LLVM. Це знаменує радикальний відхід від нашої попередньої моделі GPLv2/подвійної комерційної ліцензії, що дозволяє використовувати Cheerp 3.0 для будь-яких цілей без обмежень.

Про Cheerp

Проект дозволяє поєднувати код C/C++ і JavaScript у веб-додатку з можливістю доступу з коду JavaScript до функцій, спочатку розроблених на C/C++, і з коду C/C++ до об’єктів JavaScript, бібліотек JavaScript, веб-інтерфейсів API та всіх функцій DOM, а також дозволяє створювати змішані збірки, частину код, який компілюється в JavaScript і частково в WebAssembly. Підтримує проекти збирання, які використовують стандартні бібліотеки libc і libc++.

У порівнянні з компілятором Emscripten, Cheerp генерує більш оптимізований і компактний проміжний код WebAssembly (У середньому кінцевий розмір файлу на 7% менший.)

Концептуально відмінності зводяться до того, що Емскриптен використовується як об’єктний формат WebAssembly і виконує зв’язування та оптимізацію на етапі постобробки WebAssembly (wasm-opt). Cheerp використовує байт-код LLVM як проміжне представлення для бібліотек і об’єктних файлів, що дозволяє ширше оптимізувати проект за допомогою метаданих рівня LLVM без необхідності постобробки.

Пов'язана стаття:
Emscripten 3.0, набір інструментів для створення WebAssembly з використанням LLVM

Крім того, Cheerp використовує оптимізатор PreExecuter для превентивного виконання коду під час компіляції, наприклад, для перетворення конструкторів, які використовуються для ініціалізації глобальних об’єктів, на константи. Крім того, під час компіляції використовується PartialExecuter, який на основі аналізу параметрів функції видаляє код, який гарантовано не буде використаний під час виконання.

Cheerp також може генерувати код JavaScript для динамічної роботи з пам’яттю. покритий сміттєзбірником. Зокрема, замість емуляції традиційного адресного простору з типізованими масивами Cheerp забезпечує пряме відображення об’єктів C++ на об’єкти JavaScript, що зменшує споживання пам’яті, оскільки збирач сміття JavaScript має можливість видаляти невикористані об’єкти. Щоб підвищити продуктивність, згенерований проміжний код WebAssembly використовує розширення SIMD для організації розпаралелювання операцій з даними.

Cheerp можна використовувати як платформу для створення вбудованих веб-додатків клієнт/сервер на C++. У поточній практиці прийнято розробляти окремий інтерфейс на основі браузера, написаний на JavaScript, і окремий бек-енд, написаний на PHP, Python, Ruby або JavaScript/Node.js.

Cheerp надає засоби для створення повних веб-додатків C++, які підтримують як серверну, так і зовнішню частину в одній кодовій базі.

Під час процесу збірки на стороні сервера компілюється власний код, а інтерфейс перетворюється на представлення JavaScript. Налагодження всіх компонентів проекту, в тому числі перетворених на JavaScript, здійснюється за допомогою вихідних текстів C++ за технологією Source Map.

Нарешті, якщо вам цікаво дізнатись більше про це, ви можете перевірити деталі в наступне посилання.

Код компілятора базується на розробках LLVM і Clang і включає додаткові оптимізації для підвищення продуктивності та зменшення розміру скомпільованого виводу.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: AB Internet Networks 2008 SL
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.