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)

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

Нет. Это только означает, что Линуса беспокоит качество кода

nihirash ★★★
()

Например

огласите весь список, пожалуйста

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)

USING VLA'S IS ACTIVELY STUPID! It generates much more code, and much _slower_ code

VLA по сути стандартизация для alloca(). Единственное что странно это то, что они заставили нормально реагировать sizeof() на такие массивы, приходится выделать sizeof(size_t) памяти еще

Хз зачем гореть так с VLA, без пруфов эти вбросы с «ACTIVELY STUPID» полностью глупы.

anonymous
()

ну а структуры с разным размером это дичь, да. Никому нафик они не нужны

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

Ничего, но и не заставляет проводить его к совместному с шлангом состоянию)

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

Ну тогда тем более ему не нравятся VLA внутри структур. Так что же мешает поддерживать компиляцию Linux другими компиляторами, например Clang? Ведь изначально UNIX переписали с ассемблера на C ради переносимости и в дальнейшем делали акцент на то, что UNIX - это переносимая система.

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

линукс компиляется переносимым компилятором GCC

Harald ★★★★★
()

Это ничего не означает.

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

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

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

А причём тут ассемблерные вставки? Разве Clang их не поддерживает или использует другой ассемблерный синтаксис?

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

arm/arm64 собирают шлангом, до тех пор пока не споткнуться например на ассемблерные вставки

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

Загвоздка именно в ассемблерные вставках, например, в модификаторах, а не в самом синтаксисе

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

Это не тебе решать. Кстати, с некоторых пор в ядре стали встречаться коммиты, сделанные для Clang. К чему бы это?

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

Потому что ты обиделся как юная школьница. Ещё раз, среди коммитов ядра уже сейчас есть связанные с Clang.

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

VLA прикольные ровно до того момента, как стукнет баг с переполнением стека. И по какой-то причине те, кто может грамотно использовать VLA, не используют VLA. Возможно, потому что они при кодировании ориентируются не на оптимистичный сценарий.

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

Нужны, если используются только по указателю и последний элемент - массив данных типа строки.

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

А коммиты эти при том, что Clang в ядре таки нужен [кому-то]

Так я за себя говорил. Поэтому, действительно, КО и мой вопрос ещё актуален.

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

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

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

Которые не делятся исходниками своих патченных компиляторов. Вот она ваша фейковая швабодка.

#pragma fat

Clang не зря в названии имеет Cl, намёк на cl.exe!

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

Которые не делятся исходниками своих патченных компиляторов. Вот она ваша фейковая швабодка.

Напиши сам или заплати деньги и открой. Они тебе ничем не обязаны. Именно такие ответы я обычно получаю от линуксоидов здесь на ЛОР-е, когда говорю, что мне в Linux чего-то не хватает. Например нормального remote desktop. Теперь ты видишь у кого действительно «швабодка»?

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

Ну так вали на ФриБЗДи, там тебе и ядро шлангом собирается, и ремот дексктоп заработает и брат выздоровеет.

anonymous
()

Это типичное EEE, только от Столмана и Ко. Но злой по прежнему майкрософт, ага.

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

Правильно, их как раз таки никто ничем не обязывает. Потому что «швабодка» BSD-like лицензий на самом деле и не швабодка. Она даёт разработчику свободу зажопить код, тем самым нарушая свободу юзеров.

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

Ок, а какая мотивация для разработчиков Linux поддерживать компилятор под лицензией, которая поощряет закрытие наработок, когда есть свободный GCC?

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

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

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

Открытый код остаётся открытым и в BSD-like лицензиях. Только не начинай этот спор в миллион первый раз. Надоело уже доказывать очевидное.

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

Так я не начинаю. Я просто риторически напоминаю, что некоторым разработчикам ядра тоже надоело спорить, они просто забивают на clang, в том числе и на принятие патчей. Было несколько обсуждений в LKML, жаль, не могу быстро найти ссылки.

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

А зачем? Если gcc и есть стандарт де-факто для разработки ядра, и всегда им был. Компилятор - это тоже инструмент. Как и специфические расширения компилятора.

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

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

Как же забивают, когда полно коммитов с указанием Clang в описании? Не удивлюсь, если через год или два компиляция ядра при помощи Clang будет поддерживаться официально.

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

Одни забивают, другие поддерживают. Демократия.

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

Ну, например, затем, чтобы не держать два компилятора в системах, где большинство другого софта компилируется Clang-ом. Или для поддержки платформ, которые не поддерживаются или плохо поддерживаются GCC. GCC - вовсе не стандарт и на нём свет клином не сошёлся.

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

gcc и есть стандарт де-факто для разработки ядра, и всегда им был.

А IE4 был стандартом де-факто для веба. Тем не менее IE-specific код - плохой код. И также Chrome-specific код - плохой код. А хороший код - W3C код.

Также и GCC-specific код - плохой код, а хороший код - С11 код.

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