[過去ログ] Rust part19 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1
(1): 2023/01/17(火)12:41 ID:nikBFIMQ(1) AAS
公式
外部リンク:www.rust-lang.org
外部リンク:blog.rust-lang.org
外部リンク:github.com

公式ドキュメント
外部リンク:www.rust-lang.org

Web上の実行環境
省11
922
(1): 2023/02/25(土)13:34 ID:ArOrHDqj(7/13) AAS
>>921
アクセスする権利とかそういう類のものじゃないから「所有権が保たれる保証」とか的外れだし

特別なdrop処理があろうがなかろうが値はdropされるし
考える必要がなかろうが参照もownerがスコープをはずれたときにdropされるよ
dropされるのはただの事実だよ、ただの事実なので考える必要があるかないかはどうでもいいよ
923
(2): 2023/02/25(土)13:54 ID:sdtPy+yt(4/8) AAS
>>922
普通の値の入った変数は他へ移動しない限りブロックの最後まで所有権があることが保証され最後まで自由に使うことができる
参照の入った変数はその参照が使われなくなったら無効となる使い捨てなのでブロックの最後まで所有権がある保証はない
例えばlet a = &T; f(a); let b = &mut T; g(b); let c = &T; の時点でもうaとbは使い捨てされており無効となり使えない
このように参照の場合は普通の値の場合と全く異なる
そして参照は使い捨てされてもdropで何か特別な処理があるわけではないため参照の所有権を考える意味がない
924
(2): 2023/02/25(土)14:11 ID:ArOrHDqj(8/13) AAS
>>923
>所有権があることが保証され最後まで自由に使うことができる
>無効となる使い捨てなのでブロックの最後まで所有権がある保証はない
>無効となり使えない

・ブロックの最後まで使えるかどうか
・drop時に特別な処理があるかどうか

どちらも所有権の話じゃないね
省2
925
(1): 2023/02/25(土)14:45 ID:bPVO/nT3(1) AAS
参照に限らずCopy型はownership意識する機会が少ないからな
関数に参照の参照(&&T)を渡すみたいな例を考えないと参照値がborrowされた状態を作れない

>>923
「ブロックの最後まで所有権がある保証はない」ってあるけど
仮にブロックの最後で所有権がなくなってるような状況でブロックの最後にその参照を使う処理を追加したときに怒られるのは
ブロックの最後で参照を使った追加箇所じゃなく途中で参照先の値を横取りしようとした部分でしょ
これは「ブロックの最後まで所有権があって最後まで自由に使うことができる」ことにならないかな
926
(1): 2023/02/25(土)14:48 ID:ArOrHDqj(9/13) AAS
参照をフィールドに含む構造体が入った変数はブロックの最後まで自由に使えることは保証されてないけど所有権あるよね^^;
927
(1): 2023/02/25(土)14:58 ID:sdtPy+yt(5/8) AAS
>>924
理解できてるけど意固地になっているだけか
参照の場合はNLLでスコープがブロックではない見えないスコープとなり得て使い捨てできるから参照ルールを満たしてる限り前段は自由となるし
後段のdropは何も特別処理がないし
わざわざ参照の所有権を持ち出してくる意味がないことを理解できてるようだな

>>925
そこは明記が不十分で誤解させたようでごめん
省2
928
(2): 2023/02/25(土)15:05 ID:a4UZTu4a(2/4) AAS
外部リンク[html]:doc.rust-lang.org
スコープの定義を探してこのページに来たが、ブロックの途中でmoveされた変数のスコープの終わりはどこなのか
ふつうに解釈するとブロックの終わりのようだが

"When an initialized variable or temporary goes out of scope, its destructor is run, or it is dropped."
これは「スコープを抜けたらdropする」じゃなくて「スコープを抜けたらdropされていなくてはならない」という制約の表現という解釈が正しいのかな
じゃないと二重解放にすることになっちゃう
929: 2023/02/25(土)15:06 ID:ArOrHDqj(10/13) AAS
>>927
お前が言ってる
・drop時に特別な処理がない
・ライフタイムの制約があり、ブロックの最後まで使える保証がない
は参照だけじゃなくて「参照をフィールドに含むCopy構造体」についても同じ挙動なんだけどね
930
(2): 2023/02/25(土)15:09 ID:sdtPy+yt(6/8) AAS
>>926
なんだちゃんと基本を理解できていないのか
構造体のフィールドに参照を持たせる場合は構造体にライフタイムパラメータが必要となる
したがって参照をその構造体に入れた後にその参照が使い捨てされた場合(例えば後から可変参照を使う場合)はその使い捨て参照と構造体は運命を共にする
ブロックの最後まで所有権がないことはその構造体にimpl Dropした時だけコンパイルエラーなることから分かる
931
(1): 2023/02/25(土)15:10 ID:ArOrHDqj(11/13) AAS
>>930
参照をフィールドに含む構造体については普通に所有権を考える意味があるし、
それとまったく同じ挙動である参照についても所有権を考える意味があるね
終わりだね
932: 2023/02/25(土)15:25 ID:a4UZTu4a(3/4) AAS
>>928
いや、この解釈もだめだ
ローカル変数をmoveで捕捉したクロージャを返す関数は関数のブロックスコープを抜けてもまだdropしちゃいけない
933
(1): 2023/02/25(土)15:27 ID:sdtPy+yt(7/8) AAS
>>931
え?
参照を所有しても使い捨てになるから参照の所有権を考える意味がない話だぞ
934
(1): 2023/02/25(土)15:34 ID:ArOrHDqj(12/13) AAS
>>933
スコープを抜けた時に束縛されたdropする責務があることを「所有権を持つ」って言うから
所有権の話にその値が使い捨てかどうかとかライフタイムの制約があるかとか考える意味があるかとか関係ないよ

参照を束縛した変数も、参照を保持する構造体を束縛した変数も、プリミティブ値を束縛した変数も、
drop時に特別な処理があってもなくても、ライフタイムの制約があってもなくても
いずれについても「スコープを抜けた時に束縛されたdropする責務がある」ので所有権はあるよ
意味があるとかないとかどうでもいいよ
省2
935: 2023/02/25(土)15:34 ID:ArOrHDqj(13/13) AAS
束縛された値、ね
936: 2023/02/25(土)16:01 ID:a4UZTu4a(4/4) AAS
>>928
外部リンク[html]:doc.rust-lang.org
> Initialized
> A variable is initialized if it has been assigned a value and hasn't since been moved from.

一番最初に重要なことが書いてあったやつだすまぬ
つまりmoveされたらその時点でdrop scopeがなくなる=drop責務から解放される=所有権を失うと言えるわけね
937: 2023/02/25(土)16:26 ID:SzGKc5ny(4/4) AAS
意味ないニキ(ID:sdtPy+yt)はもう
自分で何言ってんのか分かってなさそう
938
(1): 2023/02/25(土)21:23 ID:qdHk+tio(1/2) AAS
>>930
ホントにそんなこと起きるのか疑問なので試してみたらマジにそうなった
誰かこうなる仕組みを教えて~

参照をメンバーに持つ構造体で実験
struct Foo<'a> {
x: &'a String,
}
省19
939
(1): 2023/02/25(土)21:45 ID:CalPMh2Z(1/2) AAS
>>938
dropが実行されるときにxが利用される可能性があるから
s.pushの時点ではfoo.x = &sのimmutable borrowがまだ有効なのでmutable borrowはできませんよ
ということ

Dropがなければs.pushの時点でfoo.x = &sが使われる可能性はもうないから
immutable borrowの期間は終わってるものとして扱える
940: 2023/02/25(土)21:56 ID:CalPMh2Z(2/2) AAS
>>934
>参照を束縛した変数も、参照を保持する構造体を束縛した変数も、プリミティブ値を束縛した変数も、
>いずれについても「スコープを抜けた時に束縛されたdropする責務がある」ので所有権はあるよ

現実にはスタックポインタをインクリメント/デクリメントするだけなので
挙げられてるような種類の変数にdropする責務や所有権があるかどうかは
初めての人への説明としてわかりやすいかどうかという主観の問題だよね
941: 2023/02/25(土)22:03 ID:qdHk+tio(2/2) AAS
>>939
ふむむ
参照の所有権は自動的に打ち切られてしまい参照の所有権を考えても意味がないというのは正しいのですか?
impl Drop実装しなければdrop処理は無いと理解していいのですか?
942: 2023/02/25(土)23:40 ID:sdtPy+yt(8/8) AAS
そうだろ
もちろん>>924の言う通り所有権は「値のownerがスコープから外れたら値はdropされる」というルールは常に適用できる
しかし参照については使い捨てができるためブロックスコープではなくルールを成り立たせるために見えない仮想的なスコープを用意してそこを外れたと考える本末転倒
そしてdropについても何もなされない
だからわざわざ参照の所有権を持ち出して来て考える意味がない
参照で重要なのは所有権ではなくmultiple readers xor single writerルール
943: 2023/02/25(土)23:53 ID:alhcSVqs(2/2) AAS
しかし、役に立たないことを知りたがる人間の方が
ある知識が役に立つ証拠が不十分と思ったら勉強やめる人間よりも安定しているかもしれない
944: 2023/02/26(日)00:21 ID:RymrPGNU(1) AAS
それはないな
945: 2023/02/26(日)03:13 ID:7bMwo3Dx(1) AAS
所有権とライフタイムとDropトレイトを全部ごちゃ混ぜにして覚えちゃってる困ったちゃん
946: 2023/02/26(日)10:19 ID:PXNtu1ca(1/3) AAS
初心者になるのも大変だからなw
大体はそれ以前に転がされて終わるw
947
(1): 2023/02/26(日)10:47 ID:PXNtu1ca(2/3) AAS
実用レベルの達する前に学習者の9割が脱落してしまう言語
言語がRustだけになるとIT業界は終わる模様
948: 2023/02/26(日)11:06 ID:GuAg4x+U(1/2) AAS
複オジも仮オジも無意味オジもみんなRustの被害者だった?
949: 2023/02/26(日)11:13 ID:PXNtu1ca(3/3) AAS
誤解して入門を終えて実用的なプログラムを書けないで四苦八苦するのは個人の問題だからいい
でも間違った知識のままそれを主張するのは非常に迷惑

ポインターのミスでヒープをぶち壊してるような感覚
950: 2023/02/26(日)11:27 ID:fGMmkE/4(1) AAS
>>947
その時はIT業界とRust業界に分かれるから大丈夫
951: 2023/02/26(日)11:53 ID:/LcclasN(1/2) AAS
「所有権はdropする責務」の出典だけ分かればすべて腑に落ちる
952: 2023/02/26(日)12:46 ID:bBmvUj++(1) AAS
それでようやく理解できた
参照はdropで何もしないから責務がなくて使い捨てしても構わなくて所有権を考える必要ないと
953: 2023/02/26(日)13:12 ID:GuAg4x+U(2/2) AAS
こいつもう地縛霊やろ…
954
(1): 2023/02/26(日)13:29 ID:sdcrACTy(1) AAS
次スレってワッチョイつけたりしないの?
意図せずともID変わりがちな人もいるし追い辛いからつけてほしい
955: 2023/02/26(日)14:25 ID:dBtzQT39(1) AAS
参照についてだけ""わざわざ""、""特段に""、所有権について ""敢えて意識して""、""所有権について考えないようにする""必要性がない
956
(1): 2023/02/26(日)14:40 ID:/LcclasN(2/2) AAS
付けてもいいけどたぶんそれだと困る人はワッチョイなしでスレを立てる
そしてそっちが伸びれば誰もワッチョイありスレを使わない
そうしてできた残骸がすでに3スレある

立てたければ勝手にすればいいけど、ワッチョイありスレだけを使い荒らしに反応しない強い意志が求められている
957: 2023/02/26(日)17:46 ID:RD2OSQ4A(1) AAS
>>954
>>956
次スレはワッチョイありを再利用すればいいよ。
ゴミスレ残したままなのは迷惑だし。

次スレ
2chスレ:tech
958: 2023/02/26(日)18:37 ID:32xuZUXu(1) AAS
ワッチョイ有無どちらのスレに書き込むかは各自の自由
ワッチョイ無しスレは立てたい人がいればこのスレの後に自由にすればよいが
ワッチョイ有りスレは既に3つもあるため4つ目を立てることは控えた方がよい
959: 2023/02/26(日)19:27 ID:qHcJFulr(1) AAS
IDコロコロ野郎に荒らされるよりはワッチョイでいいやろ
960: 2023/02/26(日)20:16 ID:b1C1t60u(1) AAS
ワッチョイあるスレは十中八九ネガティブ禁止の盲目信者専用になる
961: 2023/02/26(日)20:39 ID:IWkF2kZ0(1) AAS
ワッチョイありが盛り上がってたらそっちに行くって言ってるのに誰も向こうに書かないじゃん
962: 2023/02/26(日)21:10 ID:5AwzMq5X(1) AAS
マイナンバーにたとえるとお金バラまかないと無理なのでは
963: 2023/02/26(日)21:13 ID:5bxi2XZj(1) AAS
自演対立や架空キャラ自演がやりにくくなるからこのままがいい
964: 2023/02/27(月)08:54 ID:a5aJsnij(1) AAS
次スレをワッチョイにして統合すればいいんじゃないの?
965: 2023/02/27(月)19:38 ID:knW1Dm2b(1) AAS
すまんが、The Bookと比較してオライリー本ってどんな内容になってるの?
966
(1): 2023/02/27(月)21:25 ID:4hfcaKna(1/2) AAS
The Bookと比較すると
- 図や説明がわかりやすい
- カバーしてる範囲がやや広く説明も詳しめ
- C++との比較がやや多い
- IteratorやStringのメソッドの多くを一つ一つ説明しておりややくどい
- Rust特有のコードの読み方も書いてあって助かった (‘aはティックエーと読む等)

個人的には1点目がすごく大きかった
省1
967: 2023/02/27(月)21:31 ID:qRKv85Qa(1) AAS
オライリー本はRust始めた時に買ったけど一生積んでる
968: 2023/02/27(月)21:36 ID:4hfcaKna(2/2) AAS
ここで少し中身を見てみれば? amazonのlook insideより多く見れる
外部リンク[html]:books.google.com
969: 2023/02/27(月)22:07 ID:mGWqDr1m(1) AAS
>>966
最後わかる〜
970
(2): 2023/03/01(水)09:54 ID:Nh0mXjrz(1) AAS
Rcって値を所有してるの?
参照だから複数存在できる感じ?
規則と矛盾してて全く分からない
971: 2023/03/01(水)12:37 ID:Avl8k8mO(1) AAS
>>970
同じ値を複数のRCで共有している。

Rustの場合、RCの「参照」は、参照と借用とか参照外しとかの「参照」とは別物と考えたほうが良い。
972: 2023/03/01(水)13:03 ID:450i2TJh(1) AAS
>>970
共同所有

Rc::cloneで新しい共同所有者を追加する
共同所有者がスコープアウトすると共同所有者リスト的なものから削除される
最後の所有者がスコープアウトする際に所有してるポイント先もdropされる
973
(3): 2023/03/01(水)23:42 ID:+2HtVlqv(1) AAS
これを?オペレータ使った書き方するにはどうすればいいですか?
if let [first, second, third] = vec {
...
}
これでは上手く行きませんでした
let [first, second, third] = vec?;
974: 2023/03/02(木)06:24 ID:lQMCQ2j6(1) AAS
>>973
マッチしなかった場合どうしたいのか?
そのコードが含まれる関数の戻り値の型は?
975
(1): 2023/03/02(木)08:11 ID:iXGuMNZc(1) AAS
Rustに限った話じゃないけど低レイヤーに関する情報ってなかなか入手できない
Rustなら一応Embedded Rustがあるけど実践的にはいろいろ足りてない
976
(1): 2023/03/02(木)12:26 ID:OJtdP8PO(1) AAS
↓この人、美しいクレイピングを書ける!
977: 2023/03/02(木)19:10 ID:OHJUJNoL(1) AAS
>>973
このスレでErr値を使わない時にif letやlet elseを使う、とあったのと同じで
Err値がない場合も同じようにこうする
let [first, second, third] = vec else {
return Err(...); // or None
};

>>975
省4
978: 2023/03/02(木)22:00 ID:C1WbSTgL(1) AAS
相変わらず複オジの会話の噛み合わなさとオレオレ用語の使い方は異常だな
979: 2023/03/02(木)22:03 ID:Op0Ow0AD(1) AAS
どこにオレオレ用語があるのか教えて
980
(2): 2023/03/03(金)00:39 ID:2c4ti5P+(1) AAS
>let [first, second, third] = vec else {
> return Err(...); // or None
>};
vecを直接マッチさせることはできないからsliceにする必要がある

それはいいとしてもvecを固定長のarrayにマッチさせて各要素を異なる名前の変数に入れるかエラーにするやり方はcode smellに感じる
vecが外部入力で変更しようがないのかもしれないがそれでも素直に長さチェックしたほうが良い
981: 2023/03/03(金)00:48 ID:a3+dFKh3(1) AAS
一応次スレ立てた
Rust part20
2chスレ:tech

ワッチョイスレならこっち
プログラミング言語 Rust 4【ワッチョイ】
2chスレ:tech
982: 2023/03/03(金)01:01 ID:5jfhiVlm(1) AAS
>>980
スライスパターンとそのマッチングはRust公式リファレンスにも載っている普通の便利な用法
わざわざ長さチェックしていたらスライスパターンマッチングを知らない初心者かなと思ってしまう
さらに..パターンも併せて例えば
if let [.., ラス前, _] = s
これも公式に例として出ていて同様に長さチェックは不要
983: 2023/03/03(金)17:46 ID:s0En6Xz7(1) AAS
>>973
moveしたいんなら
let [first, second, third]: [_; 3] = vec.try_into().map_err(|_| MyError::InvalidNumberOfHoge)?;
Vecを[T; N]にtry_intoした場合
Errの型がVecなのでmap_errしないと?が使えない
984: 2023/03/03(金)18:25 ID:hYRwId4B(1) AAS
referenceでも同じ
let [first, second, third]: &[_; 3] = vec[..].try_into().map_err(|_| MyError::InvalidNumberOfHoge)?;
985: 2023/03/04(土)00:46 ID:ksgM7HUQ(1) AAS
結局?を無理に使うよりこの方が短く可読性もいいな
let [first, second, third] = vec[..] else {
return Err(MyError::InvalidNumberOfHoge);
};
986
(2): 2023/03/04(土)20:27 ID:ym5vMWPk(1) AAS
そんな使い方が許されるのは個人プロジェクトか使い捨てのコードだけだね
987
(1): 2023/03/04(土)21:28 ID:VYEasP1j(1) AAS
ログファイルの各行をsplitして特定の項目(例:日時とIPとURL)だけを拾う処理とかで使えそう
Rustでは書いたことないけど
988: 2023/03/04(土)21:42 ID:aBxEUUGf(1) AAS
>>986
Rustのリファレンス書の例>>986を許さない人こそ偏ってね?
そういう偏執者は代わりのコードどう書くんだ?
989: 2023/03/04(土)23:13 ID:Oy3wPidb(1) AAS
>>986はいつもの荒らしだから無視しろ
荒らしは文句をつけるだけで修正案を出さない(出せない)から見分けられる
990: 2023/03/06(月)11:51 ID:tj78G6sJ(1) AAS
>>987
使い捨てのコードじゃなければそういうのはcsv parserやargument parserを使って構造体に変換するからパターンマッチでは書かないよ
991: 2023/03/06(月)12:45 ID:I6GlZboG(1) AAS
それは用途によりけり
構造体にDeserializeする場合もあれば構造体を用意しない場合もある
パース用途以外でマッチングならパーサーが出て来る余地すらない
992: 2023/03/11(土)12:38 ID:1tP1A91g(1/9) AAS
誰も埋めてくれない...
993: 2023/03/11(土)12:38 ID:1tP1A91g(2/9) AAS
うーめ
994: 2023/03/11(土)12:40 ID:1tP1A91g(3/9) AAS
うめうめ
995: 2023/03/11(土)12:41 ID:1tP1A91g(4/9) AAS
うめーん
996: 2023/03/11(土)12:43 ID:1tP1A91g(5/9) AAS
梅太郎
997: 2023/03/11(土)12:44 ID:1tP1A91g(6/9) AAS
うめめめめめ
998: 2023/03/11(土)12:46 ID:1tP1A91g(7/9) AAS
うーめ
999: 2023/03/11(土)12:47 ID:1tP1A91g(8/9) AAS
めーう
1000: 2023/03/11(土)12:50 ID:1tP1A91g(9/9) AAS
彡 ⌒ ミ
(´・ω・`)
1001
(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 53日 0時間 8分 30秒
1002
(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。

───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
省7
1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.224s*