Как устроена машина Тьюринга и где проходит граница вычислимого Интерактивная статья ведёт от устройства машины к пределам вычислений. У неё четыре части: лента, головка, программа и состояние. Пять команд позволяют печатать символ, двигать головку, менять состояние и останавливать выполнение. Примеры запускаются в тексте и прокручиваются пошагово вперёд или назад. Сначала машина бесконечно печатает нули, затем…
Сохранёнки программиста
Заметки и ссылки на будущее, чтобы изучить когда будет время. Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Другие наши проекты: https://tprg.ru/med
Динамика подписчиков
с 20 июля 2026 по 28 сентября 2026 · минимум 6 530 · максимум 6 610
Кто рекламировался за полгода
Рекламодатель определён по маркировке рекламы в постах канала.
Публикации
Как читать Big O и находить лишнюю сложность в коде Обстоятельная интерактивная статья объясняет Big O без секундомера: нотация показывает, как растёт время работы вместе с объёмом входа. O(1), O(log n), O(n) и O(n²) разобраны на графиках и примерах JavaScript. Карта материала: 1. сумма циклом растёт линейно, а формула (n × (n + 1)) / 2 требует постоянного числа операций; 2. пузырьковая сортировка в худшем случае…
Как реализовать get or create в PostgreSQL без гонок и раздувания таблицы Обстоятельный разбор операции: вернуть существующую строку или создать новую, не обновляя совпавшие данные, как при upsert. На таблице тегов видно, почему SELECT перед INSERT даёт идемпотентность, но ломается при двух одновременных запросах. Карта решений: 1. Перехват нарушения уникальности закрывает гонку, но неудачная вставка оставляет…
Как устроен исполняемый файл Linux и как разобрать его вручную Обстоятельная первая часть серии об ELF, формате исполняемых и компонуемых файлов, начинается с программы на ассемблере x86-64, которая печатает hi there . После сборки NASM и компоновки файл занимает 8,68 КиБ, а gzip -9 сжимает его до 372 байт. Вместо готовых анализаторов автор читает шестнадцатеричный дамп, учитывает порядок байтов от младшего к…
Как одну проверку Clippy ускорили в 3133 раза Казалось бы, проверить скобки в вызовах макросов Rust просто. Но Clippy делал это после раскрытия макросов, когда [], () или {} уже нельзя получить напрямую. Знак восстанавливали по фрагменту исходного кода. В обстоятельном разборе показана цена решения: для каждого выражения, инструкции и элемента программы проверка поднималась по цепочке раскрытий, дважды запрашивала…
Как SQLite обеспечивает атомарный коммит Транзакция выглядит так, будто записалась целиком или не записалась вовсе, хотя питание может пропасть посреди записи. Разбор SQLite объясняет, как база создаёт эту гарантию с журналом отката. WAL работает иначе. Материал пригодится при создании VFS для SQLite и разборе повреждений после сбоя: проверьте гарантии накопителя, драйвера и ОС для записи и синхронизации.
Как выбрать равновероятную выборку из потока неизвестной длины Интерактивный разбор объясняет reservoir sampling, или резервуарную выборку. Алгоритм держит k элементов. Для элемента с номером n шанс попасть в массив равен k/n ; при выборе он заменяет один из сохранённых случайным образом. Поэтому каждый элемент потока имеет равный шанс остаться в результате. Механизм показан на картах, а затем на сервисе сбора…
Как LMAX вынесла торговую логику в один поток Разбор архитектуры LMAX показывает, почему многопоточность не всегда ускоряет критический путь. Бизнес-логика торговой платформы последовательно обрабатывала заявки в памяти. На сервере с двумя четырёхъядерными процессорами Nehalem по 3 ГГц и 32 ГБ памяти один поток достигал 6 млн заявок в секунду. Это исторический результат 2011 года, а не ориентир для любой системы.…
Как процессор предсказывает ветвления Псевдотранскрипт доклада объясняет тему с нуля. Конвейер начинает следующую инструкцию до завершения предыдущей, но после условного перехода ещё не знает её адрес. Процессор выбирает путь заранее, а при ошибке отбрасывает начатую работу. В учебной модели ветвления составляют 20% инструкций, а промах стоит 20 тактов. Без предсказания получается 4,8 такта на инструкцию, с…
Почему одни движки регулярных выражений зависают, а другие нет Обстоятельная статья Расса Кокса сравнивает алгоритм, применяемый Perl и рядом языков, с автоматом Томпсона, построенным из состояний и переходов. В тесте 2007 года Perl сопоставлял строку из 29 букв «a» больше 60 секунд, а реализация автомата Томпсона справилась за 20 микросекунд, в миллион раз быстрее. Её код занимал менее 400 строк на C. Автор ведёт…