LINUX.ORG.RU

Debian: clang способен заменить gcc

 , ,


0

1

Sylvestre Ledru провел эксперимент по сборке репозитория Debian с помощью компилятора clang. Вопреки ожиданиям, результаты оказались обнадеживающими:

На мой взгляд, clang уже стабилен и достаточно хорош для пересборки большинства пакетов Debian, хотя многие из них потребуют незначительных исправлений.

В ближайшие несколько лет, учитывая лучшие инструмены статического анализа кода, clang может заменить gcc/g++ как компилятор C/C++ по умолчанию в дистрибутивах Linux и BSD.

Разработчики clang продвигаются очень быстро: с версией 2.9 не собиралось 14.5% пакетов, а с 3.0 - 8.8%. Сделаны существенные шаги: chromium/chrome собираются по умолчанию с помощью clang, Xcode по умолчанию предоставляет clang, FreeBSD работает над переходом с gcc на clang и т. д.

Однако для Debian важно, чтобы clang справлялся со всеми поддерживаемыми архитектурами (11 официальных, 6 неофициальных).

Собрать не удалось 1381 пакет из 15658. Самая частая причина неудачи - более строгое следование стандартам со стороны clang.

Найденные баги будут отправлены в багтрекер Debian вместе с патчами. Автор исследования продолжит тестировать новые версии clang.

>>> Подробности

★★★★

Проверено: Shaman007 ()
Ответ на: комментарий от tailgunner

Однако для Debian важно, чтобы clang справлялся со всеми поддерживаемыми архитектурами (11 официальных, 6 неофициальных).

И как, справляется?

А Эплу оно надо? Есть подозрение, что разрабам clang-а и в кошмарном сне не приснится поддержка всех gcc-шных платформ

Так что в лучшем случае как инструмент для разрабов и этих... как их... с миром которые

yyk ★★★★★
()

Самая частая причина неудачи - более строгое следование стандартам со стороны clang.

unsigned, где ты такое нашёл в тексте? Цитату приведи.

GArik ★★★
()

Поделка презабавная. Из описания убило вот это: Default initialization of const variable of a class type requires user-defined default constructor.

Тваюжмать, каким раком компилер вызовет этот самый «user-defined default constructor» при инициализации константы? А если нет, то нахрена конструктор по умолчанию для этого нужен? Константные объекты не так создаются. Вообще из описания я много над чем посмеялся, и на мой взгляд clang gcc пока не заменяет никак.

A-234 ★★★★★
()
Ответ на: комментарий от Ivanz

Гнутые сами виноваты. С 4.2.2 поменяли лицензию на GPLv3. Из-за чего эппл отказались от gcc в своём Xcode и стали впиливать clang.

Ууу, а эппловцам то каково. Прийдется немного раструсить свой денежный жирок.

goingUp ★★★★★
()
Ответ на: комментарий от PVOzerski

Нет, Unix намертво привязан к Си. Да в принципе я и не против Си в области системного программирования — это то, для чего он был создан, и где он действительно нужен. Но меня всегда раздражало то, что на нем пишут обычные прикладные программы.

того же паскаля

паскаль хорош, но он все же убог, что уже давно признано всеми и результатом чего являются Модулы и Обероны. Но энтерпрайз же любит убогость.

buddhist ★★★★★
()
Ответ на: комментарий от vaino

чем он лучше gcc?

быстрее раза в два,

Ага, скорость компиляции у clang -O3 такая же как у gcc -O1 и скорость бинарника такая же. Так и где тут какие-либо преимущества?

GArik ★★★
()
Ответ на: комментарий от vaino

а как у него с оптимизациями?

на большинстве тестов практически вровень или даже чуть лучше

Похороникса перечитал?

GArik ★★★
()
Ответ на: комментарий от GArik

скорость компиляции у clang -O3 такая же как у gcc -O1
такая же как у gcc -O1 и скорость бинарника

вы явно не в теме

Так и где тут какие-либо преимущества?

преимущества прежде всего для разработчика, я их уже назвал

vaino
()
Ответ на: комментарий от fero

Почему все так хотят закопать gcc? Чем это оно так провинилось?

В дебиане не знаю. В BSD некоторым глаза мозолит использование в системе компилятора с некошерной, с их точки зрения, лицензией GPL.

hobbit ★★★★★
()
Ответ на: комментарий от fang

Расскажи это профессиональным разработчикам, которые компилируют большие программы туеву хучу раз на дню

И каждый раз с включенной оптимизацией на максимум? А каково соотношение скорости компиляции clang и GCC при выключенных оптимизациях? Может Clang так быстр из-за того, что не делает многих оптимизаций, которые делает gcc?

Я не профи, но когда мне надоело ждать пересборку своего проекта после внесения каждого изменения в заголовочный файл, я осилил CMAKE_BUILD_TYPE=Debug, при котором оптимизации выключаются. Слабо верится, что профи об этом не знают.

anonymous
()
Ответ на: комментарий от Harald

Был такой проект - GNU Pascal. Давно заморожен. Позиционировался как тесно связанный с gcc (и, в частности, на гнутом си был написан компилятор). Считался ли официально частью GNU Compiler Collection - этого не знаю. Гугль в помощь.

PVOzerski ★★★
()
Ответ на: комментарий от anonymous

каково соотношение скорости компиляции clang и GCC при выключенных оптимизациях?

такое же

vaino
()
Ответ на: комментарий от PVOzerski

Позиционировался как тесно связанный с gcc (и, в частности, на гнутом си был написан компилятор).

забавно, гнутый С изначально был написан на паскале

vaino
()

Yeah, it is capable... as soon as it stats generating assembly. So far GCC beats shit out of it.

anonymous
()
Ответ на: комментарий от Quasar

А фортран? А паскаль?

У паскаля свой компилятор, белый и пушистый, среднюю программу компиляет за секунды и легко устанавливается в систему. Посему clang в линуксе нужен как собаке пятое колесо.

Napilnik ★★★★★
()
Ответ на: комментарий от Quasar

А фортран? А паскаль? А другие языки? Вывод: clang не может заменить GCC.

вы бы чушь не пороли, а погуглили на предмет llvm и clang, что это вообще такое

vaino
()
Ответ на: комментарий от darkshvein

ну, людям же процесс нужен, а не результат.

mrdeath ★★★★★
()

Отлично, что альтернатива крепнет!

jekader ★★★★★
()
Ответ на: комментарий от DiabLor

ага, как только из debian'а выпилят всё гнутое говно включая ядро линуха, я сразу же снесу семерку и перейду на него

Reset ★★★★★
()
Ответ на: комментарий от Reset

как только из debian'а выпилят всё гнутое говно включая ядро линуха, я сразу же снесу семерку и перейду на него

Ты так говоришь, будто твой переход на Debian кому-то нужен.

tailgunner ★★★★★
()
Ответ на: комментарий от vaino

Похороникса перечитал?

и сам тестил, кстати ты сам clang в глаза хоть видел?

Видел, не переживай. Но какого-то сильного тестирования не проводил. Нормальный компилятор, но c++ поддерживает (или поддерживал) плохо и пилится больше под mac os, поэтому не использую.

GArik ★★★
()
Ответ на: комментарий от fero

Почему все так хотят закопать gcc? Чем это оно так провинилось?

Нет новых идей, но хочется иллюзии прогресса.
Замена шила на мыло некоторым кажется движением вперед.

d9d9 ★★★★
()
Ответ на: комментарий от Ivanz

А в чём проблема GPL3? Libc - системная, по-любому, а libstdc++:

You have permission to propagate a work of Target Code formed by combining the Runtime Library with Independent Modules, even if such propagation would otherwise violate the terms of GPLv3, provided that all Target Code was generated by Eligible Compilation Processes. You may then convey such a combination under termsof your choice, consistent with the licensing of the Independent Modules.

r2d2
()
Ответ на: комментарий от fero

лично я не особо хочу закапывать, но от альтернатив я бы не отказался.

frozenix ★★★
()
Ответ на: комментарий от buddhist

Кому будет нужно, те создадут фронт-энд к LLVM для этих языков.

anonymous
()

К сожалению умеет мало архитектур. зачаточное под msp430 и нет авр. Но под армы говорят годен.

AiFiLTr0 ★★★★★
()
Ответ на: комментарий от vaino

скорость компиляции у clang -O3 такая же как у gcc -O1 и скорость бинарника такая же

вы явно не в теме

Вот вывод сделанный Владимиром Макаровым, его тестам я доверяю, а похорониксовским нет:

I added GCC run with -O1 which helps to understand that LLVM with -O2 or -O3 is analog of GCC 4.1 with -O1 with the point of view of generated code performance and compilation speed. People are frequently saying that LLVM is a much faster compiler than GCC. That is probably not true. If you need the same generated code quality and compilation speed as LLVM -O2/-O3 you should use GCC with -O1. If you want 10%-40% faster generated code, you should use GCC with -O2/-O3 and you need 20%-40% (150%-200% if you use GCC LTO) more time for compilation. I believe that LLVM code performance is far away from GCC because it is sufficiently easy to get first percents of code improvement, it becomes much harder to get subsequent percents, and IMHO starting with some point of the development the relation of the code improvement to the spent efforts might become exponential.

(Читать вкладку GCC-LLVM Comparison, там и графики и всё остальное)

GArik ★★★
()
Ответ на: комментарий от yyk

Clang --- это фронт-энд к LLVM у которого есть различные бэк-энды. И не Apple развиваются еще и другие архитектуры.

anonymous
()
Ответ на: комментарий от bk_

ЖПЛ для многих как заноза в заднице. И это хорошо.

Binary ★★★★★
()
Ответ на: комментарий от FiXer

Теперь гентушнеги в 5 раз чаще будут пересобирать свой мир! А это значит в 5 раз больше оргазмов! Ради этого стоит жить!

anonymous
()
Ответ на: комментарий от Ivanz

Гнутые сами виноваты. С 4.2.2 поменяли лицензию на GPLv3. Из-за чего эппл отказались от gcc в своём Xcode и стали впиливать clang.

Ну а что, если Apple сначала пришлёт свои изменения в ванильную ветку GCC, а потом начнёт патентнотроллить по этому поводу? Они это, в принципе, могут, для них делать подлости — не в новинку. А если не будут, то чем им мешает GPLv3? В десктопных маках тоже планируется запретить неподписанные приложения? Возможно, даже первый шаг для этого в последней версии MacOS, насколько я знаю сделан (сейчас просто ругается, нужно в настройках отключить. Но в Windows, например, ограничения на неподписанные драйвера начались с этого же). Но ведь в таком случае как раз наоборот хорошо, что Столлман перевёл gcc на GPLv3, хоть какие-то затруднения у Apple возникли, и они вложили хоть какие-то ресурсы в развитие нового свободного компилятора, который, кто знает, может быть и будет однозначно лучше GCC, тогда будем пользоваться им. Apple могли бы пойти по другому пути, и полностью самим писать проприетарный компилятор, вкладывая в него гораздо большие ресурсы, тогда пользы бы нам не было, но Apple бы соснул хорошенького тунца.

Ttt ☆☆☆☆☆
()
Ответ на: комментарий от fang

Расскажи это профессиональным разработчикам, которые компилируют большие программы туеву хучу раз на дню

что, прям всё-всё надо компилять? мне тогда за рабочий день, наверное, тот кусок с которым яработаю удалось бы раз 5 пересобрать, наверное

shty ★★★★★
()
Ответ на: комментарий от A-234

Тваюжмать, каким раком компилер вызовет этот самый «user-defined default constructor» при инициализации константы?

а что смущает?

берём

template <typename T>
T Func(const T& default_value = T())
{
    return default_value;
}

и дёргаем

int i = Func(100);

всё тип-топ будет, честно

shty ★★★★★
()
Ответ на: комментарий от harper

А если так, то зачем виртуальная машина?

hint: А зачем в gcc используется RTL?

kim-roader ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.