Rustとか言うダブスタ言語 (173レス)
1-

126: 2024/10/21(月)02:50 AAS
fn main() {
// copyの例
let x = 5;
print_value(x);
println!("After value passing: x = {}", x); // xは依然として使用可能

// 参照渡しの例
let mut y = String::from("hello");
print_reference(&y);
println!("After reference passing: y = {}", y); // yは依然として使用可能

// moveの例
let z = String::from("world");
take_ownership(z);
// println!("After moving: z = {}", z); // これはコンパイルエラーになる

// 可変参照の例
let mut w = String::from("rust");
modify_string(&mut w);
println!("After mutable reference: w = {}", w);
}

参照渡しとムーブを混同してる。参照渡しの場合は関数呼んだ後でもアクセス出来る。可変参照でもね。
127: 2024/10/21(月)03:04 AAS
普通は関数呼んだあとも変数使える方が便利だしそのようにするのよ。参照で渡せる場合はそうする。
逆にムーブが発生する場合は意図的に所有権を渡している。その違いは関数見りゃ解るし、引数の型見ればわかる。
128: 2024/10/21(月)03:25 AAS
>>121
例えば文字列(str)への参照を受け渡す場合
アドレスだけ渡されても長さがわからなければ意味ないでしょ
可変長サイズのデータの参照はアドレス+長さになります
常識的に考えればわかるよね
129
(1): 2024/10/21(月)03:31 AAS
>>123
その>>11を見たらめちゃくちゃデタラメで意味不明な書き込みだぞ

>これは値型だからこいつに代入しても使える~
>こいつは参照型だからもうこの変数使わないどこ~
>とかやってんだろうなw
130: 2024/10/21(月)03:56 AAS
>>1さんは参照がムーブすると思い込んでる病気なのよ
131: 2024/10/21(月)05:13 AAS
LSPとデバッガの区別も付いてないし。プログラミングしてないのは明らか。
132
(1): 2024/10/21(月)05:22 AAS
>>29
例えばこの例で書かれたような拙いプログラムでも別にいいのよ。どうせコンパイラが最適化して重複削除するから変数領域すら確保されない、実際copyされるわけないし、スタックでリークする要素全くないし。
何を心配してるのか分からん。
133: 2024/10/21(月)05:53 AAS
あー変数への代入と束縛の違いもわかってなさそう。
rustのletは代入じゃなくて束縛ですよ。
ムーブしたなら同じアドレスに対する名前がつけ変わるだけですよ。
134: 警備員[Lv.18] 2024/10/21(月)07:14 AAS
>>129
すまんどこがでたらめなんだ?
お前らがデバッガー見てやってることだけど
135
(1): 警備員[Lv.18] 2024/10/21(月)07:24 AAS
>>132
だからさぁ
メモリリークしちゃうのが問題なんじゃなくてこんな拙いクソコードを書く可能性があるって話してんの
わかる?
136
(1): 警備員[Lv.18] 2024/10/21(月)07:27 AAS
でそれを回避しようとするにはデバッガー見て
>>11をしないといけない
なんならlet a = 3.402823eの場合はプリミティヴ型だからコンパイルエラーは出ない
だからいちいち割り当てていかないと上のような訳のわからないコードを描いてしまうことになる
137
(1): 2024/10/21(月)08:38 AAS
>>122
>>プリミティヴ型と普通の型で振る舞い変えるのは事実だろ

そんな事実はない
そもそも普通の型なんていう分類はない
何を言いたいのか?
138: 2024/10/21(月)08:43 AAS
他の言語とは違って
Rustではデータ競合も参照競合も発生しないため
意図せずデータが書き換わってしまうことが発生しないので
デバッガーのお世話になったことが一度もない

>>136
デバッガーなんてRustで使わないので
あなたの文章の意味がわからないです
139: 2024/10/21(月)09:00 AAS
>>135
メモリリークしない事は理解できたのね。
心配はなくなったね。

仮に拙い書き方でもコンパイル出来たら出てくるコードは最適化されてて正しく動くんだから問題ないよね。むしろ優秀だよね。
140: 2024/10/21(月)09:03 AAS
Rustの前に、自分が本当に伝えたいことを整理する日本語コミュニケーション能力を学んだほうがいい
主張の正当性の前に、何言ってるかすら誰にも伝わってないのはわかるだろう
141: 2024/10/21(月)12:44 AAS
そりゃ無職だからなあ
142
(1): 2024/10/21(月)15:59 AAS
>>1
>>値型と参照型で振る舞い変えるダブスタ言語だけど使ってるやついる?

参照ではない値の型をTとして
その値の参照の型を&Tとすると
値Tと参照&Tで振る舞いが異なるのは当たり前じゃないかな?
値そのものとそこを指す参照(アドレスなど)に違いは必ず出るよ
何を言いたいのか主張がよくわからないね

むしろRustは値Tでも参照&Tでも区別なく
同じ記法「.フィールド名」「.メソッド名()」で記述できるから
C/C++よりもシンプルだね
143: 2024/10/21(月)21:34 AAS
>>11についていえば、参照に&付けるのはC++もそうだよ

// aに巨大なデータが格納されてるとする
auto a = vector<uint8_t>();

auto b = a; // コピー
auto& c = a; // 参照
auto d = move(a); // ムーブ, これ以降aやcは使用不可

&を付けないと巨大なコピーが行われるので、C++開発者は気を付けて書く必要がある
(画像処理とかだとありがちだけど、aが数十MBのメモリを確保してるオブジェクトだとしたら?)

Rustはコピーとムーブのどちらに明示が必要かが逆なだけで、参照などの概念は同じ (C++はムーブにmoveが必要、Rustはコピーにcloneが必要)
GCを使う言語とは違うけど、参照かどうかの区別はC++開発者にとっては当たり前で、Rust特有ってわけでもない
intなどの型でムーブを使う理由が無い点も同じ
144: 2024/10/21(月)21:34 AAS
更に言えば、C++だとムーブ後の変数を使ってもコンパイルエラーにならず実行時に問題を引き起こすので、使うのに注意が要る
デフォルトがコピーなのは安全だけど、意図せぬパフォーマンス低下を引き起こしやすい
(「ムーブは可能だけどコピーは不可能なクラス」を作る方法もある)

Rustはムーブ後の変数の使用をコンパイルエラーにした上でデフォルトをこちらにして、コストのかかるコピーを明示が必要にするという考え
145: 2024/10/21(月)21:40 AAS
なので >>11 は自分の知ってる言語に無い概念を理解しようとすらしてないだけだと思う
Cしか知らない人がOOP言語の入門書を読んで「クラス」の章に文句言い続けてるようなのと変わらない
1-
あと 28 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.018s