Bun: новый рантайм для JavaScript
На днях произошёл релиз публичной беты. Давайте разберёмся, чем интересен Bun.
Что такое рантайм?
Среда выполнения/рантайм(runtime) в информатике — вычислительное окружение, необходимое для выполнения компьютерной программы и доступное во время выполнения компьютерной программы. В среде выполнения, как правило, невозможно изменение исходного текста программы, но может осуществляться доступ к переменным окружения операционной системы, таблицам объектов и модулей разделяемых библиотек.
Bun конкурирует с хорошо известными NodeJS и Deno.
Как позиционирует себя Bun:
. Bun это новый JavaScript рантайм с нативным сборщиком, транспайлером, исполнителем задач и встроенным npm клиентом.
Главное отличие от конкурентов – скорость. И вот почему:
- Bun использует движок JavaScriptCore(который под капотом у Safari), который немного быстрее запускается и исполняет команды.
- Bun написан на Zig, низкоуровневом языке программирования, в котором реализовано ручное управление памятью.
- Автор Bun регулярно оптимизирует код.
Что умеет Bun
- транспилирует JSX/TS код
- поддерживает работу с npm
- имеет встроенное API для таких модулей, как fetch, WebSocket, ReadableStreams.
- Test Runner на подобие Jest, только быстрее
- Http Server
- Сборка приложения(бандлинг)
- Остальное.
Пробуем
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 проекта выяснил, что:
- не поддерживаются декораторы
- не реализован встроенный модуль node:child_process
Есть список с тем, что пока не работает.
Можете попробовать вызвать bun install в своём проект и сравнить скорость установки пакетов в сравнении с npm/yarn
В целом, я ждал релиза, так как следил за автором в твиттере последний год и было видно, как он вкладывал очень много сил и времени в проект. Надеюсь, с полноценным релизом выйдет больше стабильного функционала и можно будет запускать на проде. А ещё автор контрибьютит в JavaScriptCore, что продвигает веб вперёд.
Думаю, что это будет хорошая альтернатива NodeJS/Deno/Babel/SWC/ESBuild/Vite/Webpack/Parcel/Mocha/Jest/TSC/(. ). Что думаете?
Рантайм: подробный обзор и руководство
Runtime – это среда выполнения программы или набор инструментов, которые позволяют выполнять программное обеспечение на компьютере. Она обеспечивает взаимодействие программ и устройств компьютера, предоставляет инструкции по управлению программами и ресурсами, необходимыми для их выполнения.
Основная функция runtime – обеспечить исполнение программного кода. Он выполняет код, который был написан на другом языке программирования, обеспечивая функции, такие как управление памятью, обработка исключений и управление потоками.
Также runtime отвечает за запуск приложений и разрешение конфликтов между различными программами. Он может работать как самостоятельно, так и вместе с другими приложениями и средами.
Пример кода на C#:
using System; public class Program < public static void Main() < Console.WriteLine("Введите первое число: "); string num1String = Console.ReadLine(); int num1; if (Int32.TryParse(num1String, out num1)) < Console.WriteLine("Введите второе число: "); string num2String = Console.ReadLine(); int num2; if (Int32.TryParse(num2String, out num2)) < int sum = num1 + num2; Console.WriteLine("Сумма чисел равна: " + sum); >else < Console.WriteLine("Неверный формат второго числа!"); >> else < Console.WriteLine("Неверный формат первого числа!"); >> >
Это простая программа, которая запрашивает у пользователя два числа, складывает их и выводит результат на экран. Здесь мы используем runtime для выполнения программы на языке C#. Если бы не было runtime, мы не смогли бы выполнить данный код на компьютере.
Си Рантайм: все, что нужно знать для стабильной работы программ на C
Кратко говоря, C Runtime (CRT) – это библиотека, которая предоставляет функции и инструменты для работы программ на языке C. CRT включает в себя функции для работы с файлами, строками, памятью, вводом-выводом и другие.
Основная цель CRT состоит в том, чтобы обеспечить удобный интерфейс для взаимодействия между операционной системой и программой на языке C.
Примеры функций из CRT:
- printf() – функция для вывода текста в консоль
- scanf() – функция для считывания ввода от пользователя
- malloc() и free() – функции для выделения и освобождения памяти
- fopen() и fclose() – функции для открытия и закрытия файла
- memcpy() – функция для копирования памяти из одного места в другое
Примеры кода, использующего CRT:
printf(“Вы ввели: %s”, str);
В этом примере используются функции printf() и scanf() из CRT для вывода сообщения и считывания ввода пользователя.
ptr = (int*) malloc(3 * sizeof(int));
printf(“Ошибка выделения памяти”);
printf(“Элементы массива: %d %d %d”, ptr[0], ptr[1], ptr[2]);
В этом примере используются функции malloc() и free() из CRT для выделения и освобождения памяти, а также тип данных exit(), который является частью стандартной библиотеки языка С, но все же имеет некоторое отношение к CRT.
При подготовке материала использовались источники:
https://habr.com/ru/news/676102/
https://progery.ru/runtime
https://progery.ru/c-runtime