Темы



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

Коротко сгенерировано ИИ по тексту статьи
  • Выпущен Emscripten 7.0 для компиляции C/C++ и других языков с LLVM-фронтендами в WebAssembly для браузеров, Node.js и wasm runtime.
  • В версии 7.0 есть несовместимые изменения: добавлена libemcc, а libclang_rt.profile подключается только при включённом профилировании.
  • Повышены минимальные версии браузеров: Chrome 93, Firefox 92 и Safari 15.4.

Почему это важно: Инструментарий позволяет выполнять в Web код независимо от языка, на котором он изначально написан.

Опубликован выпуск инструментария 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).



Источник: http://www.opennet.ru/opennews/art.shtml? num=66640

© OpenNet