Rust part27 (406レス)
上下前次1-新
75: 2024/12/07(土)13:24 ID:4WGAo47f(4/7) AAS
>>73
rev()メソッドのtrait DoubleEndedIteratorはゼロコスト抽象化
逆順に並べ替えることはしないのでそのためのメモリは必要ない
既にある任意の構造を後ろからたどる、あるいは、後ろから計算するだけ
76(1): 2024/12/07(土)13:35 ID:4WGAo47f(5/7) AAS
>>74
それならば別の条件が必要となるIterator::max()を事例に出すのはよろしくないかな
説明するためには単純にこれだけでいいよ
let first = iter.next();
let second = iter.next();
println!("{first:?} {second:?}");
77(1): 2024/12/07(土)14:11 ID:TKfUhpHo(3/3) AAS
>>76
next2回呼ぶだけだとstd::iter::Iteratorと関係なくなるだろ
自分がそういう使い方をしなければ問題ないってなるだけ
maxはstd::iter::Iteratorの実装に求められる条件の分かりやすい例として挙げた
別の条件まで気にするならmax_byでもいいけどそれはそれで初心者には余計なノイズが増える
78(1): 2024/12/07(土)14:52 ID:MlZHBv1+(3/5) AAS
コピーもcloneもできないデータの存在自体がノイズだね
本当はcloneできるんだけどゼロコストではできないとか言ってるのもノイズだ
79: 2024/12/07(土)15:42 ID:YxUwNEYs(1) AAS
結局>>53は何がしたかったのか
80: 2024/12/07(土)16:58 ID:ikP3bVWr(1) AAS
>>67
stdのIterator::nextの&mut selfのライフタイムはnextメソッドを抜けるところまで
(次のnextが呼ばれるまで生きてない)
つまりstdのIteratorでは&mut selfのライフタイムに依存するような参照を返すことはできないということ
そういう参照を返したいならlending iterator
逆に言えば&mut selfのライフタイムに依存しない参照であればstdのIteratorでも返せるということ
81: 2024/12/07(土)17:27 ID:4WGAo47f(6/7) AAS
>>77
max_byも同じ
Ord実装型そのものかOrd実装型に変換してOrd::cmp()できる時のみ利用できる
それらを持ち出さなくてもSelf::Itemの条件なくcollect()すなわち収納型へのFromIteratorが適用される
つまりfirst要素とsecond要素が同時に存在することになると矛盾の説明で十分となる
そのため自己参照を返すイテレータはstd::iter::Iteratorがカバーする範囲になく別途必要となる話をしてきた
82: 2024/12/07(土)17:32 ID:4WGAo47f(7/7) AAS
>>78
イテレータが返すのはデータ値自体とは限らず参照も返す
特に今回の質問者が返したい可変参照は明確に!Cloneが定義されていてもちろん!Copyでもある
それでも可変参照をイテレータが返すことができてVecへ収容することも可能なのはCloneもコピーも行われないためだ
さらにそれらと全く独立した話としてイテレータ自体への参照/可変参照を返す場合はstd::iter::Iteratorで扱えないためLendingIteratorを使うという話が本題
83(1): 2024/12/07(土)18:53 ID:MlZHBv1+(4/5) AAS
そんなに移動がしたいならこれでいい
first = into_next(iter); // iterはもう値を所有しない
second = into_next(first) // firstはもう値を所有しない
84: 2024/12/07(土)19:21 ID:8M4lSePd(1) AAS
>>83
それによって新たにできるようになることや新たに生じるメリットは何?
85: 2024/12/07(土)21:52 ID:MlZHBv1+(5/5) AAS
C++でもRustでも変わらないメリットはcloneとdropをしなくてすむことだが
そういえば、Rust固有のメリットは'aが出てこないことと
'staticも出てこないことだな
86: 2024/12/08(日)15:04 ID:vgRddWB1(1) AAS
全然話変わるんだけどPinky Crush新曲のlowercase lifetimeってRust関係あるのかな
87: 2024/12/08(日)22:46 ID:y6R7+MXT(1) AAS
>>61
mutでないiterも出来なくて困ってるとのことなので
スライスのiter()と同じものがLendingIteratorを使わずに書けるよ
struct MyIter<'a, T>(&'a [T]);
fn my_iter<'a, T>(slice: &'a [T]) -> MyIter<'a, T> {
MyIter(slice)
}
impl<'a, T> std::iter::Iterator for MyIter<'a, T> {
type Item = &'a T;
fn next(&mut self) -> Option<Self::Item> {
省15
88(2): 2024/12/09(月)08:04 ID:kf5GINDJ(1/2) AAS
組み込みFW屋さんなんだけどRustやってみようかな…
組み込み屋視点でRustはC++の何を解決してると思う?
組み込み屋なんて古いシステムばかりだからすぐに取って代わることは無いとは思うけど
年々複雑な製品を求められるから選択肢としては持っておきたい
89: 2024/12/09(月)09:11 ID:bWuDC7pJ(1/2) AAS
zulip行けば?
ここにはカスしかおらん
90(1): 2024/12/09(月)09:29 ID:1L49Pn1/(1) AAS
>>88
ダングリング参照を発見出来るだけ……とは言えそれが重要ではあるのだけど。
C++ は結局は人が気を付けなきゃならないことだらけで、複雑になると手におえない。
知ってることでも複雑に絡み合った状況では間違う。
C++ よりは機械的に検証可能な範囲を広げてるだけでもありがたいものだよ。
91: 2024/12/09(月)09:59 ID:kf5GINDJ(2/2) AAS
>>90
え?マジ?
俄然興味湧いてきた
さっさと定時で帰って環境整えるか
92(1): 2024/12/09(月)10:35 ID:URePCLgA(1) AAS
ビット幅気にするようなケースだと
数値型の暗黙の型変換がないとか演算時のオーバーフローの扱いを明示的に書けるとかが結構ありがたい
93: 2024/12/09(月)13:24 ID:wWCmXoxS(1) AAS
科学 + 5ch
【AI】AIはわずか2時間の対話で人間の性格をコピーできる [すらいむ★]
2chスレ:scienceplus
コメントに面白いことが書かれている
94: 2024/12/09(月)13:32 ID:elhM3R9g(1) AAS
>>92
たしかに基礎的なことではあるがC/C++ではうっかり数値型の自動キャストでハマることもあるし
何よりも未定義動作が多くてこれも沼にハマる原因だな
それらを無くしたRustは賢明だ
上下前次1-新書関写板覧索設栞歴
あと 312 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.008s