Size: a a a

2021 April 17

D

Dima in rust_offtopic
вопрос не в этом, вопрос в том что мы хотим делать то что для машины ок, но модель языка не разрешает это делать по непонятно каким причинам(в угоду простоты, логичности стандарта, хз почему)
источник

EG

Emmanuel Goldstein in rust_offtopic
Для машины-то что угодно ок
Все ограничения проходят на уровне модели языка
источник

EG

Emmanuel Goldstein in rust_offtopic
Или на уровне виртуальной машины, в рамках которой модель языка сформулирована, как с C.
источник

D

Dima in rust_offtopic
ну вот виртуальная машина си нас не устраивает, а нам нужно делать вещи которые ее не устраивают, что теперь?
источник

EG

Emmanuel Goldstein in rust_offtopic
Для виртуальной PDP-11, в рамках которой сформулирован C, разыменование нулевого указателя — некорректная операция.
Для машины такого понятия, как «нулевой указатель» просто не существует.
источник

EG

Emmanuel Goldstein in rust_offtopic
Ну, пока мы компилируемся в машинный код, мы имеем право делать что хотим.
источник

D

Dima in rust_offtopic
ну меня не устраивает как data race определен в  рамках виртуальной машины си, что делать?
источник

EG

Emmanuel Goldstein in rust_offtopic
Компилироваться в машинный код, не проходя через компиляторы C, очевидно же.
источник

EG

Emmanuel Goldstein in rust_offtopic
Тогда тебе пофиг на C и его data race.
источник

D

Dima in rust_offtopic
ага, для каждой платформы на асме писать, я не линукс кернел которые  свою мемори модел юзают
источник

EG

Emmanuel Goldstein in rust_offtopic
Ну, тогда тебе придётся использовать какой-то язык, который как-то определил свою модель
источник

EG

Emmanuel Goldstein in rust_offtopic
Модель Rust, например, местами слабее, чем модель C
источник

EG

Emmanuel Goldstein in rust_offtopic
Если тебе нужно определённое поведение для signed integer overflow, то ты можешь взять Rust
источник

D

Dima in rust_offtopic
нет, остается делать "уб", с "знанием" того что компилятор не может че-то напортачить
источник

EG

Emmanuel Goldstein in rust_offtopic
Компилятор, в некотором роде, работает на уровне ниже, чем виртуальная машина, а потому не стеснён её ограничениями
источник

EG

Emmanuel Goldstein in rust_offtopic
Впрочем, например, конкретно rustc имеет право нарушать свои правила, а вот нарушать правила LLVM ему нельзя, потому что под ним ещё одна VM
источник

EG

Emmanuel Goldstein in rust_offtopic
std можно (и следует) считать модулем компилятора. Как минимум, у неё с физической точки зрения специальные права из-за #[lang]
источник

D

Dima in rust_offtopic
правила которой опять же худ. литература, она с int_to_ptr_cast не могла/или уже может хз скока лет
источник

EG

Emmanuel Goldstein in rust_offtopic
В int_to_ptr_cast и C плохо может
источник

EG

Emmanuel Goldstein in rust_offtopic
Это ограничения более низкого уровня
источник