Эксперимент по пересборке Debian с использованием Clang показал неожиданно хорошие результаты
6 марта 2012 года
Сильвестр Ледрю (Sylvestre Ledru) провёл эксперимент по пересборке архива пакетов Debian GNU/Linux с использованием компилятора Clang, развиваемого в рамках проекта LLVM. Целью эксперимента была оценка пригодности Clang для сборки большого числа разнородного кода на языках C, C++ и Objective-C. Таким образом планировалось оценить, сможет ли Clang на текущей стадии развития выступать в роли альтернативы GCC при сборке пакетов в Debian. Интерес также представляли расширенные возможности Clang по выводу информации о возможных ошибках и недоработках, учёт которых позволил бы повысить общее качество кодовой базы.
Результаты эксперимента превзошли ожидания: из 15658 пакетов проблемы со сборкой в Clang 3.0 были выявлены только для 1381 пакета (8.8 %), что соизмеримо с числом проблем, возникавших в прошлом при переходе на более новые ветки GCC. Сильвестр Ледрю признался, что ожидал столкнуться с большим числом ошибок и проблем, непосредственно вызванных использованием Clang, но к своему удивлению обнаружил, что большинство проблем сборки оказались связаны с разницей в поддерживаемых стандартах языка Си, различиями в интерпретации или спорными моментами. В итоге, Сильвестр сделал вывод, что Clang уже достаточно стабилен и функционален для сборки большинства пакетов Debian, даже если для многих пакетов потребуется внести небольшие правки для обеспечения корректной компиляции. Из наиболее часто встречающихся проблем сборки в Clang 3.0 отмечены: отсутствие необходимых символов на этапе связывания (439 пакетов), неверный поиск в шаблонах классов (85) и сбой в работе сборочной утилиты xutils-dev (84).
Для сравнения была предпринята попытка пересборки с использованием прошлой версии Clang - 2.9. В результате был отмечен значительный прогресс в развитии Clang: версией 2.9 не удалось собрать 14.5% пакетов, в то время как для версии 3.0 несобранными остались только 8.8%. Кроме того, отмечаются такие достижения Clang, как обеспечение пересборки Chromium/Chrome и LibreOffice, замена gcc на clang в базовой системе FreeBSD, а также решение компании Apple по использованию Clang по умолчанию в Xcode, основном инструментарии разработки приложений для Mac OS X и iOS.
Судя по всему в следующие несколько лет, обладая лучшими средствами для статического анализа кода, Clang может заменить gcc/g++ в качестве компилятора C/C++ в некоторых дистрибутивах Linux и BSD-системах. Тем не менее, в обозримом будущем GCC останется основным компилятором Debian, так как одним из основных требований проекта является обеспечение надлежащей поддержки всех архитектур Debian, которых насчитывается 11 официальных и 6 неофициальных. В то время как Clang в полной мере пока поддерживает только архитектуры X86-32, X86-64 и ARM.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.