LINUX.ORG.RU

Будет ли Linux официально поддерживать компиляцию в Clang?

 ,


0

1

Clang не поддерживает некоторые нестандартные расширения, поддерживаемые GCC. Например массивы переменной длины внутри структур. Более того, Clang не собирается и не будет поддерживать это нестандартное расширение

https://bugs.llvm.org/show_bug.cgi?id=9254

С момента открытия и довольно быстрого закрытия этого багрепорта как won't fix прошло больше семи лет и вот в марте этого года Линус написал, что так же считает это расширение глупым и поддержал идею избавиться от такого кода в ядре:

https://lkml.org/lkml/2018/3/7/621

AND USING VLA'S IS ACTIVELY STUPID! It generates much more code, and much _slower_ code (and more fragile code), than just using a fixed key size would have done.

Означает ли это, что Linux будет официально поддерживать компиляцию в Clang в ближайшем будущем?

★★★★★

Последнее исправление: bbk123 (всего исправлений: 2)
Ответ на: комментарий от bbk123

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

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

Суть претензий в том, что GCC <> C поэтому затачивание под GCC это отказ от стандартов в пользу продвижения GCC.

Я за GCC и против Clang, потому что последний слишком большой со всей инфраструктурой поддержки.

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

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

Наивный.

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

GCC - вовсе не стандарт и на нём свет клином не сошёлся.

А я и не говорил, что GCC - стандарт. Я сказал, что GCC - стандарт де-факто конкретно для ядра Linux.

Если кто-то захотел поддержку clang - это не значит, что все разрабы должны сразу бросится её реализовывать. Хотите - пишите и согласуйте патчи. Если кто-то не хочет этим заниматься - это его право.

Пока в этом треде я видел твои возмущения, но не видел твои патчи.

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

Но GCC не может быть EEE, поскольку, при желании, другие компиляторы могут реализовать все эти недостающие костыли. Код LLVM и Clang останется открытым даже если злобная корпорация пингвинов RedHat напишет свою проприетарную модификацию, без которой ядро продолжит компилироваться как и раньше. Хорошо, корпорация пингвинов может сделать и свою модификацию ядра (уже делает), которое, на этот раз, потребует проприетарную версию Clang, которой нет в CentOS. Что мешает переписать эту открытую модификацию ядра на открытом синтаксисе, который поймёт и открытая версия Clang и ортодоксально кашерный GCC? Что мешает, при необходимости и реальной полезности, реализовать эту новую функциональность компилятора под открытой лицензией?

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

Наверное в том, что Clang лучше или может стать лучше gcc в ближайшее время. Например сообщения об ошибках и предупреждения в Clang изначально лучше, чем в gcc. Ну и кроме того за Clang стоят корпорации, без которых Linux - ничто.

Вот и высрался человек. Закрывайте тред.

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

А я и не говорил, что GCC - стандарт. Я сказал, что GCC - стандарт де-факто конкретно для ядра Linux.

Я говорил именно об этом. То, что ядро компилируется только GCC не делает последний каким-то стандартом, даже де-факто. Это всего лишь данность, которая может измениться в любой момент (смотри ниже), потому что какой-то принципиальной привязки к GCC в ядре не существует. Она исключительно историческая.

Если кто-то захотел поддержку clang - это не значит, что все разрабы должны сразу бросится её реализовывать. Хотите - пишите и согласуйте патчи. Если кто-то не хочет этим заниматься - это его право.

Пока в этом треде я видел твои возмущения, но не видел твои патчи.

Уже несколько раз писал, что коммиты в ядре, с упоминанием Clang, не редкость уже сейчас. Более того ничего Clang специфичного реализовывать не надо. Надо лишь отказаться от нескольких GCC-специфичных костылей.

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

Я за GCC и против Clang, потому что последний слишком большой со всей инфраструктурой поддержки.

Ты уже ушёл с FreeBSD?

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

То, что ядро компилируется только GCC не делает последний каким-то стандартом, даже де-факто.

Ты понимаешь смысл слова «де-факто»?

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

Надо лишь отказаться от нескольких GCC-специфичных костылей.

О, отлично. Кому надо?

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

Что мешает переписать эту открытую модификацию ядра на открытом синтаксисе, который поймёт и открытая версия Clang и ортодоксально кашерный GCC?

Ну это то, что и озвучивалось в общем-то. Альтернатива - сохранять приверженность GCC и не трогать те куски кода, которые заточены под то, что компилятор GCC. В этой ситуации ты вынуждаешь пользователя использовать GCC в качестве компилятора C, замещая таким образом стандарт C на «набор фич GCC». Это примерно то, что проделывала MS во времена IE4 - вместо стандартов на куче страниц был ActiveX и IE-специфичный код.

Scondo
()
Ответ на: комментарий от iZEN

Вопрос не в том, что бы быть «за Clang». Вопрос в том, что GCC-специфичных фич не должно быть.

При строгом следовании стандарту и отсутствию нестандартных фич вопрос сборки Linux Clang'ом остаётся на стороне исполнения Clang'ом стандарта.

Scondo
()
Ответ на: комментарий от bbk123

Ну, не то чтобы «боюсь», но мне вот например неприятно когда на ядре написано «язык C», а по факту оно не собирается «компилятором С» соответствующим стандарту, а собирается только компилятором GCC.

Не потому, что я боюсь что это приведёт к невозможности открытой поддержки. По эстетическим причинам. И потому что это означает давление GCC на стандарт в ненадлежащей форме.

Также как мне не нравятся сайты, работающие только на Хроме.

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

При этом там уже давно есть:

include/linux/compiler-clang.h
include/linux/compiler-gcc.h
include/linux/compiler-intel.h

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

Я за GCC и против Clang, потому что последний создан для того чтобы вытеснить GCC с экосистемы GNU/Linux.

исправил.

anonymous
()

Раз уж тема о clang, то какие флаги оптимизации аналогичны флагам "-O3 --ffast-math -march=native" в gcc?

grem ★★★★★
()

Задолго до шланга была уже подобная история с ядром linux и icc. Что-то изменилось с тех пор? Современное ядро linux это уже сколько там миллионов строк кода? Исправить всё это под все возможные компиляторы реально но нецелесообразно ибо никому не нужно и никто не оплатит эту титаническую затею.

init_6 ★★★★★
()

Означает ли это, что Linux будет официально поддерживать компиляцию в Clang в ближайшем будущем?

А зачем? clang генерит более медленный машинный код, чем gcc. Мсье хочет ядро на amdgpu заранить?

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

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

Не хочу начинать этот религиозный спор GPL vs BSD в 100500-й раз.

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

И чем она закончилась?

Очевидно! Проект пилили но в целом как не собирало так и продолжает не собирать.

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

Твоё лишь то, чего ты автор.

Правильно.

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

Да, не ущемляет мои юридические права, а вот моральные права ущемляет. Главное чтобы так думало подавляющее большинство тех кто разрабатывает Clang/LLVM.

Не хочу начинать этот религиозный спор GPL vs BSD в 100500-й раз.

Нет это не религиозный спор. Просто, предельно ясна тактика тех, кто продвигает LLVM. Проблема в том, что безвольные лицензии типа «BSD» быстро умеют превращатся в проприетарную лицензию. У Clang/LLVM свободная лицензия вирусного типа.

Пусть «хозяева» Clang/LLVM выпустят свой продукт под лицензией GPL v3+. тогда и поговорим. А этого разумеется не будет. Слишком тёмные мысли у них, слишком далеко смотрят они. Но Столлмана они не обманут.

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

двумя же, как у gcc

$ gcc --ffast-math
gcc: error: unrecognized command line option ‘--ffast-math’; did you mean ‘-ffast-math’?
utf8nowhere ★★★
()
Ответ на: комментарий от t184256

значит, я по памяти не так вспомнил.

а вообще прикольно, один пример с разностной схемой даже за 4 секунды вместо 5 выполнил. Но надо бы пример модифицировать, чтобы начальные данные снаружи приходили, а не были вшиты в код, а то у меня подозрения, что основные оптимизации за счёт этого у обоих компиляторов.

И gcc для некоторых архитектур с опцией -march=native замедлять начинает.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.