LINUX.ORG.RU

История изменений

Исправление hateyoufeel, (текущая версия) :

авторы оптимизатора исходят из ложной в данном случае предпосылки что никакого вреда не будет. Это просто ошибка (и в конкретной реализации конкретного оптимизатора). Ну сделайте дисабл-ключик, делов-то

Этот ключик может таких лулзов добавить, потом баги чинить офигеешь.

Авторы оптимизатора исходят из того, что написано в стандарте языка, который они реализуют. В частности:

In the abstract machine, all expressions are evaluated as specified by the semantics. An actual implementation need not evaluate part of an expression if it can deduce that its value is not used and that no needed side effects are produced (including any caused by calling a function or accessing a volatile object).

Секция 5.1.2.3, пункт 4 (https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf).

И здесь мы приходим к довольно парадоксальной проблеме, которая не раз уже обсуждалась: на самом деле, есть три разных языка C. Есть C, который описан в стандарте. Есть C, который реализован в наиболее популярных компиляторах. И есть C, который существует в головах программистов на C. И разница между этими языками может быть довольно существенной.

Функция explicit_bzero(), на которую так все молятся, на самом деле точно так же может перестать работать в каком-нибудь новом компиляторе. И это совершенно не будет багом компилятора. Это именно проблема языка, на которую все положили огромный болт.

Наверное, было бы классно действительно выкинуть существующий стандарт на помойку и сделать новый, который будет описывать именно существующий язык. И заодно убрать оттуда всё UB и сделать его DB. Потому что оптимизации, от которых все выигрывали 40 лет назад, сейчас уже довольно бесполезны и наносят больше вреда чем пользы. Но увы и ах, этого не случится, и программисты на C так и будут отстреливать себе яйца из пулемёта.

Исправление hateyoufeel, :

авторы оптимизатора исходят из ложной в данном случае предпосылки что никакого вреда не будет. Это просто ошибка (и в конкретной реализации конкретного оптимизатора). Ну сделайте дисабл-ключик, делов-то

Этот ключик может таких лулзов добавить, потом баги чинить офигеешь.

Авторы оптимизатора исходят из того, что написано в стандарте языка, который они реализуют. В частности:

In the abstract machine, all expressions are evaluated as specified by the semantics. An actual implementation need not evaluate part of an expression if it can deduce that its value is not used and that no needed side effects are produced (including any caused by calling a function or accessing a volatile object).

Секция 5.1.2.3, пункт 4 (https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf).

И здесь мы приходим к довольно парадоксальной проблеме, которая не раз уже обсуждалась: на самом деле, есть три разных языка C. Есть C, который описан в стандарте. Есть C, который реализован в наиболее популярных компиляторах. И есть C, который существует в головах программистов на C. И разница между этими языками может быть довольно существенной.

Функция explicit_bzero(), на которую так все молятся, на самом деле точно так же может перестать работать в каком-нибудь новом компиляторе. И это совершенно не будет багом компилятора. Это именно проблема языка, на которую все положили огромный болт.

Наверное, было бы классно действительно выкинуть существующий стандарт на помойку и сделать новый, который будет описывать именно существующий язык. И заодно убрать оттуда всё UB и сделать его DB. Потому что оптимизации, от которых все выигрывали 40 лет назад, сейчас уже довольно бесполезны и наносят больше вреда чем пользы. Но увы и ах, этого не случится, и программисты на C так и будут отстреливать себе яйца из пулемёта.

Исправление hateyoufeel, :

авторы оптимизатора исходят из ложной в данном случае предпосылки что никакого вреда не будет. Это просто ошибка (и в конкретной реализации конкретного оптимизатора). Ну сделайте дисабл-ключик, делов-то

Этот ключик может таких лулзов добавить, потом баги чинить офигеешь.

Авторы оптимизатора исходят из того, что написано в стандарте языка, который они реализуют. В частности:

In the abstract machine, all expressions are evaluated as specified by the semantics. An actual implementation need not evaluate part of an expression if it can deduce that its value is not used and that no needed side effects are produced (including any caused by calling a function or accessing a volatile object).

Секция 5.1.2.3, пункт 4 (https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf).

И здесь мы приходим к довольно парадоксальной проблеме, которая не раз уже обсуждалась: на самом деле, есть три разных языка C. Есть C, который описан в стандарте. Есть C, который реализован в наиболее популярных компиляторах. И есть C, который существует в головах программистов на C. И разница между этими языками может быть довольно существенной.

Функция explicit_bzero(), на которую так все молятся, на самом деле точно так же может перестать работать в каком-нибудь новом компиляторе. И это совершенно не будет багом компилятора. Это именно проблема языка, на которую все положили огромный болт.

Исходная версия hateyoufeel, :

авторы оптимизатора исходят из ложной в данном случае предпосылки что никакого вреда не будет. Это просто ошибка (и в конкретной реализации конкретного оптимизатора). Ну сделайте дисабл-ключик, делов-то

Этот ключик может таких лулзов добавить, потом баги чинить офигеешь.

Авторы оптимизатора исходят из того, что написано в стандарте языка, который они реализуют. В частности:

In the abstract machine, all expressions are evaluated as specified by the semantics. An actual implementation need not evaluate part of an expression if it can deduce that its value is not used and that no needed side effects are produced (including any caused by calling a function or accessing a volatile object).

Секция 5.1.2.3, пункт 4 (https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf).

И здесь мы приходим к довольно парадоксальной проблеме, которая не раз уже обсуждалась: на самом деле, есть три разных языка C. Есть C, который описан в стандарте. Есть C, который реализован в наиболее популярных компиляторах. И есть C, который существует в головах программистов на C. И разница между этими языками может быть довольно существенной.