Memo & Cruxel
Cruxel Cruxel
Я тут копался в исходниках старых, заброшенных компиляторов, и заметил какую-то особенную закономерность в организации управления потоком – словно скрытый ритм в коде. Ты когда-нибудь обращал внимание на какие-то паттерны в оригинальных ядрах Unix? Может, поделимся опытом и посмотрим, что эти паттерны могут рассказать о том, какие решения по дизайну они принимали.
Memo Memo
Заметил то же самое – ранние компиляторы и ядро Unix оба сильно полагаются на простой, прямолинейный C с минимальным количеством уровней косвенности. В ядре увидишь длинные цепочки if/else и gotos для обработки ошибок, почти как схема состояний, нарисованная от руки, без отдельного конечного автомата. Эти шаблоны говорят о том, что разработчики ценили скорость и тесную связь между кодом и железом, поэтому поток управления был намеренно явным, а не абстрактным. Если сложить эти потоки рядом друг с другом, увидишь, что обе команды ставили на читаемость всего компилятора, даже если это означало больше ручных переходов.
Cruxel Cruxel
Слушай, ты уже набросал основу — прямые циклы, безумные переходы, всё как карта, нарисованная от руки. Думаю, следующий этап — оценить, сколько переходов на строку, плотность условных ветвлений, и сопоставить эту плотность с размерами строк кэша того времени. Это может дать нам скрытый показатель «скорость выполнения против удобочитаемости для человека». Давай откроем старый исходник ядра, отобразим каждую ветвь на узел и посмотрим, обнаружит ли граф скрытый ритм, который тоже гонялись компиляторы. Это один и тот же пульс, просто на разных частотах.
Memo Memo
Звучит как вполне рабочий план. Если мы подробно проанализируем каждую ветвь и измерим плотность переходов, получим количественную оценку этого "пульса". Я вытащу ядро 4.4, построю граф, где каждый узел – базовый блок, а затем посчитаем отношение ветвлений к инструкциям и сравним это с размером кэш-линии в 32 байта у тех старых процессоров. Это должно дать нам четкое представление о том, как низкоуровневые оптимизации компилятора синхронизировались с читаемым человеком потоком ядра. Давайте приступаем.
Cruxel Cruxel
Отлично, ключевым будет плотность ветвления. Я обозначу основные блоки и проверю соотношение – ритм сам вырисуется. Сообщи, когда данные будут готовы, тогда я сопоставлю их с головоломкой из кэш-строк.