Люди со всего мира продолжают изучать компилятор Claude и находят много нюансов. Так, некоторые исследователи заметили, что отдельные участки кода CCC повторяют подходы и идеи LLVM/GCC. Сейчас в репозитории даже открыта проблема, в которой обсуждают ”следы вдохновения” и вопросы защиты авторского права. Эксперты по компиляторам заметили сразу: CCC явно воспроизводит паттерны известных компиляторов, что неудивительно, поскольку LLM обучаются на открытом исходном коде, включающем в себя код компиляторов.
Я провел свой эксперимент, использовав код такой функции:
int f(int x) { if (x + 1 > x) return 1; else return 0; }
Чем она примечательна? Выражение x + 1 > x практически всегда верно, потому что компиляторам разрешается предполагать отсутствие неопределенного поведения в вашей программе. Алгоритмы оптимизации часто используют это в целях упрощения логики.
Я сравнил ассемблерный код, созданный CCC и GCC с флагами ”-O0 -fno-omit-frame-pointer -fno-asynchronous-unwind-tables -fno-unwind-tables -mno-red-zone”. CCC делает заметно больше операций. GCC -O3 вовсе сокращает логику до минимума, всегда возвращая 1, – это тот уровень оптимизации, которого не хватает компилятору, сгенерированному ИИ. Детали на рисунке.
Наконец, начали появляться бенчмарки. Один из них показывает, что скорость выполнения программ, скомпилированных CCC, значительно уступает тем, что скомпилированы GCC с продвинутой оптимизацией (от -O2). Мы в этом также убедились в маленьком эксперименте выше.