The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Проект GCC разрешил приём изменений без передачи Фонду СПО прав на код, opennews (ok), 03-Июн-21, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


26. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  –4 +/
Сообщение от Аноним (26), 03-Июн-21, 13:23 
GCC пора закапывать это факт
Ответить | Правка | Наверх | Cообщить модератору

31. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +2 +/
Сообщение от Аноним (12), 03-Июн-21, 13:34 
Не уверен. Пока в тестах clang выглядит как-то вяло совсем: https://www.phoronix.com/scan.php?page=article&item=gcc11-cl...
Ответить | Правка | Наверх | Cообщить модератору

40. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  –3 +/
Сообщение от Аноним (26), 03-Июн-21, 13:53 
Тесты фороникса вот это аргумент, эт да
Ответить | Правка | Наверх | Cообщить модератору

74. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +5 +/
Сообщение от Аноним (76), 03-Июн-21, 15:16 
Проведи сам, докажи обратное.
Ответить | Правка | Наверх | Cообщить модератору

101. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  –2 +/
Сообщение от Аноним (26), 03-Июн-21, 17:06 
Уже доказал, показав пальцем на фороникс у которого софт под линь во фряшном линуксляторе софт работает на 50% быстрее чем в линуксе
Ответить | Правка | Наверх | Cообщить модератору

84. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Аноним (10), 03-Июн-21, 15:57 
Допилят совместимость рано или поздно. Он уже неплохо компилирует, вываливает гору ошибок на некорректном коде, который у gcc -OK, а главное - это кросскомпилятор, а значит мне не придётся на компе держать 100500 версий gcc под каждую платформу, будет 1 шланг подо все, и инфраструктуру шланга будут использовать всякие другие компиляторы и jitы. То есть экономия места на ж.д. и памяти, и усилий по разработке, так как llvm обновляется сама и оптимизации, запиленные там, в остальной софт приходят автоматически.
Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

86. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +1 +/
Сообщение от Аноним (70), 03-Июн-21, 16:03 
Жырнолис теперь собирается только шлангом (88 прекрасно собирался гцц). Отличная совместимость, что уж тут скажешь.
Ответить | Правка | Наверх | Cообщить модератору

135. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +3 +/
Сообщение от n00by (ok), 03-Июн-21, 19:43 
Clang иногда компилирует лучше, чем нужно.
Вот г-нокод с UB:

rt->n[idx].next = rtrie_new_node(rt, chr);

С GCC проявляется, с Clang не проявляется. Разрабатываем под Clang, тестируем, публикуем. У Васяна с нескучными обоями не работает, но он про это не знает, поскольку проявляется редко.

Ответить | Правка | К родителю #84 | Наверх | Cообщить модератору

162. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +1 +/
Сообщение от Аноним (162), 04-Июн-21, 05:04 
> rt->n[idx].next = rtrie_new_node(rt, chr);

И в чём здесь UB? Кто-то вырвал строчку из контекста и пытается показать себя самым умным?

Ответить | Правка | Наверх | Cообщить модератору

171. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от n00by (ok), 04-Июн-21, 08:05 
>> rt->n[idx].next = rtrie_new_node(rt, chr);
> И в чём здесь UB?

Подождём другие варианты ответов.

> Кто-то вырвал строчку из контекста и пытается
> показать себя самым умным?

Контекста приведено достаточно.

Ответить | Правка | Наверх | Cообщить модератору

172. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Аноним (162), 04-Июн-21, 08:20 
То есть вы слышали от кого-то на работе, что в этом коде что-то не так, а сами объяснить не можете. Но выпендриться на публику захотелось. Слив засчитываем?
Ответить | Правка | Наверх | Cообщить модератору

174. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от n00by (ok), 04-Июн-21, 08:27 
> То есть вы слышали от кого-то на работе, что в этом коде
> что-то не так

Вы заблуждаетесь.

> а сами объяснить не можете.

Никто и не просил объяснить.

> Но выпендриться на
> публику захотелось. Слив засчитываем?

Поскольку Вы отказались утверждать прямо, что UB однозначно исключён, можно засчитывать.

Ответить | Правка | Наверх | Cообщить модератору

205. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Аноним (162), 04-Июн-21, 18:25 
>> И в чём здесь UB?
> Никто не просил объяснить.

Вы у окулиста давно проверялись?

Ответить | Правка | Наверх | Cообщить модератору

209. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от n00by (ok), 05-Июн-21, 07:46 
>>> И в чём здесь UB?
>> Никто не просил объяснить.
> Вы у окулиста давно проверялись?

Я и так отчётливо вижу, куда и как Вы пытаетесь свести дискуссию.

Сам по себе вопрос "И в чём здесь UB?" является просьбой.
Но он вырван из контекста: "Кто-то вырвал строчку из контекста и пытается показать себя самым умным?"

Действительно -- кто-то пытается.

Ответить | Правка | Наверх | Cообщить модератору

221. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Аноним (162), 06-Июн-21, 15:03 
ОК, признаю, был излишне резок.
Ответить | Правка | Наверх | Cообщить модератору

176. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Ordu (ok), 04-Июн-21, 08:38 
А в чём тут UB? В том, что тут в одном выражении используется две mutable ссылки на *rt, а C не определяет порядок вычисления аргументов оператора '=' так же, как он не определяет порядок вычисления аргументов функции?
Ответить | Правка | К родителю #135 | Наверх | Cообщить модератору

183. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от нах.. (?), 04-Июн-21, 09:10 
Ну, молодец, возьми с полки пирожок - именно это и называется undefined behavior.

Ответить | Правка | Наверх | Cообщить модератору

185. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от n00by (ok), 04-Июн-21, 09:15 
Так он то не программист на Си. Как, впрочем, и я.
Ответить | Правка | Наверх | Cообщить модератору

184. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от n00by (ok), 04-Июн-21, 09:12 
> А в чём тут UB? В том, что тут в одном выражении
> используется две mutable ссылки на *rt, а C не определяет порядок
> вычисления аргументов оператора '=' так же, как он не определяет порядок
> вычисления аргументов функции?

Именно. Следует добавить явную sequence point:

-   rt->n[idx].next = rtrie_new_node(rt, chr);

+   rtrie_index next = rtrie_new_node(rt, chr);
+   rt->n[idx].next = next;

Даже если вернуть "контекст", как просят в #162, и в определении rtrie_new_node() окажется, что rt->n неизменно, так завтра кто-то обязательно изменит.

Ответить | Правка | К родителю #176 | Наверх | Cообщить модератору

186. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +1 +/
Сообщение от Ordu (ok), 04-Июн-21, 09:24 
Но это же не значит, что шланг компилирует "лучше", чем gcc. Просто в этом случае случилось так, что способ шланга совпал с тем, что задумал программист. В другом случае, он мог не совпасть. В другом случае программист мог задумать такое:

rtrie_index next = &rt->n[idx].next
*next = rtrie_new_node(rt, chr);

но написать то же самое:

rt->n[idx].next = rtrie_new_node(rt, chr);

И в этом случае шланг бы оказался не прав.

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

Ответить | Правка | Наверх | Cообщить модератору

188. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от n00by (ok), 04-Июн-21, 10:11 
> Но это же не значит, что шланг компилирует "лучше", чем gcc.

Ну да, потому у меня там "лучше, чем нужно".

> Просто
> в этом случае случилось так, что способ шланга совпал с тем,
> что задумал программист.

Предполагаю, что в Clang специально так и задумано, что бы "помочь программистам".

> В другом случае, он мог не совпасть. В
> другом случае программист мог задумать такое:
> rtrie_index next = &rt->n[idx].next
> *next = rtrie_new_node(rt, chr);
> но написать то же самое:
> rt->n[idx].next = rtrie_new_node(rt, chr);
> И в этом случае шланг бы оказался не прав.

Здесь возникает интересный вопрос: имеется ли у разработчиков Clang статистика по подобным ошибкам? У меня таких данных нет, но второй вариант выглядит излишне сложным, полагаю, он встречается реже.

> Тут мне кажется дело в том, что вы разрабатываете на шланге, и
> поэтому когда шланг не угадывает задумку программиста, программист это быстро узнаёт,
> и баг не выходит за пределы его рабочего компьютера. Разрабатывали бы
> на gcc, было бы ровно то же самое, но просто другие
> случаи UB уходили бы в продакшн.

Пока не вижу пример, который подтверждал бы вторую часть гипотезы. С первой согласен. Наблюдал однажды, как "разработчики" одной автономной ОС собирали firefox при помощи GCC, и он падал у пользователей. Локализовать ошибку они не смогли и принялись собирать Clang-ом, "что бы быть ближе к апстриму". Вот тогда я предположил, что в исходниках firefox написано что-то подобное (к тому же на С++, где n инкапсулирован).

Ответить | Правка | Наверх | Cообщить модератору

206. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Аноним (162), 04-Июн-21, 18:34 
Если первый аргумент rtrie_new_node() будет const foo*, то никакого UB не будет в принципе. Именно об этом шла речь, когда я заговорил о контексте. Но вы самоуверенно заявили, что данных достаточно для выноса решения о наличии UB.

Если бы вы с самого начала вели себя конструктивно, то и разговор с вами был бы иной. А так — потребовался Ordu, который потратил больше усилий (читай: проявил больше уважения) на свой ответ вам, чем вы — на свои заявления.

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

Ответить | Правка | К родителю #184 | Наверх | Cообщить модератору

208. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +1 +/
Сообщение от n00by (ok), 05-Июн-21, 07:23 
> Если первый аргумент rtrie_new_node() будет const foo*, то никакого UB не будет
> в принципе. Именно об этом шла речь, когда я заговорил о
> контексте.

То есть Вы говорите "дайте определение функции". Определения нет. Можно даже закрыть глаза, что семантика new подразумевает мутабельность (префиксного дерева, а не какого-то foo).

> Но вы самоуверенно заявили, что данных достаточно для выноса решения
> о наличии UB.

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

> Если бы вы с самого начала вели себя конструктивно, то и разговор
> с вами был бы иной.

Да-да, конструктивность выглядела вот так: "Кто-то вырвал строчку из контекста и пытается показать себя самым умным?"

> А так — потребовался Ordu, который
> потратил больше усилий (читай: проявил больше уважения) на свой ответ вам,
> чем вы — на свои заявления.

Ordu всегда такой педантичный и пишет детально. В то же время он всё прекрасно понял из приведённого фрагмента. А что бы привести этот фрагмент в своём заявлении, я его сначала нашёл и исправил.

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

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

Ответить | Правка | Наверх | Cообщить модератору

226. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Аноним (226), 13-Июн-21, 07:42 
Какая-то странная функция. Разве при создании новой ноды в дереве она не должна запихать новый элемент в ссылку предыдущей ноды? Или ок, пускай она этого не будет делать, разве она изменит rt таким образом, что выражение слева от '=' поменяет смысл? В чём здесь говнокод то?
Ответить | Правка | К родителю #135 | Наверх | Cообщить модератору

227. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от n00by (ok), 13-Июн-21, 11:08 
> Какая-то странная функция. Разве при создании новой ноды в дереве она не
> должна запихать новый элемент в ссылку предыдущей ноды?

В таком случае потребуется 3 функции (для left, right и next) у которых внутри всё равно окажется

rt->n[idx].next = rtrie_new_node(rt, chr);

или (это Си, а не плюсы) какая-нибудь

rtrie_link_new_node(rt, &rt->n[idx].next ,chr);

> Или ок, пускай
> она этого не будет делать, разве она изменит rt таким образом,
> что выражение слева от '=' поменяет смысл? В чём здесь говнокод
> то?

rt, естественно, изменить не может. Обратите внимание на ->n[idx].

Т.е. узлы дерева лежат в общем массиве и связаны индексами, а не указателями. Соответственно при добавлении элемента возможна переаллокация всего массива (копирование содержимого ОЗУ не происходит, добавляются новые страницы; но адрес начала может измениться).

Ну а вообще, изменит ли rt->n -- из сигнатуры не понятно, это и значит, что поведение не определено.

Ответить | Правка | Наверх | Cообщить модератору

200. "Проект GCC разрешил приём изменений без передачи Фонду СПО п..."  +/
Сообщение от Аноним (200), 04-Июн-21, 13:24 
> Пока в тестах clang выглядит как-то вяло совсем

Там в одних тестах выигрывает Clang, в других GCC, причём иногда победитель разный в зависимости от параметров одного и того же теста (например, количество потоков в Liquid-DSP). Да и в заключении написано:
> When carrying out 174 benchmarks between GCC 11 and Clang 12 on the AMD EPYC 7763 server, Clang 12.0 actually came in first place -- regardless of the spread -- 63% of the time.
> If taking the geometric mean of all 174 benchmarks completed successfully on both compilers, it's basically a dead heat between these two open-source compilers.

GCC закапывать, безусловно, не надо, но и результаты Clang-а на "вяло совсем" не тянут, IMHO.

Ответить | Правка | К родителю #31 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру