The OpenNET Project / Index page

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



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

Оглавление

Релиз набора компиляторов GCC 13, opennews (??), 26-Апр-23, (0) [смотреть все]

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


23. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (23), 26-Апр-23, 18:35 
Он уже был в С11 как _Bool, сейчас stdbool.h решили деприкейтнуть.

Сам bool вообще штука так себе, например в структурах DoP лучше не добавлять его. Он по-сути нужен только при касте, т.к каст у int другой.

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

69. "Релиз набора компиляторов GCC 13"  +1 +/
Сообщение от Аноним (74), 26-Апр-23, 21:53 
Он и вон тем stdbool'ом был как bool вывешен (как typedef вроде). То что для нормального була вместо левоватого _Bool надо добавочный хидер вообще смотрелось странновато как по мне.
Ответить | Правка | Наверх | Cообщить модератору

71. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (74), 26-Апр-23, 21:56 
Целочисленные типы сей как булеан довольно опасная штука, они врапаются по основанию 2, как минимум unsigned - и можно внезапно получить инверсную логику.

Для signed превыщение min/max это по сути UB, хотя в 23 и последних плюсах вроде собирались регламентировать только 1 формат представления (twos complement) и тогда это уже "defined behavior" будет. Но в более ранних не указано как знак и знаковые хранить и там возможно нескллько вариантов. Формально валидных и - с разным поведением при переполнении, потому и UB.

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

102. "Релиз набора компиляторов GCC 13"  +/
Сообщение от oficsu (ok), 27-Апр-23, 00:04 
> Для signed превыщение min/max это по сути UB, хотя в 23 и последних плюсах вроде собирались регламентировать только 1 формат представления

Ну да, оставили только two's complement

> и тогда это уже "defined behavior" будет

Нет, не будет. Поскольку возможность переполнения мешает ещё и оптимизатору

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

250. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (-), 28-Апр-23, 00:17 
> Ну да, оставили только two's complement

Видимо дотумкало что столько UB сколько там есть - не рулит совершенно.

>> и тогда это уже "defined behavior" будет
> Нет, не будет. Поскольку возможность переполнения мешает ещё и оптимизатору

Если остался только 1 формат хранения - по идее его wrap конкретно определен уже. А оптимизатор не имеет права нарушать иллюзии прописаные в стандарте. Хотя я и не смотрел этот кусок на тему гарантий, стандарт еще не вышел даже вроде?!

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

315. "Релиз набора компиляторов GCC 13"  +/
Сообщение от oficsu (ok), 29-Апр-23, 20:14 
> по идее его wrap конкретно определен уже

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

Оптимизатор видит, что x == 10 и x только инкрементится — всё, ветку if (x == 9) {} можно просто выкинуть

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

>  А оптимизатор не имеет права нарушать иллюзии прописаные в стандарте

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

> стандарт еще не вышел даже вроде?!

Стандарт — нет, но его черновик можно посмотреть или на гитхабе комитета в виде исходников, или собранный на eel.is/c++draft

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

335. "Релиз набора компиляторов GCC 13"  +/
Сообщение от Аноним (-), 01-Май-23, 00:40 
> Ну, допустим. Дело же не в нём.

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

> Проблема в том, что оптимизатор может заложиться на тот факт, что число
> не переполняется, а значит и можно выпилить явные/неявные ветки кода,
> ожидающие переполнения

Для unsigned это вообще оптимизация - заложиться в коде на размер чтобы mod 2^N вообще нахаляву получить. Актуально криптоалгоритмам всяким и тому подобному. Для signed это не практиковалось из-за UB.

> Оптимизатор видит, что x == 10 и x только инкрементится — всё,
> ветку if (x == 9) {} можно просто выкинуть

Это катит только если он может _доказать_ это. И даже так он может лопухнуться, потому что видит он все-таки не все. Скажем IRQ - оптимизер не видит, однако его вышибают в пользу другого кода. Для подобных случаев есть volatile. В чем то похожие проблемы есть в многопоточных конструкциях.

>  У нас не механизм переполнения оказывает влияние на производительность, а само
> наличие такой гарантии

А вот это большой вопрос. Оптимизер может в дофига случаев пруфнуть те или иные граничные условия и вообще например обрубить функцию с кучей switch ... case до пары команд, доказав что оно получает только 1, 5 и 7 на вход по вообще всей программе. LTO в этом очень крут.

> Так стандарт не позволяет переполнения, а значит и оптимизатор, выкидывающий лишние ветки,
> тоже ничего не нарушает — он заложился на отсутствие гарантий. Из-за
> этого, например, код с беззнаковыми может быть местами медленнее

Это было актуально ДО C23 но актуально ли для него - а вот это интересно.

> Стандарт — нет, но его черновик можно посмотреть или на гитхабе комитета
> в виде исходников, или собранный на eel.is/c++draft

Зачем мне драфт на C++ если мы про си?

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

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

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




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

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