ウィズコロナ on Nostr: Rustで struct A { i: i32 } fn main() { let mut a = A { i: 0 }; let ptr = &mut a as ...
Rustで
struct A { i: i32 }
fn main() {
let mut a = A { i: 0 };
let ptr = &mut a as *mut A;
let ai = &a.i;
unsafe {
(*ptr).i = 10;
}
print!("{} {}", a.i, ai);
}
とするとリリースビルドでも10 10が出力されるんだけど、Rustはimmutable borrowを証拠にした参照の最適化はしないと思っていいのかな(ナイーブにはaiがimmutable borrowであることを利用して*aiを0に置き換えるような最適化が起きてもおかしくない気がする)
Published at
2024-03-18 09:32:55Event JSON
{
"id": "8b4760b69510c86076951062d44d8436511f8622e86809277e6f6b82659cb4f5",
"pubkey": "4be1635c207976586e98bd062947995cb87298773d506e0c2f00a089e1d6517b",
"created_at": 1710754375,
"kind": 1,
"tags": [
[
"proxy",
"https://social.mikutter.hachune.net/users/osa_k/statuses/112115998736722922",
"activitypub"
]
],
"content": "Rustで\nstruct A { i: i32 }\n\nfn main() {\n let mut a = A { i: 0 };\n let ptr = \u0026mut a as *mut A;\n\n let ai = \u0026a.i;\n unsafe {\n (*ptr).i = 10;\n }\n \n print!(\"{} {}\", a.i, ai);\n}\nとするとリリースビルドでも10 10が出力されるんだけど、Rustはimmutable borrowを証拠にした参照の最適化はしないと思っていいのかな(ナイーブにはaiがimmutable borrowであることを利用して*aiを0に置き換えるような最適化が起きてもおかしくない気がする)",
"sig": "5dc20a4d768c8dbeadcd9d964f9399f335cd938a2871f2ee43de5c8361b734878086ec6e1f5ba22cc7059e8fe299d1cd5816242a28d89a77c959ccfe5907fbd0"
}