Недавно было объявлено Выпуск 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 (васм-опт). Cheerp использует байт-код LLVM в качестве промежуточного представления для библиотек и объектных файлов, что позволяет проводить более широкую оптимизацию всего проекта с использованием метаданных уровня LLVM без необходимости постобработки.
Кроме того, Cheerp использует оптимизатор PreExecuter для упреждающего выполнения кода во время компиляции, например, для преобразования конструкторов, используемых для инициализации глобальных объектов, в константы. Кроме того, во время компиляции используется PartialExecuter, который на основе разбора параметров функции удаляет код, который гарантированно не будет использоваться при выполнении.
Cheerp также может генерировать код JavaScript для динамической работы с памятью. покрывается сборщиком мусора. В частности, вместо эмуляции традиционного адресного пространства с типизированными массивами Cheerp обеспечивает прямое сопоставление объектов C++ с объектами JavaScript, что снижает потребление памяти, поскольку сборщик мусора JavaScript может удалять неиспользуемые объекты. Для повышения производительности сгенерированный промежуточный код WebAssembly использует расширения SIMD для организации параллелизации операций с данными.
Cheerp можно использовать в качестве платформы для создания встроенных веб-приложений. клиент/сервер на С++. В современной практике принято разрабатывать отдельный интерфейс для браузера, написанный на JavaScript, и отдельный сервер, написанный на PHP, Python, Ruby или JavaScript/Node.js.
Cheerp предоставляет средства для создания полных веб-приложений на C++, которые поддерживают как серверную, так и внешнюю части в единой кодовой базе.
В процессе сборки серверная часть компилируется в собственный код, а интерфейс преобразуется в представление JavaScript. Отладка всех компонентов проекта, в том числе конвертированных в JavaScript, осуществляется с использованием исходных текстов C++ с использованием технологии Source Map.
Наконец, если вам интересно узнать об этом больше, вы можете проверить подробности в по следующей ссылке.
Код компилятора основан на разработках LLVM и Clang и включает дополнительные оптимизации для повышения производительности и уменьшения размера скомпилированного вывода.