LINUX.ORG.RU

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

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

Для стандартных типов поведение описано в https://github.com/rust-lang/rfcs/blob/master/text/0560-integer-overflow.md

Summary

Change the semantics of the built-in fixed-size integer types from being defined as wrapping around on overflow to it being considered a program error (but not undefined behavior in the C sense).

Т.е. этот RFC меняет поведение, которое было ранее определено (арифметика по модулю) на «либо по модулю, либо падаем». А где гарантия, что какой-нибудь новый RFC это снова не поменяет завтра?

Как из стандарта Си понять, что выведет код

Я не понимаю, что ты хочешь этим сказать. Стандарт определяет понятие strictly conforming программ — это программы, поведение которых одинаково при любой реализациии стандарта. Эта программа (если додумать main) не strictly conforming, поскольку существует реализация, под которой она являет undefined behavior. А ещё существует реализация, под которой её поведение определено. С таким же успехом можно спросить, что сделает код

fn main() { println!("{}", std::usize::MAX); }
или
fn main() { println!("{}", 1u32 << 32u32); }

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

Для стандартных типов поведение описано в https://github.com/rust-lang/rfcs/blob/master/text/0560-integer-overflow.md

Summary

Change the semantics of the built-in fixed-size integer types from being defined as wrapping around on overflow to it being considered a program error (but not undefined behavior in the C sense).

Т.е. этот RFC меняет поведение, которое было ранее определено (арифметика по модулю) на «либо по модулю, либо падаем». А где гарантия, что какой-нибудь новый RFC это снова не поменяет завтра?

Как из стандарта Си понять, что выведет код

Я не понимаю, что ты хочешь этим сказать. Стандарт определяет понятие strictly conforming программ — это программы, поведение которых одинаково при любой реализациии стандарта. Эта программа (если додумать main) не strictly conforming, поскольку существует реализация, под которой она являет undefined behavior. А ещё существует реализация, под которой её поведение определено. С таким же успехом можно спросить, что сделает код

fn main() { println!("{}", std::usize::MAX); }
или
fn main() { println!("{}", 1u << 32u); }

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

Для стандартных типов поведение описано в https://github.com/rust-lang/rfcs/blob/master/text/0560-integer-overflow.md

Summary

Change the semantics of the built-in fixed-size integer types from being defined as wrapping around on overflow to it being considered a program error (but not undefined behavior in the C sense).

Т.е. этот RFC меняет поведение, которое было ранее определено (арифметика по модулю) на «либо по модулю, либо падаем». А где гарантия, что какой-нибудь новый RFC это снова не поменяет завтра?

Как из стандарта Си понять, что выведет код

Я не понимаю, что ты хочешь этим сказать. Стандарт определяет понятие strictly conforming программ — это программы, поведение которых одинаково при любой реализациии стандарта. Эта программа (если додумать main) не strictly conforming, поскольку существует реализация, под которой она являет undefined behavior. А существует реализация, под которой её поведение определено. С таким же успехом можно спросить, что сделает код

fn main() { println!("{}", std::usize::MAX); }
или
fn main() { println!("{}", 1u << 32u); }