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 ()
Ответ на: комментарий от anonymous

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

вместо того чтобы осилить pimpl - молодец, чо

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

лучший язык для научных вычислений

bc, Octave, R, J таки, причём тут вообще сишечка?

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

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

Чтобы компилятор не беспокоился о генерации машинного кода под 100500 архитектур, вестимо.

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

Octave, R, J

С ними удобно проводить исследования и прототипировать, по скорости с Фортраном не сравнятся же.

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

Вот вывод сделанный Владимиром Макаровым

и? смысл сравнивать 03 и O1? смысл вообще в O1? при O0 clang в три раза быстрей gcc - проверил только что на «жирном» sqlite3.c, сборка релиза по скорости вообще не критична

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

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

2008 стандарт фортрана с вами не согласен

terminat0r
()

Из википедии:

Разработка спонсируется корпорацией Apple, исходный код распространяется в рамках BSD-подобной лицензии.

Про ненужно и закопать уже говорили? :)

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

Фортран устарел

Стандарт 2008 года - это невероятно старый стандарт.

но на нём много готовых либ

Да, и куча проектов делается.

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

Octave, R, J

С ними удобно проводить исследования и прототипировать, по скорости с Фортраном не сравнятся же.

J вроде как довольно быстрый, мне казалось.

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

Почему все так хотят закопать gcc?

Если кто-то захотел иметь свой компилятор,
это еще не значит, что GCC хотят закопать.
В мире GNU/Linux он нужен.

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

А фортран? А паскаль? А другие языки?

закопать. для паскаля есть свой говнокомпилятор. зачем гнаться за кучей говноязыков.

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

Сборка делается один раз

Это в какой-то паралельной вселенной, хочу туда. На практике только за один рабочий день сборка может делатся десятки раз. А если собирается дистр типа Дебиана, то это вообще ппц.

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

Разработка спонсируется корпорацией Apple

Про ненужно и закопать уже говорили? :)

Гомофоб?

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

LLVM - детектор школьников IRL

Ну они же черпают знания из википедии, ты чего-то другого ждал от них?

anonymous
()

Пора бежать с Debian GNU/Linux на что-нибудь менее «мейнстримовое». пора. И да, никакой вменяемой поддержки генерации не-x86 кода в clang и llvm не наблюдается (не знаю про планы, но сейчас с этим очень и очень плохо, почти одноархитектурное это всё).

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

LLVM — виртуальная машина.

Денис , это ты?

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them.

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

Вот невычисляемый goto — действительно нафиг не нужен.

В каком месте он невычисляемый, всё отлично вычисляется;)

case A of
-1000..1: goto 1;
2: goto 2;
3: goto 3;
4,9,20,100..120,300..400: goto 4;
end else goto 5;
Компилятор знает все возможные прыжки и может оптимизировать код, сохраняется порядок и хорошая читаемость.

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

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

Пусть профессионалы использующие тормозные языки покупают профессиональное быстрое железо и не парят мозг пользователям ненужными им фичами.

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

LLVM поддерживает статическую генерацию кода для x86, x86-64, ARM, PowerPC, SPARC, MIPS, IA-64, Alpha.

Итого 8. Надо 11 как минимум. Эпл будет оплачивать поддержку ещё 3 или 11 экзоплатформ?

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

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

а как же куа языков, которые существуют только на llvm? gcc не нужен?

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

херасе у вас обобщение «не может заменить» == «не нужен»?

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

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

Ага, школьников хлебом не корми, дай что-нибудь новое, можно ненужное, главное, чтобы «инновационное». И пофиг, что при этом ломается много чего «старого», но очень нужного. И неважно, что это новое не решает ни одной реальной задачи, которую сложно решить существующими методами.

Школьники - это не старые пердуны, которые решают реальные задачи испытанными методами, им инновации подавай.

Новое - хорошо, старое - плохо. Оторванность от реальных потребностей не имеет значения.

Да здравствуют школьники. Ура, товарищи!!!

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

Чем им, бл_ть, не нравится gcc?

«Их» спонсирует Apple, исходя из своих целей. А их спонсорам, скорее всего, не нравится gcc лицензией и невозможностью управлять его развитием.

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

Честно говоря, это костыль, и надеюсь скоро отомрёт.

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

и? смысл сравнивать 03 и O1?

Ты ничего не понял. Перечитай ещё раз. Там написано то, что я тебе в самом начале написал: LLVM плохо оптимизрует и максимальное, что из него можно выжать, примерно соответствует тому, что можно получить при gcc -O1. Будет в llvm больше оптимизаций, будет дольше компилировать. Сейчас преимуществ у llvm перед gcc нет. GCC допиленней и продвинутей в данный момент, llvm в роли догоняющего.

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

Вот тут все так ругаются на паскаль, а мне в hedgewars нравится играть, например.

Не принимай близко к сердцу. На ЛОРе ругают все языки, а так же все виды ФС. На ЛОРе вообще всё ругают.

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

Ты ничего не понял. Перечитай ещё раз. Там написано то, что я тебе в самом начале написал: LLVM плохо оптимизрует

нет, это ты решил, что я ничего не понял :) я сам писал - оптимизирует он хуже gcc, но зачастую - разница относительно небольшая, 0-15%, проверял на своих примерах, а скорость сборки, про которую я говорил, важна при O0 - т.е. при отладке, и она у clang ощутимо выше

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

Во-первых, я говорил про то, что в стандарте Си отсутствует вычисляемый goto. Во-вторых, что-то у меня плохо парсится ваш код. Вычисляемому goto можно передать переменную целого типа, в которой хранится адрес перехода. Это простейший машинный jmp.

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

Ну они же черпают знания из википедии, ты чего-то другого ждал от них?

про благостный феномен двуединоконечной палки глаголил я отроку: подглянешь раз иной - виртуальное, никакого спасу нет, а ну как далече приглядываться станешь - реально детектит

shty ★★★★★
()

clang штука конечно перспективная, но пока сильно сливает на ARM платформе, к тому же ещё и багов наплодило к «счастью» для iOS-деволоперов(жалко потерял где-то линки на попоболь некоторых разработчиков)... вообще в шоке от того, что Apple долбанулась и это чудо в Xcode by default завернула.

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

МО пиндосов уже отказываются от Ада в пользу С

Можно пруф?

Это мнение общества программистов

Такой 3.14zdабол))) Конструктив, да.

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

clang штука конечно перспективная, но пока сильно сливает на ARM платформе

да оно вообще за пределами x86 существует умозрительно.

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

Во-первых, я говорил про то, что в стандарте Си отсутствует вычисляемый goto.

Это ты сейчас уточнил а тогда говорил про goto вообще. В стандарте Си много чего нет, там и оператор switch корявый.

Во-вторых, что-то у меня плохо парсится ваш код.

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

Вычисляемому goto можно передать переменную целого типа, в которой хранится адрес перехода. Это простейший машинный jmp.

В языках высокого уровня переход осуществляется не к машинной инструкции, которая до компиляции пока отсутствует, а к метке, количество которых ограничено. В бейсике в качестве метки использовался номер строки, их было много, но мы ведь не собираемся на нём писать для ПК. В приведённом коде оператор получал из целочисленной переменной число и посылал на одну из пяти меток, что ещё надо?

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

ненужное, главное, чтобы «инновационное»

Т.е. двигаться вперед не нужно по определению? Вот как создали лет 30 назад стандартную либу под нужды прошлого века быдлокодеры на коленке, всё - совершенствовать не нужно?


И пофиг, что при этом ломается много чего

Старый пердун, ты сам себе противоречишь. Если ты за старое - то ЗАЧЕМ ТЕБЕ ЭТОТ НОВЫЙ КОМПИЛЯТОР, если старый работает? xD


которые решают реальные задачи

Ага, создавать ещё один компилятор, играющий по тем же старым правилам и делающий тоже самое - это решение реальной задачи :)
А как же бритва Оккама? Яйки не покоцает?


Новое - хорошо, старое - плохо

Старый пердун, за много лет не осознающий что существует не только черное и белое, думаю уже не излечим.

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

Ага, создавать ещё один компилятор, играющий по тем же старым правилам и делающий тоже самое - это решение реальной задачи :)

задача( одна из ) была интеграция с IDE - Xcode, что это дает - IDE для комплита, для навигации, для рефакторинга, для показа ошибок в коде по мере набора текста и пр. использует не приблизительную модель, а сам компилятор, который в случае с clang просто не занимается созданием объектных файлов и оптимизацией, в результате IDE имеет 100% достоверные данные для своих задач, сейчас кстати в QtCreator интегрируют clang по тем же причинам

vaino
()

Пакеты можно и gcc собирать, но мне как разрабу clang кажется куда более удобным, уже давно все дебажные сборки только им делаю!

Да и по скорости развития он рвет gcc!

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

Т.е. двигаться вперед не нужно по определению?

Поясню еще раз, но по другому. Если есть задача, которую нужно решить и она не решается существующими методами, то нужно придумывать новый. Сидеть на жопе, когда назрела необходимость перемен - нельзя. Еще хуже, бегать и придумывать «инновации», когда в них нет реальных потребностей (разрушая при этом то, что работает). Т.е. источник всех действий - реальная задача, которую нужно решить. Если решается существующими методами, то так и делаем, если не решается - придумываем новые.

Извини, пионер, но дальше ты общаешься уже совсем со своими мыслями. Про то, что не ненужно придумывать ничего нового, я не говорил. Я говорил, что не нужно придумывать ненужного нового (т.е. того, что не дает никаких новых преимуществ, ломая хорошо работающие решения). Разве что в исследовательских целях, чтобы проверить, даст идея что-то новое или «не взлетит».

P.S. LLWV финансируется яблочниками исходя из их собственных целей (т.е. решает их задачи, которые мало коррелируют с задачами линуксоидов). Заменой GCC как компилятора, он вряд-ли когда-либо станет, но как виртуальная машина для статических языков он вполне используется в clamav, например (gcc так не умеет). Наверняка есть и другие ниши, которые он сможет занять.

anonymous
()

Ну, возможно интересно явление: система пакетов, где программы поставляются в виде кода LLVM, а потом оптимизируются на машине пользователя под его процессор. USE-флагов, конечно, не будет или будет мало, но оптимизации будут и собираться будет достаточно быстро.

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

А ядро оно собирает, не?

давно еще была новость - ядро собирали и оно работало, но часть ( SELinux и что-то еще ) не собиралась, проблема была в нестандартных расширениях gcc, хотя сейчас вроде их уже все( или почти ) прикрутили, ну и конечно там тестироваться и тестироваться надо будет

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