185 похожих чатов

Касательно УБ, допустим, долбоеб программист накодил УБ, но так сложилось,

что при всех тестах УБ всегда вела себя одинаково (допустим, он собирал всегда одним компилятором и с одними настройками компиляции). Долбоеб программист предполагает, что поведение программы не изменится при трансляции в такой модный современный и безопасный язык Вэ. Но имба разработчик языка Вэ решил, что данный конкретный УБ будет трансформирован в код без УБ, но не с тем поведением, к которому привык долбоеб программист, и что делать?

Ладно там всякие сегфолты и того, но что делать с сиквенс пойнтами: когда функции имеют сайд эффекты, а порядок вызова этих функций в каком-то комплексном выражении определяется настройками оптимизации компилятора и самим компилятором. Если последовательность сайд эффектов важна, то во что должен чудо транслятор в Вэ развернуть такую последовательность?

9 ответов

10 просмотров

Ну если программист настолько идиот, то его ничего не спасёт.

Можно без оскорблений? Есть такая отличная статья про UB - What every compiler writer should know about programmers.

Miautron-Kotik Автор вопроса
Viktor Shamparov
Ну если программист настолько идиот, то его ничего...

Это чисто формальный вопрос, нельзя код с УБ конвертировать в код без УБ, так как разработчик может полагаться на одно конкретное поведение УБ и считать это нормальным.

Miautron Kotik
Это чисто формальный вопрос, нельзя код с УБ конве...

Тут выше уже писали, что в таком случае ссзб. Почему это запрещает конвертацию?

Miautron-Kotik Автор вопроса
Viktor Shamparov
Тут выше уже писали, что в таком случае ссзб. Поче...

Теряется исходное поведение программы, стало быть транслятор некорректен.

Miautron Kotik
Теряется исходное поведение программы, стало быть ...

Эмм, транслятор должен сохранять семантику, а не поведение. А семантика в таком случае определения хоть какого-то поведения вместо UB сохранится.

Miautron-Kotik Автор вопроса
Brenoritvrezorkre
Ну вообще gcc тоже изменяет семантику

Для GCC это УБ, компилятор имеет на это право, язык без УБ должен иметь одно и тоже поведение и не менять его от настроек оптимизации или от фазы луны.

Miautron Kotik
Для GCC это УБ, компилятор имеет на это право, язы...

Ну а CompCert доказанным образом внутри себя семантику для C11 не меняет

Похожие вопросы

Обсуждают сегодня

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Карта сайта