Доступен Emscripten 4.0, компилятор из C/C++ в WebAssembly
Опубликован выпуск инструментария Emscripten 4.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 и Unit, а также движок симуляции физических процессов Bullet).
Помимо компиляции кода на C/C++ отдельно развиваются проекты для запуска в браузерах интерпретаторов и виртуальных машин для языков Lua, C#, Python, Ruby и Perl. Кроме того, возможно применение фронтэндов к LLVM, отличных от Clang, например, фронтэндов для языков, как Swift, Rust, D и Fortran.
Присвоение номера версии 4.0 связано с внесением изменений, нарушающих совместимость на уровне ABI (при пересборке проекта в Emscripten 4.0 потребуется пересборка объектных файлов и библиотек, собранных прошлыми версиями Emscripten). Основные изменения в Emscripten 4.0:
Добавлена опция »-sWASM_LEAGCY_EXCEPTIONS» для выбора между старым и новым механизмами обработки исключений. По умолчанию продолжает использоваться старый механизм, так как не все браузеры реализовали возможности WebAssembly для работы новых обработчиков исключений.
Компоненты compiler-rt, libcxx, libcxxabi и libunwind обновлены до ветки LLVM 19.
- Минимально поддерживаемая в сборках версия браузера Safari (настройка MIN_SAFARI_VERSION) повышена с 14.1 до 15.0, что позволило по умолчанию задействовать несколько расширенных возможностей WebAssembly:
Включено использование новых инструкций для преобразования типа float в int (nontrapping-fptoint), которые вместо генерации исключения при переполнении результата возвращают минимально или максимально возможное значение (необходимо для SIMD).
Включена опция WASM_BIGINT, при которой для обмена целочисленными 64-разрядными значениями между WebAssembly и кодом на JavaScript применяется тип BigInt.
Включена опция BULK_MEMORY, при которой для реализации Си-функций memcpy и memset применяются WebAssembly-инструкции memory.copy и memory.fill.
В функции PATH.basename () отключена нормализация путей (PATH.normalize ()), т.е. вызов 'PATH.basename («a/.»)' теперь вернёт ».» вместо «a», а 'PATH.basename («a/b/…»)' вернёт »…» вместо «a».
При использовании опции »-sMODULARIZE» factory-функции, которые создают и возвращают экземпляры WebAssembly-модулей и объектов для JavaScript, теперь помечены признаком «async» при компиляции в режиме WASM_ASYNC_COMPILATION, применяемом по умолчанию.
Добавлена возможность указания JavaScript-библиотек, используя опцию »-lfoo.js». В отличие от опции »--js-library» поиск библиотеки выполняется во всех путях, указанных через опцию »-L».
При компоновке в отладочном режиме (-O0 или -sASSERTIONS) по умолчанию задействован отладочный вариант функции malloc со включёнными assert-проверками, выявляющими такие ошибки, как двойной вызов функции free ().
Источник: http://www.opennet.ru/opennews/art.shtml? num=62553
OpenNet прочитано 4362 раза