В среду выполнения 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. Механизм вызова обработчиков на языке C действует и при динамической загрузке любых библиотек с C ABI, независимо от того, на каком языке они написаны изначально (C++, Rust, Zig и т.п.), что позволяет вызывать из кода на JavaScript предоставляемые данными библиотеками функции без отдельной стадии пересборки. Например, теперь можно обращаться из JavaScript к системным API.

1 апреля 2024 года состоялся релиз Bun 1.1 — среды выполнения JavaScript и TypeScript с возможностью отладки кода и поддержкой популярных веб-фрейворков. Это событие произошло спустя шесть месяцев после выхода первой мажорной версии проекта Bun 1.0.

Bun — это современная среда выполнения JS типа Node.js или Deno со встроенной поддержкой JSX и TypeScript. Она разработана с акцентом на быстром запуске, высокой производительности и самодостаточности. Внутри Bun есть транспилятор (транспилирующий компилятор) JavaScript, встроенный в среду выполнения. Это означает, что при работе с Bun можно запускать файлы JavaScript, TypeScript и даже JSX/TSX без каких-либо зависимостей.

Bun использует движок JavaScriptCore, разрабатываемый WebKit, который запускается и выполняет операции немного быстрее, а также использует память немного эффективнее, чем классические движки типа V8. Bun написан на Zig — языке программирования низкого уровня с ручным управлением памятью, чем объясняются высокие показатели его скорости.

В Bun работают полнофункциональные приложения, созданные с помощью Next.js, Remix, Nuxt, Astro, SvelteKit, Nest, SolidStart и Vite. Разработчики проекта пояснили, что Bun запускается в 4 раза быстрее, чем Node.js. Эта разница только увеличивается при запуске файла TypeScript, который требует транспиляции, прежде чем Node.js сможет его запустить. Bun запускает тестовый файл hello world на TypeScript в 5 раз быстрее, чем esbuild с Node.js.

В конце апреля 2024 года для среды Bun вышел свой компактный crash reporter для Zig и C++. Отчёт о сбое умещается в URL-адрес размером около 150 байт, не содержащий никакой личной информации.

Источник: habr.com

0 0 голоса
Рейтинг новости
9033
0
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии