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)
Ответ на: комментарий от goingUp

Пока слишком сыро, ну нафиг. Если переходить — то на что-то совсем другое. Go, например.

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

зато он наш, попенсорсный!

Will Hare support Windows or macOS?

Hare does not and will not officially support proprietary operating systems upstream. However, Hare is a standardized language and third-parties may build and maintain forks or compatible implementations of Hare targeting these systems.

Is a language server available?

Not yet, but maybe you’ll write one? Ask about it in the community spaces.

Can I use multithreading in Hare?

Probably not.

Why doesn’t Hare have generics?

Omitting generics (and similar features) in Hare is a deliberate design choice which simplifies the language considerably and is more aligned with its design roots in C.

всё как любит местный люд

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

У них есть кнопочка «Ask AI», я спросил, почему же такое имя:

I wasn’t able to find a direct answer to your question. The information sources provided don’t contain any specific explanation for why Bun was named as such. For the most accurate and up-to-date information about Bun, including any details about its naming, you may want to check the official Bun documentation or reach out to the Bun community directly.

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

Этот народ думает, что ЖС это такие скриптики в браузере

Нет, ЖС это такой рак, который не следит за

1+"1"="11"
и ещё ест мозг начинающих разрабов, отчего такой код повсеместно + вызовы конструкторов вместо функций у нубов.

«нет времени объяснять, программирувай!»

TS, конечно, всё сильно улучшил, но вызвал ответ - «а нафига оно надо?»

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

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

cocucka_B_TECTE
()
Последнее исправление: cocucka_B_TECTE (всего исправлений: 1)

Ладно, если без шуток, хоть кто-то видел этот Бунд или Дину в продакшне? Больше похоже на бессмысленный фофан от совсем изнывающих от безделья буржуинов. Теперь ещё зигу какую-то притащили, совсем уже куку.

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

Что скажут лоровцы по поводу node vs deno vs bun? Имеет ли смысл переходить с ноды?

На Bun нет, потому что он оптимизирован исключительно под макось, и именно там они рисуют свои красивые циферки, А deno это то чем должна быть нода без легаси. Но использовать всё равно нужно ноду, потому что большинство использует ноду, а используя чёт другое есть неплохие риски прогореть и иметь знания по ненужной технологии. Стоит изучать только ради интереса, но упор делать на ноду.

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

Язык не должен за этим следить, js это такой инструмент, который ты можешь использовать как хочешь, он тебя не ограничивает в творчестве.

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

У меня есть небольшой проект на deno, я задолбался его переписывать каждые полгода, постоянно что-то ломают. Нода просто решает все задачи.

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

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

Ну и впринципе и то, и то сделано одним человеком.

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

Перед тем как писать вам я проскролил Language Reference, ничего из ряда вон нового я не нашел. За исключением defer и async, но их вряд ли можно назвать чем-то революционно новым.

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

Там «бесцветный» async/await.

Еще про comptime любопытная история.

Мне кажется, что революционного ждать от языка с надписью «a simple language» аршинными буквами на страничке не следует. Надо смотреть, удачно ли выбран набор.

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

зато он наш, попенсорсный!

всё как любит местный люд

На заглавной странице написано, что Hare это микроязык.

Hare fits on a 3½" floppy disc — these will be available for purchase when Hare 1.0 is released!

Второй абзац faq:

Hare may be the language you need; otherwise, it’s not. Hare is not a “kitchen sink” language: Hare does not attempt to solve every problem, but it does strive to solve the problems we’re interested in well.

Но @InterVi надо прийти и начать возмущаться, что на велосипеде нет 100 сильного двигателя.

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

То было давно. Сейчас рулят веб-апликухи, смузи-приложухи и говнокодзащекуберухи. Не знаю, плохо это или хорошо, но эта штука неплохая замена NodeJS, на которой, как известно, написано куча всего вокруг (нетфликсы, линкедины, трелло, пейпалы, уберы и прочие уюберы). Оно реально быстрее и гибче (гибучее) Ноды. На счет банков то был пример для затравки, там сейчас Нода в основном для клиент-банков. Просто разрабы еще не осознали всю прелесть сабжа.

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

Просто разрабы еще не осознали всю прелесть сабжа.

Может и осознали. Но там же кровавый интерпайз, будут долго тянуть легаси.

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

Если тебе так уж хочется испачкать руки в Си или плюсах, то зачем тебе веб, иди пиши прошивки для микроволновок.

sbu_shpigun
()
Ответ на: комментарий от I-Love-Microsoft

Мне показалось лук репчатый без зелени. Но логотип прекрасный

Пожалуй я не буду говорить о моих ассоциациях. Людей много... Ну и ничего прекрасного я не увидел :)

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

Если ты профессионал, ты пишешь на C++

Зачем нужен zig - для меня загадка

Ещё один подъехал, мнение имеет, а знаний - не имеет.

Нода просто решает все задачи, которые стоят перед серверным жаваскриптом

Сказал, аки Боженька!

Eulenspiegel
()

Хм, почему название проги так гейско звучит?… А, это для жаваскриптовых! И сразу стало понятно

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

это лучшее, что случалось с джаваскриптом.

Появление джаваскрипта само по себе было недоразумением. А когда его притянули на server-side, это стало началом катастрофы.

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

https://ziglang.org/

Ух…

  • No hidden control flow.
  • No hidden memory allocations.
  • No preprocessor, no macros.

Это либо скриптота (глядя на количество синтаксиса, нет), либо очень строгий язык с гарантиями, для Mission Critical модулей, которые даже перезапускать при падении нельзя. Которым вообще падать нельзя. Иначе зачем всё это?

A fresh approach to metaprogramming based on compile-time code execution and lazy evaluation.

Свежий он в 60-х был. 🤦 Подход всё ещё годный, но зачем врать «свежим»?

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

либо очень строгий язык с гарантиями, для Mission Critical модулей, которые даже перезапускать при падении нельзя. Которым вообще падать нельзя. Иначе зачем всё это?

Это аналог Си для тех, кого задолбал UB на каждом шагу, но кто не хочет ни сборщика мусора (который работает в фоне и тормозит в самое неудобное время) ни бороться с системой типов Rust (точнее со случаями, которые не смог доказать Borrow Checker).

Свежий он в 60-х был.

Там три пункта. Остальные два таки свежие.

monk ★★★★★
()

Уберите этот хинкаль с главной уже

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

Язык не должен за этим следить.

А разраб должен следить за языком? Или, базару ноль? Мозг повелевает языку, али наоборот?

js это такой инструмент, который ты можешь использовать как хочешь, он тебя не ограничивает в творчестве.

Спешу огорчить: творчество, а скорее его пределы, в таком случае зависят сугубо от тех, кто «завозит» его опции в ту или иную ВМ, среду исполнения, как не назови. Не Вы определяете «мейнстрим», а мейнстрим определяет «вас». Какое тут творчество?

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

То ли в 0.13, то ли в 0.14 сделали инкрементальную линковку, как раз для удобства работы над своим компиллятором.

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

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

Смотри так, как если бы этот язык был лучше С++ во всем. Нет макросов, нет шаблонов; есть лучшая на сегодня обработка ошибок, опшионалы из коробки. Отказ от рантаймов — из-за одной этой фичи я заменил сборку С++ проектов сборкой через zig c++. Рефлексия над полями тоже из коробки, причем сделана мягко и естественно.

Вся вкуснота сводится к мощной фиче комптайма. Это не какой-то особый режим. Это просто когда у тебя каждая const-сущность отрабатывает при компиляции. Собственно, сами исходники, и build.zig в частности, становятся похожи на скрипты, где компилятор все делает шаг за шагом.

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

Ничего не имею против жс, когда все сделано толково, с тактом и расстановкой. А не вот эта бОльшая часть современной вебни.

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

Если что, Zig ИМХО уже выглядит более интересным чем всякие Go и Rust’ы хотя бы из-за метапрограммирования. Я недоволен только тем что они называют его «свежим», а не самой фичёй. Ошибочная информация на главной странице языка в WWW на сам язык никак не влияет.

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

Чтобы далеко ходить, пример кода вокруг метапрограммирования. Библиотека в комптайме сама выяснит, что нужно сделать таблицу «Users» с полями smallint «id», text «name» и smallint «age». Пользовательский код начинает выглядеть чисто и аккуратно:

const Pg = @import("postgres").Pg;
var db = try Pg.connect(allocator, "postgresql://...");


const Users = struct {
      id: i16,
      name: []const u8,
      age: i16,
};

_ = try db.insert(Users{ .id = 1, .name = "Charlie", .age = 20 });
sarumeister
()
Ответ на: комментарий от Shadow

TS, конечно, всё сильно улучшил

Только что проверил, в TS 1+"1" так же равен "11"

Странный пример.

В жаве 1 + "1" тоже равен "11". И что?

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

ORM это ужасно.

Не родился пока язык, который может работать с БД.

Я, кстати, знаю, как его можно сделать.

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

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

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

Библиотека в комптайме сама выяснит, что нужно сделать таблицу «Users» с полями smallint «id», text «name» и smallint «age».

Когда-то я приводил этот пример для лисповых макросов. Потом понял, что именно этот пример очень плох: зачем создавать таблицы на компьютере разработчика, а не на том, где программа будет исполняться? А если создавать при запуске, то у Си++ то же самое.

К тому же, то же самое можно запихать в систему сборки.

Реально преимущество Zig - вычислимые в компайлтайме типы.

fn List(comptime T: type) type {
    return struct {
        items: []T,
        len: usize,
    };
}

читается логичнее, чем шаблоны Си++ и позволяет строить разные типы в зависимости от условий (в Си++ для этого используется магия SFINAE и очень сложно читать результат).

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

Создание таблиц по классам должно быть отдельной операцией которая выполняется при деплое, а не чтении/компиляции исходников. Как в alembic, например.

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

что нужно сделать таблицу что нужно делать реквест в таблицу

Не думал при компилляции создавать таблицу. Это конечно можно сделать, но пример задумывался про рефлексию над структурами и полями.

В комптайме информация о типах известна, и вот так будет обработана. zig-postgres

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