flang компилятор доказывает, что программа не зациклится 0.6.2 GitHub

Сборка двоичного стоит минуту, а не час, — поэтому её место в CI на каждом пуше

Довод «полный прогон идёт два часа, поэтому CI ходит только на тег» верен для набора проб на Node и неверен для сборки bootstrap/. Замер: на четырёх ядрах, флагами Makefile по умолчанию, точка раскрутки собирается за 69 секунд. Это 188 секунд процессорного времени — переносимое число, если ядра другой скорости.

стволразмер compiler_flang.cwall на 4 ядрахCPUдвоичный
c3bebbf0, одна цель печати12,3 МБ58,4 с167 с8 544 752 б
fe8e8a37, восемь целей19,3 МБ69,5 с188 с12 694 664 б

Втаскивание семи целей печати в двоичный увеличило порождённый C в полтора раза, а время сборки — на 19 %. То есть цена сборки растёт заметно медленнее размера входа: -flto раскладывает работу на разделы, и добавленные разделы идут параллельно.

Отсюда решение по укладу CI: работа, которая собирает двоичный и гоняет им обходчики корпуса, ходит на каждый пуш и запрос слияния, а не на тег. Node ей не выдаётся вовсе — тем самым путь установки, обязанный обходиться без Node, проверяется, а не обещается.

Поправка к lto-speeds-up-the-build-too. Там записано -O2 38,7 с против -O2 -flto 17,7 с на make -j4. Направление подтвердилось повторно (без LTO 93,7 с против 58,4 с с LTO на том же -j4), но абсолютные числа устарели вчетверо: замер снимался на точке в 6,2 МБ, а она с тех пор выросла до 19,3 МБ. Отношение держится около 1,6×, а не 2,2×.

Чем подтверждено. Ветка vypusk/ci-dvoichnyy. /usr/bin/time -f на make clean && taskset -c 0-3 make -j4, по одному прогону на вариант, ядра пинуются нарочно: машина замера 256-ядерная, а ubuntu-latest даёт 4 vCPU, и без taskset число было бы про другую машину.

Чем ограничено. Ядра этой машины быстрее раннеровских, поэтому на GitHub честно ждать 2—4 минуты, а не 69 секунд; переносимо здесь процессорное время, а не настенное. gcc 15.2.0; у clang устройство LTO другое.

Связано: lto-speeds-up-the-build-too, a-check-moved-to-the-binary-drops-out-of-ci-silently, bootstrap-circle-is-broken-but-the-binary-cannot-check-itself