LINUX.ORG.RU

Bun v1.1.30

 bun, , , ,

Bun v1.1.30

0

3

Тихо и незаметно была опубликована новая стабильная версия Bun – 1.1.30.

Bun – это среда выполнения ECMAScript / JavaScript, по многим параметрам аналогичная nodejs. В основе Bun используется JavaScriptCore от Apple, но сам Bun как и многие его модули написан на языке zig. Bun старается быть максимально совместимым с nodejs по опциям командной строки, поддерживает модули ECMAScript (ESM) и CommonJS. Управление пакетами npm и поддержка typescript встроены прямо в приложение как нативный код, и программы на typescript могут исполняться напрямую интерпретатором без предварительной конфигурации.

Однако Bun не является лишь «копией» nodejs по своим возможностям. Помимо более быстрой работы в ряде сценариев (начиная прямо с запуска приложения) и почти полной поддержки доступного в nodejs API, Bun предоставляет широкие возможности для приложений на сервере – от работы с файлами до трансформации HTML-дерева (HTMLRewriter), модулем транспиляции typescript (Bun.Transpiler), встроенной работе с базами данных sqlite, модулей для взаимодействия с нативными библиотеками платформы через API яызка Си – ffi, встроенный инструментарий тестирования и множество других возможностей.

Кроме того, в экспериментальном режиме Bun поддерживает интеграцию с кодом на Си через прозрачный вызов tcc:

hello.c:

	int hello()
	{
	  return 42;
	}

hello.js:

	import { cc } from "bun:ffi";
	import source from "./hello.c" with { type: "file" };

	const {
	  symbols: { hello },
	} = cc({
	  source,
	  symbols: {
	    hello: {
	      args: [],
	      returns: "int",
	    },
	  },
	});

	console.log("What is the answer to the universe?", hello());


$ bun hello.js
What is the answer to the universe? 42

В этом релизе среди прочего был добавлен парсер CSS на основе LightningCSS который специально для этого был переписан с таких legacy-технологий как rust на zig, что позволило прозрачно интегрировать css и typescript, и теперь можно импортировать css-файл напрямую в модуль typescript:

index.ts:
	import "./style.css";
	import Component from "./MyComponent.tsx";

	// ... rest of your app

style.css:
	/* результат сборки: */
	/* style.css */
	.hello {
	  background: red;
	}

	/* MyComponent.css */
	.MyComponent {
	  color: green;
	}

Bun позволяет собрать всё приложение со всеми ресурсами в единый исполняемый файл.

>>> Подробности

★★★★★

Проверено: hobbit ()
Последнее исправление: unfo (всего исправлений: 5)

Rust уже легаси? Приятно, даже не пришлось учить.

mak8kammerer
()

Тихо и незаметно была опубликована новая стабильная версия очередного жабаскриптового ненужно.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

Тебе не нужно, вот и проходи мимо. Между прочим, это лучшее, что случалось с джаваскриптом. Для девопсов и деплоинга штука агонь.

Gonzo ★★★★★
()
Ответ на: комментарий от goingUp

node vs deno vs bun?

Шо то г, шо это г.

Имеет ли смысл переходить с ноды?

Конечно имеет, на что-нить адекватное, а не другой жабоскрипт.

ya-betmen ★★★★★
()
Ответ на: комментарий от ya-betmen

на что-нить адекватное

Вот когда критикуешь что-то, самое главное не называть альтернативу, ибо обосрут еще больше)

goingUp ★★★★★
()
Ответ на: комментарий от ya-betmen

Конечно имеет, на что-нить адекватное, а не другой жабоскрипт.

ну давай так. Ты умеешь в TS? Какие у него сильные и слабые стороны?

Раз тебе намекнули, но ты продолжаешь, так и быть, мы не будем назвать тебя тупым самовлюблённым лохом, если ты озвучишь чильные и слабые стороны TS, ведь Bun имеет встроенную подержку ‘а не другой жабоскрипт.’

Eulenspiegel
()
Ответ на: комментарий от goingUp

Какие ещё альтернативы? Этот народ думает, что ЖС это такие скриптики в браузере, которые они режут васянскими плагинами, чтобы их кор2дуо не так адски тормозил. Там уровень сознания именно такой.

Clayman ★★
()
Румынский |     Русский
----------|------------------
bun e bun | хорошо это хорошо
futurama ★★★★★
()
Ответ на: комментарий от goingUp

Свежий Deno имеет прослойку совместимости с Node и NPM, как я понял теперь куда удобней. А Bun пока как был экспериментальной альтернативой, так и остаётся.

ac130kz ★★
()
Ответ на: комментарий от goingUp

На bun или deno - однозначно стоит если проект активно развивается/поддерживается. Если не активно то можно точечно оптимизировать стэк, например npm заменить на pnpm, CRA на Vite (если фронт).

Между bun и deno ИМХО первый для замены node.js в существующем проекте (у меня на bun получилось перейти просто заменив npm на bun install), второй для начала нового (потому что весь тулинг уже встроен и можно сразу писать код и деплоить).

WSL_user
()
Ответ на: комментарий от Clayman

кор2дуо не так адски тормозил

кор2дуо ващето вытягивает декодирование FullHD. Это довольно приличный камень.

LamerOk ★★★★★
() автор топика
Ответ на: комментарий от WSL_user

второй для начала нового (потому что весь тулинг уже встроен и можно сразу писать код и деплоить).

А чего нехватает bun’у?

LamerOk ★★★★★
() автор топика

Называется «булочка», на картинке - хинкали. Ну да ладно, главное, что аналитики ЛОРа одобряют. Ничего не имею против JS на сервере.

Vidrele ★★★
()

async/await там как реализован?

splinter ★★★★★
()
Ответ на: комментарий от Eulenspiegel

ну давай так.

Давай так, ты не пытаешься сказать, что между жабоскриптом и типоскриптом есть принципиальная разница, а мы не называем тебя вебмакакой, не умеющий в программирование.

ya-betmen ★★★★★
()
Ответ на: комментарий от goingUp

Что скажут лоровцы по поводу node vs deno vs bun?

Теорема Эскобара.

Имеет ли смысл переходить с ноды?

Имеет смысл переходить на Go/Rust. Если что, понятно, что нода не язык)

th3m3 ★★★★★
()
Ответ на: комментарий от Gonzo

Для девопсов и деплоинга штука агонь.

Впервые слышу, чтобы девопсы упарывались js. Девопсы курильщика какие-то.

th3m3 ★★★★★
()

но сам Bun как и многие его модули написан на языке zig.

Получается какой-то zig bun!

Smacker ★★★★★
()

Название шикарное конечно, банан - как раз то, что нужно жопоскриптеру.

bread
()
Ответ на: комментарий от goingUp

самое главное не называть альтернативу

Так подробностей-то нет, вдруг у тебя просто домашняя страничка на ноде и можно на энжиникс переехать.

ya-betmen ★★★★★
()

переписан с таких legacy-технологий как rust на zig

Зачотный наброс в новостях.

bread
()
Ответ на: комментарий от LamerOk

deno fmt, deno lint из того что приходит в голову. Очень неприятно настраивать eslint и ждать линт в CI занимающий почти половину времени сборки. Prettier не так плох, но также не быстр.

WSL_user
()

Господь, жги - здесь уже ничего не исправить!

BydymTydym
()

Иконка прикольная! Всё остальное прошло мимо меня :(

Old-Cat
()
Ответ на: комментарий от ya-betmen

Давай так, ты не пытаешься сказать, что между жабоскриптом и типоскриптом есть принципиальная разница, а мы не называем тебя вебмакакой, не умеющий в программирование.

Принял подачу. Я могу себя назвать Space monkey, чё нет? А вот ты расписался, петушок, в своём профессионализме. Теперь ты самовлюблённый лошок-петушок.

Eulenspiegel
()
Ответ на: комментарий от Eulenspiegel

Спейс тут ни при чём. Не расстраивайся ты так.

ya-betmen ★★★★★
()

написан на языке zig

Моё почтение

shalom_ ★★
()
Ответ на: комментарий от goingUp

Я deno щупал, на bun смотрел. Мой вердикт - не нужно. У меня есть небольшой проект на deno, я задолбался его переписывать каждые полгода, постоянно что-то ломают. Нода просто решает все задачи, которые стоят перед серверным жаваскриптом, при этом она уже лет 10 как стабильна. Просто нет никакой причины смотреть куда-то ещё. Больше пользоваться этими проектами не планирую.

PS кстати ровно то же могу сказать про zig. Rust хотя бы привносит в индустрию систему типов, решающую ряд практических проблем. Зачем нужен zig - для меня загадка. Если ты профессионал, ты пишешь на C++. Если тебе надо по-быстрому написать что-то быстрое, не мороча голову, ты пишешь на C. Если ты хочешь что-то супер-модерновое - ты пишешь на Rust. Какие причины могут побудить писать человека на Zig я не понимаю просто совсем. Просто по приколу - без вопросов, но за деньги - нет.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 3)

Bun – это среда выполнения ECMAScript / JavaScript, по многим параметрам аналогичная nodejs. В основе Bun используется JavaScriptCore от Apple, но сам Bun как и многие его модули написан на языке zig

ну то есть все как обычно. Рюшечки на нескучных современных языках с супер-пупер инновационными системами сборки, а всю основную работу делает устаревшая противная плюсовая библиотека на мерзком цмаке.

Lrrr ★★★★★
()
Ответ на: комментарий от kott

азиатская паровая булочка - тоже bun, типа пигоди или пян-се

Ах вот оно что! Ел такую один раз в жизни. Там не было ничего кроме рисового теста, но вкус понравился.

Vidrele ★★★
()
Ответ на: комментарий от Rodegast

Это Маньтоу. Только с гривой наверху. Форма у них разной может быть.

egzakharovich
()
Ответ на: комментарий от kott

В следующем проекте, сделаю маскотом котлету по киевски!

А назову: Zroupian Надоели соевые названия и соевая экспертиза

zxflux
()
Последнее исправление: zxflux (всего исправлений: 1)
Ответ на: комментарий от vbr

Если ты хочешь что-то супер-модерновое - ты пишешь на Rust. Какие причины могут побудить писать человека на Zig я не понимаю просто совсем.

Zig более модерновый уже просто потому, что появился на год позже. Для многих этой причины достаточно. :) Другим важней скорость компиляции и размер бинарника.

dataman ★★★★★
()
Ответ на: комментарий от dataman

Zig и Rust не корректно сравнивать. Zig простой язык использующий классические давно устоявшиеся концепции, Rust революционный язык с новыми концепциями работы с памятью.

Rust еще надо понять, выучить и попрактиковаться в написании кода под новые концепции. Zig просто взять для работы.

A Simple Language

Focus on debugging your application rather than debugging your programming language knowledge.

lbvf50txt
()
Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от Clayman

ЖС это такие скриптики в браузере

Ну а что это еще? Скриптики вылезли из браузера но как были вспомогательными скриптиками так и остались, а смысл жс как был в том что настоящие разрабы сред выполнения жс тратят избыточное время на разработку и пользователи тратят избыточные ресурсы на выполнение жс ради низкого порога вхождения (тут не только написание но и портабельность) в жс для тех кто пишет на жс, так и остался 🤷🏻‍♂️

rukez ★★★★
()

а можно как-то сделать так, чтобы вся эта жаваскриптовая хрень каким-то образом почила в бозе и в итоге аннигилировала?

у меня ощущение, даже скорее опыт, такое, что встроить в проект компиляцию жаваскриптовой ссанины - это то еще испытание, здесь даже опытные разработчики откровенно пасуют перед ошибками, которые «внезапно» возникают при сборке проекта.

borisych ★★★★★
()

нахрена ты влепил сюда метку С? Терь ко всем языкам, умеющим в натив штоле? д.б.

впрочем, тут случай обычного говнолорства:

Проверено:

без неожиданностей.

mrjaggers
()
Ответ на: комментарий от rukez

Скриптики вылезли из браузера но как были вспомогательными скриптиками так и остались

вы откровенно недооцениваете проблему: олдовые приложения проверяли данные на входе, нубы делают иначе: все что прилетело из браузера - этому можно доверять

borisych ★★★★★
()
Ответ на: комментарий от lbvf50txt

Zig и Rust не корректно сравнивать.

Я же написал – смотря что сравнивать. Я в Zig помаленьку контрибьютил десятки раз, но перестал, когда 8Gb стало не хватать для компиляции компилятора.

Zig простой язык использующий классические давно устоявшиеся концепции

Это не так.

dataman ★★★★★
()
Ответ на: комментарий от borisych

мда… прямо с глагне:

const std = @import("std");
const parseInt = std.fmt.parseInt;

test "parse integers" {
    const input = "123 67 89,99";
    const ally = std.testing.allocator;

    var list = std.ArrayList(u32).init(ally);
    // Ensure the list is freed at scope exit.
    // Try commenting out this line!
    defer list.deinit();

    var it = std.mem.tokenizeAny(u8, input, " ,");
    while (it.next()) |num| {
        const n = try parseInt(u32, num, 10);
        try list.append(n);
    }

    const expected = [_]u32{ 123, 67, 89, 99 };

    for (expected, list.items) |exp, actual| {
        try std.testing.expectEqual(exp, actual);
    }
}

оно изначально всрато на столько, насколько это возможно, здесь даже жавский:

"123 67 89,99".split("\\s|,")

нервно курит в сторонке

borisych ★★★★★
()
Ответ на: комментарий от mrjaggers

нахрена ты влепил сюда метку С?

Слепошарый, плиз.

Раз, Два.

LamerOk ★★★★★
() автор топика
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.