探検


Rust part37

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2026/07/17(金) 19:12:31.24ID:yl11920u
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part36
https://mevius.5ch.io/test/read.cgi/tech/1779974768/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.io/test/read.cgi/tech/1514107621/
2026/07/19(日) 22:07:14.39ID:MJtW4T88
300レスもこれで荒らし続けてるのか
ID:GVCMKu1fは嘘吐きの代名詞だなw
2026/07/19(日) 22:07:52.50ID:MJtW4T88
>>445
固有の事情ってなんだよw
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」んじゃなかったのか?ww
2026/07/19(日) 22:08:38.04ID:Djh5FEvH
>>447
そりゃ「unsafeは別だから!」だろw
2026/07/19(日) 22:09:20.59ID:NI8kFB3Y
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!

そんなことないです! 固有の事情! そう、固有の事情です!

これの納得いく説明を早くしてくれよww
2026/07/19(日) 22:09:54.58ID:1BBaabLV
>>449
ひでえなあw
2026/07/19(日) 22:10:17.20ID:GVCMKu1f
>>443
反例を持ってこいよ
おまえらRustアンチはたった一つの反例を示すだけでいいんだぞ
Rustでは以下が必ず成り立つ

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 22:11:11.81ID:zr2PrtJM
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらッて条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!

ちょっときれいに整理してみた
2026/07/19(日) 22:11:44.61ID:zr2PrtJM
>>451
もう300レスも前に示されてるよ
お前はまだそれに答えてないだけw
2026/07/19(日) 22:12:08.90ID:GVCMKu1f
>>452
捏造しだしたら君の負け
2026/07/19(日) 22:12:24.24ID:GVCMKu1f
>>453
どれですか?
2026/07/19(日) 22:12:53.75ID:K5dJ0PBv
>>451
じゃあ thread::spawn() と同じ機能を持った任意のライフタイムの参照を受け取って返せる関数を出せよ
お前が言ってるのは「僕の頭の中にはあるんだい!」で反証可能性がない
2026/07/19(日) 22:13:27.57ID:Hr73tPpm
>>454-455
捏造してるのはずっとお前
まだ thread::spawn() という反例に答えてない
2026/07/19(日) 22:14:00.95ID:3qV+/qVC
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらッて条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!

早くこれに納得いく説明をしてくれよww
2026/07/19(日) 22:14:42.08ID:GVCMKu1f
>>456
そんな主張をしていないだろ
前提を恒真へ含めるなよ

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 22:14:50.31ID:3qV+/qVC
>>451
複おじ理論「thread::spawn() を使う奴はRustアンチ!」
2026/07/19(日) 22:15:16.97ID:jnkqq9MC
>>459
「実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!」w
2026/07/19(日) 22:15:25.36ID:GVCMKu1f
>>457
thread::spawn()も受け取った参照を返せます
2026/07/19(日) 22:15:43.38ID:+Fv0Z1+W
>>459
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらッて条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!

早くこれに納得いく説明をしてくれよwww
2026/07/19(日) 22:16:26.77ID:+Fv0Z1+W
>>462
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「任意のライフタイムで必ず成立する」
本当だな?
これで 'static しか返せなかったら嘘吐き確定だぞ
2026/07/19(日) 22:17:54.28ID:5Y4SYvdz
「付加条件なく必ず成り立ちます」w
2026/07/19(日) 22:19:58.42ID:GVCMKu1f
>>464
spawnでは受け取る参照を制限していますが
その参照についても以下は必ず成り立ちます

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 22:20:02.56ID:c6ZpTEik
>>462
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「任意のライフタイムで必ず成立する」「付加条件なく必ず成り立ちます」
この条件で返せるって証明してくれよ
2026/07/19(日) 22:20:42.70ID:c6ZpTEik
>>466
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「任意のライフタイムで必ず成立する」「付加条件なく必ず成り立ちます」
この条件で返せるって証明してくれよ
お前が言ったんだからさ、「受け取る参照を制限していますが」なんて逃げはいらないんだわ
2026/07/19(日) 22:21:35.77ID:XResoogo
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらって条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!
受け取る参照を制限しているから、受け取ったら返せるんです!

早くこれに納得いく説明をしてくれよwww
2026/07/19(日) 22:21:39.57ID:GVCMKu1f
早く反例コードを出してくださいよ
2026/07/19(日) 22:23:05.98ID:r4QFGOjn
>>466
その主張だと今度
std::thread::Builder::spawn_unchecked()
では受け取る参照を制限していないから不成立だぞ
2026/07/19(日) 22:23:43.09ID:r4QFGOjn
>>470
ずっと出てるだろ
thread::spawn() だと 'static じゃないどの参照でも返せない
2026/07/19(日) 22:24:28.65ID:GVCMKu1f
>>471
返せるよ
やってみ
2026/07/19(日) 22:25:04.76ID:lSihsm4A
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらって条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!
受け取る参照を制限しているから、受け取ったら返せるんです!

早くこれに納得いく説明をしてくれよww
下2つは std::thread::Builder::spawn_unchecked() では成り立たないぞwww
2026/07/19(日) 22:25:52.00ID:GVCMKu1f
>>472
それは以下に明記されてる前提を満たしてないからだろ

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 22:26:01.71ID:HI6IurVy
>>473
ついに完全な嘘を吐いたな
チェックはされないが返せないケースはなくなってない
2026/07/19(日) 22:26:27.39ID:BHraHSW4
>>475
どう見ても満たしとるわマヌケ
2026/07/19(日) 22:27:25.01ID:GVCMKu1f
>>474
実際にやって見ろよ
std::thread::Builder::spawn_unchecked() でも返せるぞ
2026/07/19(日) 22:27:55.87ID:F0MnotzK
>>473
std::thread::Builder::spawn_unchecked() で任意の参照を受け取って返せるって言うなら、当然それを受け取って返して読めるコードができるってことだよな
これやってみようぜww
動かなかったらID:GVCMKu1fは嘘吐きな
2026/07/19(日) 22:28:23.95ID:GVCMKu1f
>>477
前提条件「それを関数の引数で受け取ったら」を満たしてない
2026/07/19(日) 22:28:44.70ID:7X0+qiIb
>>478
嘘吐きは何とやらと言うけど、ここまで堂々とバレてる嘘を吐けるのは逆に才能だなw
2026/07/19(日) 22:29:32.31ID:7X0+qiIb
>>480
thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うって言い訳して逃げようとした時点でその解釈は成り立たないんだわ
2026/07/19(日) 22:29:54.38ID:GVCMKu1f
>>479
ちゃんと返せた
もちろんunsafe関数なので結果は常にunsafe
2026/07/19(日) 22:30:30.82ID:GVCMKu1f
>>482
そんな発言していない
2026/07/19(日) 22:32:55.52ID:XbKlswJJ
まぁ詰まるところは言い回しの問題なんだろうけどさ
2026/07/19(日) 22:35:37.37ID:BeY+J4Fb
>>484
嘘吐いてもバレるのに……
2026/07/19(日) 22:36:11.37ID:GVCMKu1f
>>486
その書き込みを持ってこいよ
2026/07/19(日) 22:36:50.30ID:7jkxblcL
ちなみに>>184で書いた「弱参照を受け取って通常の参照にして返す関数」も普通に書けるからね
「必ず返せる」はもちろん成立しないけれど

unsafe fn get_ref<T>(weak: &Weak<T>) -> &T {
unsafe { &*weak.as_ptr() }
}
2026/07/19(日) 22:38:12.03ID:BeY+J4Fb
>>483
たまたまメモリの領域が生きてただけだろ
2026/07/19(日) 22:39:23.63ID:GVCMKu1f
>>488
引数として受け取った弱参照は必ず返すこたができる
Rustでは以下が常に成立する

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 22:40:16.24ID:GVCMKu1f
>>489
unsafe関数だからそれは許されるのがRust
2026/07/19(日) 22:43:01.84ID:+EgGKzCN
>>491
おい、お前の言ってる条件満たしてるのに動かねえぞ

use std::thread;
use std::time::Duration;

fn main() {
let handle;

{
let mut local_data = 100;
let mut local_data_ref = &mut local_data;

println!("スレッド内の値: {}", local_data);

unsafe {
handle = thread::Builder::new()
.name("dangerous_thread".to_string())
.spawn_unchecked(move || {
thread::sleep(Duration::from_millis(50));

*local_data_ref = 200;

println!("スレッド内の値: {}", local_data_ref);
})
.unwrap();
}
}

handle.join().unwrap();
}
2026/07/19(日) 22:45:23.06ID:J5fxakd4
まだ参照返してもいないのに条件満たしてかつ動かないのおもろいな
2026/07/19(日) 22:48:29.00ID:CA6RNpNI
渡した時点で動かないじゃん
>>491 unsafe関数だからそれは許されるのがRust
このイキりは一体w
2026/07/19(日) 22:52:26.39ID:Q7jr2sjS
不要なmutがあるし色々雑なコードだけど反例としては十分だな
2026/07/19(日) 22:53:19.34ID:GVCMKu1f
>>492
Rust初心者かい?
エラー出てるだろ
try 'rustc --explain E0502'
2026/07/19(日) 22:57:26.40ID:Q7jr2sjS
>>496 ごめんごめん、手打ちしたのが良くなかったな

use std::thread;
use std::time::Duration;

fn main() {
let handle;

{
let mut local_data = 100;
println!("スレッド内の値: {}", local_data);
let local_data_ref = &mut local_data;

unsafe {
handle = thread::Builder::new()
.name("dangerous_thread".to_string())
.spawn_unchecked(move || {
thread::sleep(Duration::from_millis(50));

*local_data_ref = 200;

println!("スレッド内の値: {}", local_data_ref);
})
.unwrap();
}
}

handle.join().unwrap();
}

これでクラッシュした理由を教えてくれや
2026/07/19(日) 23:00:33.97ID:9N1Mvpqx
>>497
どう見ても未定義動作です本当にありがとうございます
2026/07/19(日) 23:02:12.84ID:gOfZIriO
「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

おかしいなあ、返すまでもなく壊れてるぜ
2026/07/19(日) 23:03:42.88ID:d0lr3qJ1
ちゃんとコンパイルは通るな
2026/07/19(日) 23:05:01.54ID:eHBdU/kr
Windowsでは動くな
未定義動作らしくなってきた
2026/07/19(日) 23:06:23.23ID:GVCMKu1f
>>497
こちらでは以下が表示されて正常終了するが
スレッド内の値: 100
スレッド内の値: 200
動かないこともあるだろうね
unsafe関数を使う時はそのSafety条件を守ることがRustでは必須
2026/07/19(日) 23:08:41.34ID:EPUrWbSR
>>502
お前が言った「Rustでは付加条件なく必ず成り立ちます」には反してる結論だな
納得できたか?
2026/07/19(日) 23:10:37.48ID:GVCMKu1f
>>503
反例になってない
Rustでは以下が常に成立する

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 23:11:11.06ID:+39tuTEu
>>504
ついに「成り立たないが成り立つから成り立つ」って言い始めてて草
1行矛盾
2026/07/19(日) 23:13:19.88ID:d6fluU/x
>>497
地味に無駄mut外されて洗練されてんの笑う
2026/07/19(日) 23:14:11.45ID:d6fluU/x
ただ、上は「スレッド外の値」やな
2026/07/19(日) 23:25:15.72ID:R2LtKg8E
use std::thread;
use std::time::Duration;

fn main() {
let handle;
let mut local_data = 100;
println!("スレッド外の値: {}", local_data);
let local_data_ref = &mut local_data;
unsafe {
handle = thread::Builder::new()
.name("dangerous_thread".to_string())
.spawn_unchecked(move || {
thread::sleep(Duration::from_millis(500));
println!("スレッド内の値: {}", local_data_ref);
*local_data_ref = 200;
println!("スレッド内の値: {}", local_data_ref);
})
.unwrap();
}
}
println!("local_data消失");
handle.join().unwrap();
}

何が起こってるかわかりやすくした
これで動いてしまった場合でも未定義動作だとわかる
2026/07/19(日) 23:25:32.10ID:2iSHfWbm
mut汚染は鉄板だけどunsafe使うのは趣旨に反するよな
Cellとか使うと気持ち悪くできそうだけど複雑になる

fn foo<'a, T, F>(f: F, x: &'a mut T, y: &'a mut T) -> &'a mut T
where
F: FnOnce(&'a mut T, &'a mut T) -> bool
{
if f(x, y) { x } else { y }
}
2026/07/19(日) 23:26:27.45ID:GVCMKu1f
>>497が反例になってない証拠は
簡略化したこのコードをみるとわかる

fn main() {
let handle;
{
let mut local_data = 100;
println!("スレッド内の値: {}", local_data);
let local_data_ref = &mut local_data;
{
handle = Some(local_data_ref);
}
}
handle.unwrap();
}

スコープルールに反しているだけにすぎない
2026/07/19(日) 23:27:18.23ID:bxzaHrV9
条件決めた奴が spawn_unchecked() でも成り立つと明言している以上趣旨には反してない
2026/07/19(日) 23:28:30.71ID:GsL396XN
>>510
スレッド立ててない時点で簡略化できてないぞ
2026/07/19(日) 23:28:33.09ID:GVCMKu1f
>>511
spawn_unchecked()の問題ではないことを
>>510で既に示した
2026/07/19(日) 23:29:11.11ID:MI3knhkj
>>510
そんなスコープにはなってねえよマヌケ
スレッドが何か知らねえのか
2026/07/19(日) 23:29:32.14ID:MI3knhkj
>>513
また新しい嘘が始まったな
2026/07/19(日) 23:29:43.26ID:GVCMKu1f
>>512
handleがスコープ外にあるのに
そこへ参照を入れられないのは当たり前
2026/07/19(日) 23:30:23.43ID:MI3knhkj
>>516
お前の書いたコードじゃなくて元のコードの話してるんだけど
2026/07/19(日) 23:30:57.41ID:GVCMKu1f
>>514
そのスコープ関係になっている
handleとlocal_dataのスコープの食い違いを見なさい
2026/07/19(日) 23:30:58.78ID:UGHA3+tz
勝手に名前だけ似せた関係ないコードにすり替えて話してるのヤバすぎるだろ
2026/07/19(日) 23:31:39.85ID:UGHA3+tz
>>518
お前の書いた妄想コードはhandle = Some(local_data_ref);がある部分のスコープが元のコードと一致してない
2026/07/19(日) 23:31:44.43ID:GVCMKu1f
>>517
元のコードもhandleとlocal_dataのスコープが食い違っている
2026/07/19(日) 23:33:29.24ID:uxNzkEWb
>>510のコードはthread::scopeを使った場合にしか起きないスコープになってる
2026/07/19(日) 23:33:59.63ID:L0YtsTIP
>>521
スレッドとスコープの見わけもつかんのかたわけ
2026/07/19(日) 23:39:08.66ID:GVCMKu1f
本質部分だけ取り出すと理解できない人のために
>>497から一番外側の不要な鍵カッコ2つを取り外すして参照を返すとこうなる

use std::thread;
use std::time::Duration;

fn main() {
let handle;

let mut local_data = 100;
println!("スレッド内の値: {}", local_data);
let local_data_ref = &mut local_data;

unsafe {
handle = thread::Builder::new()
.name("dangerous_thread".to_string())
.spawn_unchecked(move || {
thread::sleep(Duration::from_millis(50));
*local_data_ref = 200;

println!("スレッド内の値: {}", local_data_ref);
local_data_ref
})
.unwrap();
}

let result = handle.join().unwrap();
println!("result: {result}");
}

こうなる
result: 200
2026/07/19(日) 23:39:35.33ID:Je9ZT3pN
どれだけ曲解したところで handle = Some(local_data_ref); がある部分のスコープが local_data より先に終わってる時点でスレッドを理解してないとしか言えない
2026/07/19(日) 23:40:36.64ID:xeU/443Z
>>524
不要な { } と言ってスコープを破壊してコードを書き換えるのは流石に無法すぎる
嘘吐きここに極まれり
2026/07/19(日) 23:41:25.28ID:pTqrx0Og
>>524
お前は一度くらい嘘を吐かずに話せないのか
2026/07/19(日) 23:42:07.87ID:pTqrx0Og
>>524
複オジ理論「不要なスコープを取り除いたらスコープが壊れてるんだ!」
2026/07/19(日) 23:42:38.37ID:GVCMKu1f
>>525
先に終わっても返さない限りは問題なくコンパイルが通る
返した時だけhandleとスコープが食い違っていてコンパイルできなくなる
2026/07/19(日) 23:43:28.52ID:GVCMKu1f
>>526
スコープ外に参照を持ち出せないのはRustの常識
2026/07/19(日) 23:43:33.36ID:lrKY9Hhf
>>529
> 先に終わっても返さない限りは問題なくコンパイルが通る
じゃああのスコープはただの目くらましで笑う
自分から嘘吐きであることを暴露していくのか
2026/07/19(日) 23:44:10.12ID:9U0PzD1P
>>530
何言ってんだこいつ
スコープ内にスレッドはありますけどw
勝手にお前が書き換えたコードじゃなくてもな
2026/07/19(日) 23:44:45.44ID:VYuhTwcT
>>530
じゃあRustのコンパイラは無能だからスコープが壊れててもコンパイルを通すと?w
2026/07/19(日) 23:45:13.52ID:Do2V15MU
複オジなんてどうせ隠れアンチだからな
2026/07/19(日) 23:45:58.75ID:jmKhuzp4
>>530
お前がいかに嘘を吐いても事実は変わらない
スレッドはスコープ内
2026/07/19(日) 23:47:10.55ID:GVCMKu1f
俺は>>524のコードで
spawn_unchecked()でも参照を返せることを示した
もちろんunsafe関数だから未定義動作

反例はここまでになく
Rustでは以下が常に成立する

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
2026/07/19(日) 23:47:11.26ID:2YvNcuM/
>>530
どう見てもスコープ内で渡されてますねえ

use std::thread;
use std::time::Duration;

fn main() {
let handle;
{
let mut local_data = 100;
println!("スレッド外の値: {}", local_data);
let local_data_ref = &mut local_data;
unsafe {
handle = thread::Builder::new()
.name("dangerous_thread".to_string())
.spawn_unchecked(move || {
thread::sleep(Duration::from_millis(500));
println!("スレッド内の値: {}", local_data_ref);
*local_data_ref = 200;
println!("スレッド内の値: {}", local_data_ref);
})
.unwrap();
}
}
println!("local_data消失");
handle.join().unwrap();
}
2026/07/19(日) 23:48:41.40ID:A/rr6nbt
>>536

「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらって条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!
受け取る参照を制限しているから、受け取ったら返せるんです!

やっぱり違う! 俺の書いた見た目の似たコードではスコープから外れてるから違うんだ!

早くこれに納得いく説明をしてくれよww
2026/07/19(日) 23:48:47.51ID:im9d/ITc
>>536

「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらって条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!
受け取る参照を制限しているから、受け取ったら返せるんです!

やっぱり違う! 俺の書いた見た目の似たコードではスコープから外れてるから違うんだ!

早くこれに納得いく説明をしてくれよww
2026/07/19(日) 23:49:03.84ID:GVCMKu1f
>>537
println!("local_data消失");の意味がわからない
消失してないから表示されるぞ
2026/07/19(日) 23:49:22.03ID:RywEX15a
>>536

「どんな寿命の参照でも」「どんな値でも」「他の関数から返ってきたものでも」「関数から必ず返せる」 (>>159)
「任意のライフタイムで必ず成立する」(>>183)
「Rustでは付加条件なく必ず成り立ちます」(>>214)

thread::spawn() はクロージャ越しに受け取ってるから引数だけど違うよね……やっぱなし!
クロージャが返してるからセーフ……これもなし!

実は関数の引数で受け取るコードがコンパイル通ったらってことでした! ほら、rustcでコンパイルが通ったら成り立ってるでしょ!
あ、あとunsafeは別だから!

やっぱり標準ライブラリの関数が勝手に「使えるけど使えなくしまーす」って意地悪で言ってるんです!
コンパイル通ったらって条件も残ってます!

そんなことないです! 固有の事情があるんです! そう、固有の事情です!
受け取る参照を制限しているから、受け取ったら返せるんです!

やっぱり違う! 俺の書いた見た目の似たコードではスコープから外れてるから違うんだ!

早くこれに納得いく説明をしてくれよww
2026/07/19(日) 23:49:45.50ID:RywEX15a
>>540
RAIIとスコープについて学んでおいでw
2026/07/19(日) 23:50:23.19ID:RywEX15a
540 デフォルトの名無しさん 2026/07/19(日) 23:49:03.84 ID:GVCMKu1f
>>537
println!("local_data消失");の意味がわからない
消失してないから表示されるぞ

複おじの知能ではスコープはわからない
544デフォルトの名無しさん
垢版 |
2026/07/19(日) 23:51:23.22ID:9D3is3z1
煽りコピペがうざいので減らしてくれ
荒らしはID:GVCMKu1fだけで足りてる
2026/07/19(日) 23:51:50.05ID:GVCMKu1f
>>524のコードで
unsafeのspawn_unchecked()でも参照を返せることを示した
つまり反例は存在しない
意義があるなら反例を持ってきなさい

Rustでは以下が常に成立する

【前提】どんな寿命の参照でも、それを関数の引数で受け取ったら、
【恒真】その参照や一部の参照を、関数から必ず返せる

>>159
>>どんな寿命の参照でも、それを関数の引数で受け取ったら、その参照や一部の参照を、関数から必ず返せる
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況