Bun: новый рантайм для JavaScript
На днях произашёл релиз публичной беты. Давайте разберёмся, чем интересен Bun.
Что такое рантайм?
Среда выполнения/рантайм(runtime) в информатике — вычислительное окружение, необходимое для выполнения компьютерной программы и доступное во время выполнения компьютерной программы. В среде выполнения, как правило, невозможно изменение исходного текста программы, но может осуществляться доступ к переменным окружения операционной системы, таблицам объектов и модулей разделяемых библиотек.
Bun конкурирует с хорошо известными NodeJS и Deno.
Как позиционирует себя Bun:
… Bun это новый JavaScript рантайм с нативным сборщиком, транспайлером, исполнителем задач и встроенным npm клиентом.
Главное отличие от конкурентов — скорость. И вот почему:
Bun использует движок JavaScriptCore (который под капотом у Safari), который немного быстрее запускается и исполняет команды.
Bun написан на Zig, низкоуровневом языке программирования, в котором реализовано ручное управление памятью.
Автор Bun регулярно оптимизирует код.
Что умеет Bun
Пробуем
Установка:
curl https://bun.sh/install | bash
Давайте напишем простой http server. Создаём файл http.js:
// http.js
export default {
port: 3000,
fetch(request) {
return new Response("Welcome to Bun!");
},
};
Запускаем: bun run http.js
Проверяем, открыв в браузере http://localhost:3000
Итого
Так как это бета, то многие вещи не работают. Например, попробовав запустить mocha-тесты с моего NodeJS проекта выяснил, что:
Есть список с тем, что пока не работает.
Можете попробовать вызвать bun install
в на своём проект и сравнить скорость установки пакетов в сравнении с npm/yarn
В целом, я ждал релиза, так как следил за автором в твиттере последний год и было видно, как он вкладывал очень много сил и времени в проект. Надеюсь, с полноценным релизом выйдем больше стабильного функционала и можно будет запускать на проде. Так же, автор контрибьютит в JavaScriptCore, что продвигает веб вперёд.
Думаю, что это будет хорошая альтернатива NodeJS/Deno/Babel/SWC/ESBuild/Vite/Webpack/Parcel/Mocha/Jest/TSC/(…?). Что думаете?