Size: a a a

2021 March 14

CD

Constantine Drozdov in rust_offtopic
мне кажется, что утверждение inttoptr(ptrtoint(x)) is the same as x это вообще единственная гарантия, которая даётся про преобразования указателя в число
источник

D

Dima in rust_offtopic
Constantine Drozdov
мне кажется, что утверждение inttoptr(ptrtoint(x)) is the same as x это вообще единственная гарантия, которая даётся про преобразования указателя в число
Ну вот научи ее компилятов соблюдать
источник

D

Dima in rust_offtopic
Алексей
Below, I will show a series of three compiler transformations that each seem “intuitively justified”, but when taken together they lead to a clearly incorrect result. I will use LLVM for these examples, but the goal is not to pick on LLVM—other compilers suffer from similar issues. The goal is to convince you that to build a correct compiler for languages permitting unsafe pointer manipulation such as C, C++, or Rust, we need to take IR semantics (and specifically provenance) more seriously.
Так и что?
источник

CD

Constantine Drozdov in rust_offtopic
Dima
Ну вот научи ее компилятов соблюдать
Что значит "научи компилятор соблюдать"? Языковые ограничения не распространяются на компилятор
источник

CD

Constantine Drozdov in rust_offtopic
Реализация strlen в libc может выходить за границы массива и от этого компилятор не UBает
источник

D

Dima in rust_offtopic
Constantine Drozdov
Что значит "научи компилятор соблюдать"? Языковые ограничения не распространяются на компилятор
Ещё как распространяются
источник

CD

Constantine Drozdov in rust_offtopic
Dima
Ещё как распространяются
Не UBает, UB - термин стандарта, стандарт описывает поведение программы на языке, а не поведение компилятора
источник

А

Алексей in rust_offtopic
Constantine Drozdov
Не UBает, UB - термин стандарта, стандарт описывает поведение программы на языке, а не поведение компилятора
На самом деле уб в стандарте развязывает компилятору руки. И компилятор может делать вообще что угодно. В этом то проблема
источник

CD

Constantine Drozdov in rust_offtopic
Это из серии "код <stdio.h> написан на С" - нет, не написан
источник

А

Алексей in rust_offtopic
Dima
Так и что?
И смысл тогда брать гцц?
источник

А

Алексей in rust_offtopic
Алексей
На самом деле уб в стандарте развязывает компилятору руки. И компилятор может делать вообще что угодно. В этом то проблема
В том числе и проводить в итоге некорректные оптимизации. Или не проводить
источник

D

Dima in rust_offtopic
Constantine Drozdov
Не UBает, UB - термин стандарта, стандарт описывает поведение программы на языке, а не поведение компилятора
Имеет ли право комплятор свести три atomic_load_relaxed в один? Естественно между ними ничего нету, и и в качестве аргумента у них одикавовый параметр
источник

D

Dima in rust_offtopic
Алексей
И смысл тогда брать гцц?
Гсс гораздо надёжнее, ему Линукс кернел приходится поддерживать
источник

А

Алексей in rust_offtopic
Dima
Гсс гораздо надёжнее, ему Линукс кернел приходится поддерживать
Сильное заявление
источник

CD

Constantine Drozdov in rust_offtopic
Dima
Имеет ли право комплятор свести три atomic_load_relaxed в один? Естественно между ними ничего нету, и и в качестве аргумента у них одикавовый параметр
Это правильный вопрос. Для любой программы стандарт определит одно из следующих поведений - well defined, implementation-defined, unspecified, undefined. Что-то мне подсказывает, что вопрос о равенстве целочисленных значений указателей не относится к первым двум, так что компилятор делает что угодно и не обязан это декларировать
источник

D

Dima in rust_offtopic
Алексей
Сильное заявление
Так и есть
источник

А

Алексей in rust_offtopic
Dima
Так и есть
Ну конечно
источник

CD

Constantine Drozdov in rust_offtopic
Скорее всего я чуть ошибаюсь и ответ в данном случае не undefined а unspecified и сравнение выдаст какой-то результат, но это совершенно точно не означает, что компилятор не может считать результат этого сравнения разным в разных строках кода
источник

D

Dima in rust_offtopic
Constantine Drozdov
Это правильный вопрос. Для любой программы стандарт определит одно из следующих поведений - well defined, implementation-defined, unspecified, undefined. Что-то мне подсказывает, что вопрос о равенстве целочисленных значений указателей не относится к первым двум, так что компилятор делает что угодно и не обязан это декларировать
Нет, правильный ответ, хрен его знает может быть и можно но мы насколько хз что делать с атомиками, что ничего не будем оптимизировать
источник

А

Алексей in rust_offtopic
Dima
Гсс гораздо надёжнее, ему Линукс кернел приходится поддерживать
Но вообще вроде как и clang можно ядро собрать
источник