TGViewer
HowProgrammingWorks - JavaScript and Node.js Programming HowProgrammingWorks - JavaScript and Node.js Programming @howprogrammingworks · 6.52K subscribers
Post #2074 3.65K
Все на борьбу с primordials!

Primordials тормозят развитие Node.js, мешают поддерживать код платформы, быстро онбордить новых контрибьюторов, искать и исправлять баги, влияют на деоптимизацию кода, и в итоге все работает медленнее.

Primordials - это сохраненные на старте ссылки на чистые встроенные объекты и методы JS. Они нужны, чтобы userland-патчи Array/Object/Promise не ломали internals. Плюсы: надежность. Но это делается не для безопасности, а чтобы миксины и полифилы не влияли на код внутри Node.js. Минусы: более сложный код, сложнее контрибьютить и искать баги, возможна деоптимизация.

Как это выглядит в коде ноды:
const { ArrayFromAsync, PromisePrototypeThen } = primordials;
// ...
PromisePrototypeThen(
ArrayFromAsync(new Glob(pattern, options).glob()),
(res) => callback(null, res),
callback,
);


Но есть альтернативные решения, например: разделить контекст выполнения на два изолированных V8-контекста во время старта: один контекст для userland-кода, другой для внутреннего кода Node.js. Userland-код может свободно monkey-патчить Array, Object, Promise, Error, но эти изменения не будут влиять на внутренние копии, которые использует Node.js core.

Плюсы:
* Внутренний код становится ближе к обычному JavaScript
* Ниже порог входа для контрибьюторов
* Меньше runtime-накладных расходов
* Меньше проблем с оптимизациями V8

Минусы:
* Встроенные классы из разных контекстов не идентичны: Error !== context.Error
* Проверки instanceof могут ломаться на границе контекстов
* Обработка ошибок становится сложнее
* Внутренние API, которые передают объекты в userland, требуют специальных решений
* Контексты тоже не являются security-механизмом

Когда внутренние API передают объекты в userland, например:
.on('error', (error) => console.log(error instanceof Error))

это вернет false. Но мы можем создавать эту ошибку через:
new userland.Error('message')


Тут мое предложение решения: https://github.com/nodejs/TSC/issues/1439#issuecomment-4329370385
Тут критика primordials от специалиста по оптимизации: https://github.com/nodejs/TSC/issues/1438

Поддержите инициативу, добавьте свои варианты решений, если есть идеи, и критику предложенных решений.
  • ❤ 12
  • 👍 3
  • 🔥 1
More from @howprogrammingworks
  1. Sep 28, 2026В версии reslop v0.2.4 появилась возможность запускать тесты и инструменты с компактным вы…
  2. Sep 25, 2026https://youtu.be/hKigdmvste0
  3. Sep 24, 2026В эту субботу будет стрим по применению AI в создании архитектуры. - архитектурный дрейф и…
  4. Sep 24, 2026Post #2176
  5. Sep 23, 2026Возможно, не все уловили, для чего reslop: - как в гитхабе и гитлабе есть интерфейс для ре…
  6. Sep 22, 2026Reslop 0.2.0 вышел С версии 0.1.3, он вырос из интерактивного инструмента для ревью diff'о…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →