21 Jul 2026, 14:50 UTC83 views1 reactionsread 8 August 2026 Ускоряем O(N + T), не меняя Big O. Часть 5. Зачем здесь WebAssembly
После реализации бакетов с показателем benchmark 0,922 секунды, остается два варианта:
1. продолжать бороться с огромным JavaScript файлом;
2. перенести самый горячий участок в WebAssembly.
Как уже можно было догадаться по заголовку, выбираем второй вариант.
Сразу обращаем внимание, что WebAssembly — не кнопка «сделать быстро/хорошо». Если прос…
🔥1
18 Jul 2026, 08:09 UTC384 views9 reactionsread 8 August 2026 Итоги CodeRun Summer: 15 задач и 636 попыток решения
Финал CodeRun Summer Challenge выглядит аккуратно: 15 задач из 15 и третье место среди JavaScript-решений.
Но за рейтингом остались 636 отправок, 443 WebAssembly-модуля и 548 тысяч строк тестов и бенчмарков. Финальные 15 файлов заняли всего 1 142 строки. На одну строку решения пришлось около 480 строк экспериментов.
Сложнее всего сказать когда соревнование алг…
🔥7🏆1👏1
17 Jul 2026, 18:00 UTC98 views2 reactionsread 8 August 2026 Ускоряем O(N + T), не меняя Big O. Часть 4. Кэш, бакеты и упаковка событий
В предыдущей части мы сохранили компактный Int32Array и отдельно обработали редкие переполнения. Пришло время заняться оптимизацией времени выполнения.
Для каждой заявки мы имеем две операции:
diff[a] += s;
diff[f] -= s;
Всего две записи, как это ускорять и зачем?
Итак, у нас две основные проблемы: большой массив, который не помещается…
🔥2
16 Jul 2026, 09:13 UTC98 views2 reactionsread 8 August 2026 Ускоряем O(N + T), не меняя Big O. Часть 3. Как оставить четыре байта и не сломать ответ
Во второй части мы попытались заменить Float64Array на более компактный Int32Array и уменьшили размер разностного массива с 80 до 40 МБ.
Но быстро выяснилось, что четыре байта могут незаметно изменить результат, так как сумма отдельных значений может не помещается в Int32.
Теперь перед нами стоит задача оставить экономию по …
❤2
15 Jul 2026, 14:07 UTC294 views4 reactionsread 8 August 2026 Ускоряем O(N + T), не меняя Big O. Часть 2. Четыре байта, которые могут изменить результат
В первой части мы получили решение через разностный массив со сложностью O(N + T) и результатом 1,589 секунды.
Big O отвечает на вопрос, как растет количество работы. Но внутри алгоритма куда более важную часть играют размер одной записи в памяти, количество временных объектов, случайные обращения к большому массиву, стоимо…
🔥3❤1
14 Jul 2026, 07:00 UTC133 views6 reactionsread 8 August 2026 Ускоряем O(N + T), не меняя Big O. Часть 1. Разностный массив — это только начало
На прошлой неделе просочился черновик, самые внимательные успели увидеть «исходники» не в 8-битном формате. Теперь же пора восстановиться по-настоящему.
Сегодня тема особенно интересная. Многие видели, слышали, а может, и участвовали в CodeRun Summer от нашей любимой алгоритмической компании. Но в этот раз цель не просто решить зада…
👍4❤1🔥1
5 Dec 2025, 11:25 UTC≈3,570 views23 reactions2 Starsread 8 August 2026 Что пошло не так в React Server Components и чему из этого стоит научиться
Последние пару дней во всех фронтенд-пабликах пролетела новость: в React нашли критическую уязвимость с оценкой CVSS 10.0. Она позволяет получить удаленное выполнение кода на сервере. В списках пострадавших оказались все кто используют и/или поддерживают React Server Components (RSC).
Но мне захотелось разобраться с инженерной точки зрения…
👍12🔥8👏2❤🔥1
16 Nov 2025, 07:00 UTC425 views6 reactions2 Starsread 8 August 2026 Разностные массивы
Давно не было постов, и пока восьмибитный котик продолжает корпеть над очередной статьей по V8, моргая раз в пять минут и делая вид, что он все понимает в исходниках. Сегодня освежу блог чем-то чуть более интересным и полезным.
Последние пару лет я старался начать утро с "разгона" на дейликах, но не тех, что вам ставят в календарь на 10 утра, а с задачами на LeetCode. Несколько раз даже попытал…
🔥6
21 Sept 2025, 05:46 UTC415 views7 reactionsread 8 August 2026 Hoisting в JavaScript: let и function
В первой части мы разобрали, как работает hoisting у var: переменная получает undefined ещё на этапе создания контекста, и поэтому доступ к ней до присвоения не вызывает ошибку. Теперь давайте посмотрим, чем отличается поведение let.
let
function demoLet() {
console.log(b) // [1]
let b = 10 // [2]
console.log(b) // [3]
}
Байткод функции (сокращённо, с пометками с…
🔥5❤2
6 Sept 2025, 18:15 UTC≈1,010 views19 reactions1 Starread 8 August 2026 Hoisting в JavaScript: миф о «поднятии» или реальная механика движка
Как часто на собеседованиях вам задавали классический вопрос: «Что такое hoisting?»
Не растерявшись, мы обычно отвечаем: «Это поднятие переменных и функций наверх их области видимости». Интервьюер одобрительно кивает, и мы идём дальше.
Но действительно ли движок переписывает код и «перемещает» объявления? На самом деле это лишь метафора, упроща…
🔥13❤4👍2
29 Jul 2025, 20:16 UTC486 views11 reactionsread 8 August 2026 Разбор updateState как основного механизма обновления в useState
Вернемся к разбору принципов работы useState. Следующим шагом рассмотрим updateState. Каждый раз, когда компонент обновляет свое состояние через useState, React вызывает функцию updateState.
Исходный код updateState
Заглянем в исходный код:
function updateState<S>(
initialState: (() => S) | S,
): [S, Dispatch<BasicStateAction<S>>] {
return upd…
🔥9❤1❤🔥1
4 Jul 2025, 15:24 UTC422 views5 reactionsread 8 August 2026 Разбор mountState как точки входа в работу useState
Начнем с разбора “точки входа” в архитектуры Fiber и механики работы хуков.
Что делает mountState
При первом рендере компонента React вызывает mountState для инициализации хука. Немного упростим и уберем типизацию внутри исходной функции:
js
function mountState(
initialState
) {
const hook = mountStateImpl(initialState);
const queue = hook.queue;
cons…
❤🔥3🔥2
Showing the 12 most recent of 18 posts we hold for @eightbitjs. View and reaction counts are the latest single reading for each post, not a live figure, and a recent post is still accumulating both. A view count marked ≈ was rounded by Telegram before we ever saw it — t.me prints views in full below 1,000 and to three significant figures above, so ≈1,200,000 means somewhere between 1,150,000 and 1,249,999. Unmarked counts are exact. Text is reproduced from the public post preview and truncated for length.