22 января 2025 года состоялся релиз Bun 1.2 — среды выполнения JavaScript и TypeScript с возможностью отладки кода и поддержкой популярных веб-фрейворков. Выпуск Bun 1.1 произошёл в апреле 2024 года, проект Bun 1.0 вышел в сентябре 2023 года.
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.
«Мы добавили массу новых функций и API, которые упрощают создание полнофункциональных приложений JavaScript и TypeScript. В Bun 1.2 мы начали запускать набор тестов Node.js для каждого изменения, которое мы вносим в Bun. С тех пор мы исправили тысячи ошибок, и следующие модули Node.js теперь проходят более 90% своих тестов с Bun», — пояснили разработчики проекта.
Основные изменения в Bun 1.2:
значительный прогресс в Bun в направлении совместимости с Node.js;
Bun теперь имеет встроенный API хранилища объектов S3: Bun.s3;
Bun теперь имеет встроенный клиент Postgres: Bun.sql (скоро появится MySQL);
bun install теперь использует текстовый файл блокировки: bun.lock;
Express в 3 раза быстрее в Bun.
В Bun 1.2 популярный фреймворк Express может обслуживать HTTP-запросы до 3 раз быстрее, чем в Node.js. Это стало возможным благодаря улучшению совместимости с node:http и оптимизации HTTP-сервера Bun.
Клиент S3 в Bun 1.2 написан на нативном коде, а не на JavaScript. Если сравнить его с использованием пакетов вроде @aws-sdk/client-s3 с Node.js, он в 5 раз быстрее при загрузке файлов из контейнера S3.
Предварительный обзор некоторых улучшений производительности, которые разработчики внесли в Bun 1.2:
Бенчмарк Bun 1.2 Express.js ‘hello world’:
Бенчмарк Bun 1.2 Postgres ‘Load a huge table’:
Бенчмарк Bun 1.2 WebSocket chat server:
В сентябре 2024 года в обновлении среды выполнения JavaScript и TypeScript Bun 1.1.28 разработчики проекта добавили экспериментальную возможность компиляции и выполнения обработчиков, написанных на языке C. Обновлённая версия Bun позволяет напрямую встраивать код на C в JavaScript и компилировать на лету с использованием компилятора TinyCC, а также подключать динамически связываемые библиотеки. Для работы с языком C в Bun используется прослойка bun:ffi, которая компилирует исходный код в машинные инструкции, подставляет его в память при выполнении и обеспечивает автоматическую конвертацию типов данных между JavaScript и С.
В конце апреля 2024 года для среды Bun вышел свой компактный crash reporter для Zig и C++. Отчёт о сбое умещается в URL-адрес размером около 150 байт, не содержащий никакой личной информации.
Источник: habr.com