denis19 общество denis19

В среду выполнения JavaScript и TypeScript Bun 1.1.28 добавлена поддержка вызова кода на языке C

В обновлении среды выполнения JavaScript и TypeScript Bun 1.1.28 разработчики проекта добавили экспериментальную возможность компиляции и выполнения обработчиков, написанных на языке C.По информации OpenNET, ранее в этом проекте для вызова низкоуровневого кода требовалось либо создавать N-API-плагины к движку V8, либо компилировать код в формат WebAssembly (WASM/WASI), что усложняло разработку и накладывало определённые ограничения.Новая версия Bun позволяет напрямую встраивать код на C в JavaScript и компилировать на лету с использованием компилятора TinyCC, а также подключать динамически связываемые библиотеки.Для работы с языком C в Bun используется прослойка bun:ffi, которая компилирует исходный код в машинные инструкции, подставляет его в память при выполнении и обеспечивает автоматическую конвертацию типов данных между JavaScript и С.Разработчики пояснили, что накладные расходы при обращении к скомпилированному коду на C сведены к минимуму и приводят к задержке на уровне около 2 наносекунд на каждый вызов внешних функций на C.

В качестве примера в описание обновления Bun показано, как можно напрямую обращаться к библиотекам FFmpeg для преобразования коротких видео — за счёт исключения таких операций, как ответвление отдельного процесса и выделения памяти для каждого видео, общее время выполнения тестового задания при использовании bun:ffi удалось сократить в три раза.Примечательно, что уже вышла версия Bun 1.1.29, где для кода на языке C добавлена поддержка N-API (napi), благодаря которому написанные на языке С обработчики могут возвращать объекты, строки, массивы и другие непримитивные значения JavaScript, помимо свойственных языку C типов, таких как int и float.

DMCA