Bun: новый рантайм для JavaScript

bbd412a4f3491ba34a4c8f816437d953

На днях произашёл релиз публичной беты. Давайте разберёмся, чем интересен 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/(…?). Что думаете?

© Habrahabr.ru