Bun даёт JavaScript настоящие потоки с общей памятью, а описание PR написал Claude

30 лет JavaScript был однопоточным по замыслу. Открытый pull request в Bun даёт ему настоящие потоки ОС, делящие одну кучу. И человек, который ещё в 2017-м доказал, что это возможно, зашёл в тред и признался: он впечатлён, что с этим справилась LLM.

Вкратце

`new Thread(fn)` запускает замыкание на другом потоке ОС внутри той же кучи: без postMessage, без structured clone, без SharedArrayBuffer. Это реализация дизайна 2017 года, который до сих пор никто не довёл до релиза.

В середине описания спрятано главное: сборщик мусора по-прежнему останавливает весь мир. Читатель, разбирающийся во внутренностях VM, указал, что именно эта строка убьёт tail latency. А создатель Bun заодно подтвердил: всё описание PR сгенерировал Claude.

Что этот PR на самом деле меняет в JavaScript

Pull request #249 к форку JavaScriptCore от Bun добавляет то, чего в языке не было никогда: настоящую многопоточность с общей памятью. Вы пишете new Thread(fn, …), и замыкание выполняется в отдельном потоке ОС внутри той же кучи: объекты доступны напрямую, без postMessage, без structured clone, без обходного SharedArrayBuffer.

Карточка GitHub-pull-request для PR Bun с потоками общей памяти
Карточка GitHub-pull-request для PR Bun с потоками общей памяти

Под капотом это реализация эссе Филипа Пизло 2017 года Concurrent JavaScript: It Can Work! — плоские butterflies с TID-тегами, локи на уровне ячейки каждого объекта, сегментированные butterflies при первой общей записи. Заявленная просадка на последовательном коде — 0,45% в худшем случае при пороге в 1%; на 64-ядерной машине реализация, по сообщениям, держит около 0,89× от пропускной способности потоков Java на 16 потоках.

Загвоздка в одном слове: синхронный

Заголовочные цифры выглядят бесплатными, пока не дочитаешь до середины поста. Читатель, который работает с виртуальными машинами, пошёл искать именно это:

«Я кое-что знаю о VM… „Никакой просадки в однопоточном случае? Да ну“. И я был прав. В середине поста спрятана деталь… Сборщик мусора, останавливающий весь мир, убьёт tail latency во многих сценариях» — комментатор, работающий с внутренностями VM

Это несущая оговорка. В v1 сборка синхронная и останавливает каждый поток; конкурентная маркировка отложена. Для нагрузки, обслуживающей запросы, пауза «остановить весь мир» — именно то, чего нельзя себе позволить.

В тред зашёл человек, чей это дизайн

Статью 2017 года, которую этот PR превращает в код, написал Филип Пизло, тогда руководивший JavaScriptCore. Он её прочитал:

«Штука очень сложная, но не невозможная. Я сильно впечатлён, что хоть какая-то LLM на это способна» — Филип Пизло, автор исходного дизайна конкурентного JavaScript

Эта деталь не случайна. Создатель Bun Джарред Самнер подтвердил в треде, что текст написала машина: «И да, описание PR целиком от Claude», и описал, чем рискует мерж:

«Я автор этого PR… Этот PR страшнее мержить, чем PR с переписыванием Bun на Rust… Будь у нас и потоки, и структуры, компилятор TypeScript, скорее всего, вообще не пришлось бы переписывать на Go» — Джарред Самнер, создатель Bun

Не все рады одностороннему расширению языка. Голос со стороны стандартов прямо сказал, как это ложится на тех, кто реально владеет спецификацией:

«Я прогнал ваши предложенные изменения через TC39, и их первая реакция была просто „нет“. Так что, Bun — это новый IE6?» — комментатор, отнёсший предложение в TC39

Почему «Bun — новый IE6» — самая острая фраза треда

Выпад про IE6 и есть настоящий аргумент. Рантайм может выпустить примитив Thread с общей кучей хоть завтра; орган стандартизации не может его отозвать. Если достаточно кода начнёт зависеть от потоков только-в-Bun, поведение станет фактическим стандартом, который каждому другому движку придётся либо копировать, либо ломать. Ровно эта динамика сделала IE6 проблемой на десятилетие. Инженерия здесь по-настоящему сложна и, по оценке самого автора дизайна, по-настоящему хороша. Но тред нервничает не из-за паузы GC, а из-за того, что один рантайм решает будущее общего языка мержем.

Получайте такие разборы каждый день

Главные истории Hacker News — на email, в Telegram или RSS.

Следующая новость · 8 из 30 Читать дальше
🔥Hot Discussion

Британия ввела возрастной ценз в соцсетях, дети ушли на VPN — теперь власти взялись за VPN

Министр сказала депутатам, что вернётся в июле с заявлением по VPN, потому что её «не устраивают доказательства». Тред мгновенно вынес вердикт по этой петле: запрети что-то, люди обойдут запрет, запрети обход, повтори.

★ 290 · 💬 323 · birminghammail.co.uk · 3 мин