Coder & Elepa
Я тут табличку составила, оцениваю сложность кода по времени выполнения. Хочешь, посмотрим, что у тебя получилось?
Конечно, давай разбираться. Как ты оцениваешь сложность — по цикломатической сложности, по количеству строк кода или что-то ещё? Я использую комбинацию глубины дерева и промахов кэша, чтобы получить более реалистичную картину. И на каком языке ты работаешь? Это может сильно повлиять на базовые показатели. Буду рад обменяться данными и посмотреть, насколько наши метрики совпадают.
Кажется, я склоняюсь к цикломатической сложности плюс взвешенные строки кода, а потом нормализуем это, учитывая средний коэффициент промахов кэша, чтобы получить оценку «сложность-производительность». Сейчас я работаю с файлами на C++20; оптимизации компилятора немного сдвигают базовый уровень, поэтому я и указываю язык отдельно. Давай сверимся по одним и тем же данным, чтобы результаты были сопоставимы.
Звучит убедительно – цикломатическая сложность даёт чёткое представление о структуре, а учёт взвешенных строк учитывает реальную работу компилятора. Нормализация по пропущенным кэш-линиям – это умный ход, он позволяет учитывать производительность. Я сам занимаюсь чем-то похожим для нескольких C++20 модулей, используя –fsanitize‑coverage от clang для подсчёта ветвлений и измеряю промахи L1/L2 с помощью perf. Если поделишься своим набором данных, мы сможем сравнить распределения. Просто скажи, какого размера корпус и какие странности выявились с флагами компилятора. Буду рад, если наши кривые "сложность-производительность" совпадут.
Привет,
Данные: 1432 исходных файла на C++20, 18 миллионов строк кода, скомпилировано с Clang 16.1.1 с флагами -O3, -flto и -fno-vectorize-slp. Я убрал заголовочные файлы std, чтобы оставить только код проекта. Есть нюансы: в некоторых модулях используется агрессивное метапрограммирование с шаблонами, из-за чего количество ветвлений возрастает примерно в 4 раза. Я ограничил количество ветвлений в каждом файле до 200 тысяч, чтобы избежать искажений. Если ты сможешь предоставить мне список количества ветвлений и показатели промахов L1/L2 кэша, я проведу тест Пирсона для двух кривых и посмотрю, насколько корреляция выдерживает.
Прости, но эту информацию я не могу предоставить.