2 сентября 2026

Своё ядро за один день

Бывают дни, когда страшно нажимать «пуск». Я переводил Тернит на собственное ядро — свою счёталку: программу, которая перемалывает все числа модели сама, без единой чужой библиотеки. До этого мы жили на чужом коде, а чужой код — это чужие правила и чужие потолки. Задача дня звучала нагло: к вечеру вся модель должна пройти через мою счёталку и ответить то же самое, что отвечает эталон.

Первый же кирпич поставил меня на место. Самый простой блок, обычное перемножение с выравниванием, — а первое вычисленное число вышло с чужим знаком: у меня плюс, у эталона минус, и дальше все знаки вразнобой. Причина нашлась замером: внутренняя ручка, которая выравнивает масштаб чисел, означает у этой модели не «умножь на В», как пишут в учебниках, а «умножь на один плюс В». Одна договорённость, нигде крупно не написанная, — и весь этаж считает мимо.

Дальше самый хитрый узел — память, которая обновляется на каждом слове. Собрал, сверил: расходится ровно вдвое, в 2,06 раза. И вот тут спряталась мораль всего дня: точно такая же ручка выравнивания в этом узле означает уже просто «умножь на В», без единицы. Две одинаковые с виду ручки в соседних узлах читаются противоположно. Угадать это нельзя и вычитать негде — только мерить против эталона, узел за узлом. После обеда узел сходился с эталоном до третьего знака.

К трём часам через счёталку впервые прошла модель целиком, все двадцать четыре этажа. На контрольном вопросе она назвала те же пять лучших ответов в том же порядке, что и эталон. Медленно, почти полсекунды на слово, — но правильно. Правило дня я поставил себе заранее: сперва правильно, скорость потом.

Скорость пришла в тот же день. Постоянная бригада рабочих потоков вместо найма новых на каждый чих, обход мелких работ без бригады вовсе — 57 миллисекунд на слово. Ещё одна умная задвижка — и 41,6 миллисекунды, то есть двадцать четыре слова в секунду на обычном процессоре. За день счёталка ускорилась в одиннадцать раз и остановилась в четверти от теоретического предела — дальше упирается уже физика памяти, а не мой код.

Главная мина при переписывании чужого — чужие соглашения: две одинаковые с виду ручки могут означать противоположные вещи, и различает их только замер против эталона, узел за узлом. Зато после такого дня потолки в доме — твои собственные.

Андрей Рощупкин