[ON] Доступен Emscripten 7.0, компилятор из C/C++ в WebAssembly

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6000
ОС: gnu/linux

[ON] Доступен Emscripten 7.0, компилятор из C/C++ в WebAssembly

Сообщение rssbot »

Опубликован выпуск инструментария Emscripten 7.0, позволяющего компилировать код на C/C++ и других языках, для которых имеются фронтэнды на базе LLVM, в универсальный низкоуровневый промежуточный код WebAssembly. Полученный результат можно использовать для интеграции с JavaScript-проектами, запуска в web-браузере, использования в Node.js или создания обособленных многоплатформенных приложений, запускаемых при помощи wasm runtime. Код проекта распространяется под лицензией MIT. В компиляторе используются наработки проекта LLVM, а для генерации WebAssembly и оптимизации задействована библиотека Binaryen.


Основной целью Emscripten заявлено создание инструмента, позволяющего выполнять в Web код независимо от языка программирования, на котором этот код изначально написан. В компилируемых приложениях могут использоваться вызовы стандартных библиотек C и С++ (libc, libcxx), расширения C++, многопоточность на базе pthreads, API POSIX и многие мультимедийные библиотеки. Отдельно предоставляются API для интеграции с Web API и кодом на JavaScript.

Emscripten поддерживает трансляцию вывода библиотеки SDL2 через Canvas, а также реализует поддержку OpenGL и EGL через API WebGL, что позволяет преобразовывать в WebAssembly графические приложения и игры (например, имеется порт тулкита Qt, поддерживаются игровые движки Unreal Engine и Unity, а также движок симуляции физических процессов Bullet).


Помимо компиляции кода на C/C++ отдельно развиваются проекты для запуска в браузерах интерпретаторов и виртуальных машин для языков Lua, C#, Python, Ruby и Perl. Кроме того, возможно применение фронтэндов к LLVM, отличных от Clang, например, фронтэндов для языков, как Swift, Rust, D и Fortran.



Присвоение номера версии 7.0 связано с внесением изменений, нарушающих совместимость. Основные изменения в Emscripten 7.0:
  • Обеспечено прямое связывание всех дополнительных модулей с runtime-библиотеками libclang_rt.builtins и libclang_rt.profile без необходимости экспортирования из основного модуля, как это делается в компиляторе clang.
  • Добавлена библиотека libemcc, в которую из libclang_rt.builtins вынесен код, специфичный для Emscripten.
  • Из runtime-библиотеки libclang_rt.builtins выделена библиотека libclang_rt.profile, которая теперь используется только при включении профилирования (например, при указании опций -fprofile-instr-generate или --coverage).
  • Размер буфера неименованных каналов увеличен до 64 КБ. Неблокирующая запись в заполненный канал теперь завершается ошибкой EAGAIN, но блокирующая запись пока остаётся неограниченной.
  • При компиляции и компоновке одной командой вспомогательные файлы, такие как ".dwo" при использовании опции "-gsplit-dwarf" или ".json" при использовании "-ftime-trace", теперь именуются как ‹output›-‹input›.‹ext› вместо ‹input›.‹ext›, что соответствует поведению clang.
  • Включено автоматическое определение зависимостей для JavaScript-библиотек. Для прямых обращений из одной JavaScript-библиотеки в другую теперь не требуется указание макроса "__deps", который остаётся необходимым только для косвенных зависимостей и зависимостей от скомпилированных библиотек C/C++.
  • Удалена переменная окружения EMCC_ONLY_FORCED_STDLIBS, которая ранее была объявлена устаревшей. Для отключения связывания со стандартными библиотеками следует использовать флаг "-nostdlib".
  • До кодовой базы LLVM 23.1.3 обновлены библиотеки libcxx, libcxxabi, libunwind и compiler-rt. Задействован выпуск mimalloc 3.6.1.
  • Повышены требования к версиям браузеров Chrome 85 -> 93 (август 2021), Firefox 79 -> 92 (сентябрь 2021) и Safari 15.0 -> 15.4 (март 2022).


Источник: https://www.opennet.ru/opennews/art.shtml?num=66640
(opennet.ru, основная лента)
Спасибо сказали: