Rust part13

■ このスレッドは過去ログ倉庫に格納されています
2021/11/07(日) 10:04:59.35ID:pJhT3MIE
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

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

日本語の情報
https://rust-jp.rs/

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

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

※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/

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

前スレ
Rust part12
https://mevius.5ch.net/test/read.cgi/tech/1629813327/
2022/02/06(日) 23:09:58.47ID:Woj/yg4T
>>759
複製おじさん、嘘ついちゃダメだよ
詳しくはdoc.rust-lang.orgとdocs.rs見てねw
2022/02/06(日) 23:26:57.07ID:kRmD/jh4
複製おじさん連呼する人は、もちっと具体的に指摘してくれるとありがたいんだが。
2022/02/06(日) 23:31:49.27ID:iA9Wv++J
嘘ではない
もちろんCopy実装型の時点でヒープは使われないので解放といってもスタッフ上のみだから実質何も行われない
そのためデストラクタも容認されていない
その観点からCopy実装型は所有権がないと主張する人もいるくらいだ
2022/02/06(日) 23:59:50.68ID:fxuI+J0l
>>761
おじさんを連呼してる人はスレを荒らしているだけのクズ
説明や代案や根拠などを語れない
2022/02/07(月) 00:00:24.28ID:eBqtDcmM
>>762
何も行われないのに複製されて分岐してそれ以降は異なりうるってどういうことだよ

矛盾だらけ
2022/02/07(月) 00:09:06.68ID:sOY0eIf2
>>761,763
複製おじさん得意の自演乙www
嘘つきは分岐の始まり
2022/02/07(月) 00:19:43.65ID:+QREW3s6
> そんな超初心者入門のところでもめてるのかね
> 所有権は難しくない

【超初心者向け所有権の説明】
Copy実装型は所有権が複製されて分岐してそれ以降は異なりうる

難しくないw
2022/02/07(月) 00:23:15.30ID:A0JQeUWh
>>764
この件は有名な話でRustコンパイラのサボり。
Copy型は複製分岐されて各々がdropされるのが正しいけど、スタック変数のみだからそれをサボっている。
つまり現在のコンパイラ実装は正しくなくて、dropしちゃうとサボりのせいでメモリunsafetyを引き起こす可能性がある。
だからCopy型はDropを現状では許していないという話。
rustc --explain E0184 を見てね。
2022/02/07(月) 01:29:41.70ID:6Fl/+EdH
>>767
なんか仕様と実装を混ぜて話してるけどなんで?
普通、仕様にそって実装がされるはずだけど、(この部分に関しては)実装に仕様が引きずられてるってこと?
それとも仕様通りではないってこと?
2022/02/07(月) 08:04:57.91ID:cIffYd5J
>>725
順調に滅びの道を歩んでいるな。
2022/02/07(月) 12:36:41.09ID:E3rdzbcC
将来実現されるであろうあるべき仕様が実装の都合で実現できていないから、それと矛盾しない範囲に仕様の範囲を制限した、という理解で良い?
2022/02/07(月) 13:38:44.35ID:ZeQEvlq1
>Copy型は複製分岐されて各々がdropされるのが正しいけど、スタック変数のみだからそれをサボっている。

まーた勝手な思い込みの妄想で嘘垂れ流してる
いい加減にしろ
2022/02/07(月) 18:29:28.92ID:lRQrpp2a
>>767
それ1.0以前の話で今とは実装も前提も全く違うからエラーメッセージ修正したほうがいいやつ

もし仮にDropかつCopyな型が実装できるようになったとしても所有権は複製されないから
2022/02/07(月) 21:58:52.41ID:pvg7UzFi
>>768
「currently disallowed」「current implementation is incorrect」「disabled for now」と強調されてるように、
あくまでも現在の実装は本来とは異なり正しくなくて、問題を引き起こすために、CopyとDropの両立を現時点では禁止してる。
理論的にはCopy型は複製分岐されて各々がdropされる形が正しくてCopyとDropの共存が可能。
この暫定的な実装に引きずられた暫定的な仕様が、将来は正される可能性も残す表現となっている。
両立禁止で実害が出てないため優先順位は低いと思われるが、もし将来に共存可能になったとしても後方互換性は生じない。

>>772
最新のエラーメッセージで合っている。
https://github.com/rust-lang/rust/blob/master/compiler/rustc_error_codes/src/error_codes/E0184.md
Latest commit 9e5f7d5 on 28 Aug 2020
2022/02/07(月) 22:27:06.61ID:zI1SZbAO
>>773
>理論的にはCopy型は複製分岐されて各々がdropされる形が正しくて
複製分岐されるのが正しいという根拠は?
2022/02/07(月) 22:38:57.39ID:pvg7UzFi
>>774
Copyなので複製分岐されるのは当たり前。
今はそこが論点ではなくて、複製分岐の後に各々に解放処理が生じるけど、現在は正しく実装されていないので仕様に制限があるとコンパイラのメッセージでも出る話。
2022/02/07(月) 22:50:06.68ID:3WtW5B3R
>>774
複製分岐おじさんは日本語通じないからまともに相手しても時間の無駄だよ
2022/02/07(月) 22:52:45.27ID:MLiEvPiI
「最新のエラーメッセージ」は1.0直前に書かれたものだしもう仕様化してもいいんじゃね
https://github.com/rust-lang/rust/pull/25272
2022/02/07(月) 23:03:21.13ID:jZIVUuZq
いつも傍から見ていてパターンがわかってきた
普通は「○○○は間違っている、×××が正しい」となるんだけど
なぜか「○○○は間違っている」だけで終わって代わりとなる対案が出てこない
>>771のように「勝手な思い込みの妄想で嘘」と否定するだけだったり
>>774のように「正しいという根拠は?」とこれも同じパターン
全てに共通するのは対案を出さずに否定ばかりしている言動
2022/02/07(月) 23:11:42.66ID:gOCxugwW
>>775
今は複製分岐されるのが本当正しいと言えるのかどうかが論点です
論点をずらさずにそう考えた根拠を示して下さい
ありませんか?
2022/02/07(月) 23:15:03.65ID:Rl6UL3Q6
半ギレww
2022/02/07(月) 23:28:02.69ID:q/PrVpBp
>>777
仕様化されてるよ
エラーメッセージをアップデートすべき
https://doc.rust-lang.org/reference/special-types-and-traits.html#copy

その時代とはDrop周りの実装も大きく変わってる上に
CopyとDropが排他的である前提で書かれたコードも多々あるから
Copy+Dropな型をサポートするならエディション対応が必須
2022/02/07(月) 23:45:39.09ID:jZIVUuZq
>>779
Copyを実装している型は使われると複製され分岐すると自分も当たり前に思っているけど
異なる意見を持っているの?
否定ばかりしていて対案を出せない人はどこの世界でもダメな人扱いになっちゃうから対案を出すのがお勧め
2022/02/07(月) 23:54:38.63ID:MLiEvPiI
>>781
まじかよ反応して損した
この流れ何の意味もねえな
2022/02/08(火) 00:13:43.96ID:6pYzzNS7
Copyを実装する型の変数にはそもそも所有権が存在しないということかな。
2022/02/08(火) 00:58:18.89ID:v5+/0O15
ソケット、ファイルハンドラあたりがコピーされたらそら問題だろうからな。

>Copyを実装する型の変数にはそもそも所有権が存在しないということかな。
copyされたら所有権がないとかめちゃくちゃだな。int値だって共有されるかどうかはかなり問題だっての。
2022/02/08(火) 01:23:08.03ID:Ie+ZA5Wx
>>782 値が複製されることに異論は無いんだけど、彼は>>753などで所有権が複製されると言っていて、そこがおかしい。
2022/02/08(火) 02:46:17.65ID:TlrfCSTD
それ同一人物だぞ
複製オジは人格も複製分岐させる
2022/02/08(火) 09:41:57.74ID:SQntNedJ
たとえ話って逆に理解を妨げることも多いよね(´・ω・`)
2022/02/08(火) 10:46:53.27ID:VdD2swgy
複製おじさんにも唯一役に立つチャンスがあるよ
それはE0184の改善案を提案してRustの質向上に貢献することw
しかし複製おじさんは妄想だけで改善が見られないから害でしかない
2022/02/08(火) 17:39:21.77ID:L87aFEFb
複製おじさん大人気だな
個人的には「所有権が分岐する」のほうが衝撃的だった
791デフォルトの名無しさん
垢版 |
2022/02/08(火) 18:04:38.67ID:wY99dkVo
Rustの学習してるのですが、モジュールがどう使われるものなのかいまいち想像がつきません
他の言語でいう、スタティッククラスのような使い方になるのですか?
クレート内部にはモジュールを通じてアクセスしてもらうような、アクセサーのような感覚でいいのでしょうか?
2022/02/08(火) 18:41:34.13ID:7ZuunrUW
なんで所有権が複製分岐なんていう言葉を発明しちゃうんだろな
実際に所有権をツリー構造みたいなものでイメージしてるのかな
2022/02/08(火) 18:50:29.41ID:Pp1mAPfQ
>>791
モジュールはコードのかたまりでnamespaceを構成するもの
Javaならパッケージ、C#ならnamespace
2022/02/08(火) 20:18:25.32ID:RxI0yA8a
複製は値と所有権のペアがまるごと複製されるというイメージでわからなくもないが分岐は本当によくわからない
2022/02/08(火) 20:23:01.17ID:SvZbCMDW
>>792
何事も正しく理解できないクセがついてて
同時に、そんな自分を客観的に理解できてないから
独自用語乱発になんの違和感もないんやろな
2022/02/08(火) 20:32:05.71ID:SvZbCMDW
複おじの悪いとこは反省が無いところ
2022/02/08(火) 20:41:11.90ID:l2NSRb44
複製おじさん自演認定連呼の人も大概だけどな
技術について語るスレなんだから個性を出すな与えるな
2022/02/08(火) 22:11:02.29ID:4v8i4qWv
変数毎のメタデータに所有権管理のためのフラグか状態変数があってその値も複製されるイメージだったんでしょ
それを匂わせることを確か書いてた気がする

仮にそういう実装だったとしてもそのメタデータ自体は所有権じゃないんだけどね
複オジは反省して分岐して欲しい
2022/02/08(火) 22:15:39.64ID:F0zgFFgG
>>784
Copyを実装する型の変数にも所有権は存在するぜ
使われるたびに複製されて別々の所有権になる
例えば借用ルールなどもそれぞれ個別に適用されるようになる
2022/02/08(火) 22:17:35.77ID:HAxbJIeP
複製おじさんホントに反省しないなぁ
2022/02/08(火) 22:36:36.51ID:SvZbCMDW
複おじはまずコテハンかトリップつけてほしい
名無しに紛れ込んでスレ荒らすのやめてほしい
802デフォルトの名無しさん
垢版 |
2022/02/08(火) 22:47:22.11ID:NtAny2QZ
>>799で合ってると思う私も何か勘違いしてる?
もし違うならば正しい情報を知りたい
2022/02/08(火) 22:54:07.50ID:DXXwh4pM
>>802
複オジいい加減にして!
2022/02/08(火) 23:05:22.58ID:6pYzzNS7
>>803
指摘の中身が無いから何をどうすればいいか傍から見てさっぱりわからんのだが。
805デフォルトの名無しさん
垢版 |
2022/02/08(火) 23:17:16.63ID:NtAny2QZ
>>804
それそれ
おじとかオジとか言ってる人の書き込みを遡って見ても中身がないかコピペばかり
おじとオジをNGにすればよいのかな
2022/02/08(火) 23:24:36.35ID:d+fT+XiK
>>802
正しいよ。 >>799 で正しい。
値が複製されると同時にそれぞれが所有権を持つというのは根本的な原理そのもの。
2022/02/08(火) 23:33:11.39ID:50t+w5HT
おや
2022/02/08(火) 23:35:38.19ID:50t+w5HT
「所有権が複製される」のではなくて、「値が複製されるとき、複製された値には新しい所有権が生まれる」と表現すべき、ってこと?
809デフォルトの名無しさん
垢版 |
2022/02/08(火) 23:37:06.33ID:NtAny2QZ
>>806
ありがとう
おじオジ連投の人はNGにします
2022/02/08(火) 23:45:07.26ID:Gazi17ea
単なる揚げ足取りでしょ
本人もよくわかってないと思われ
2022/02/09(水) 00:09:26.69ID:hQLH/4Iv
はちみつ複製オジは自演するのいい加減して!!
812デフォルトの名無しさん
垢版 |
2022/02/09(水) 00:48:50.88ID:Th41z547
>>799,802,806
799は言葉足らずだと思う。

>>808 のがより合ってる。
2022/02/09(水) 01:28:22.38ID:G66vCctx
あちこちでrustおじさんが暴れてるんだけどこのスレでも暴れてんのな
2022/02/09(水) 07:46:27.70ID:MYXFjZ5a
>>808
その2つの解釈に何の違いがあるのってことだよな
2022/02/09(水) 08:16:52.91ID:RoPbijrN
論理性がない、客観性もない、実績もないのに上から目線の奴いるよね
素人相手にマウント取りたいアフィブロガーやアフィチューバーの類なんだろうけど
2022/02/09(水) 08:33:26.39ID:XHPTdDLm
>>812
「言葉足らず」だっだという事にしたいのねw
2022/02/09(水) 13:00:04.34ID:v0CQAsq5
所有権を実装の観点からだけ見た場合はCopy型に所有権は(設定されて)ないと考えるのは妥当
説明用の概念として見た場合はshared referenceを除くCopy実装型にも所有権があってコピーされた際にその値に対する新たな所有権が発生すると考える方が妥当

公式は基本的に後者
2022/02/09(水) 15:18:47.99ID:06jFMmW0
>>808
「所有権が複製される」という言い方は
単なる表現の問題として矮小化されるものではなく所有権という概念を根本的に誤って解釈してるのが大きな問題

それを吹聴するのはRust入門者の学びを妨害する行為なので叩かれてる
2022/02/09(水) 18:04:35.96ID:WRBpfbxt
>>818
所有権という概念はどう解釈すべきなの?
820デフォルトの名無しさん
垢版 |
2022/02/09(水) 18:57:48.48ID:Th41z547
>>819
辞書で調べたら?
2022/02/09(水) 19:23:18.18ID:WRBpfbxt
https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html
Ownership is a set of rules that governs how a Rust program manages memory.

rust の定義では ownership はルールのことを指している?

https://dictionary.cambridge.org/ja/dictionary/english/ownership
the fact that you own something

辞書的な定義ともまた違うようだ
2022/02/09(水) 19:30:35.55ID:WRBpfbxt
TRPLの説明では take ownership という表現も登場するし辞書的な意味で ownership が使われているのでルールのことを指すだけではないようだ
2022/02/09(水) 19:43:45.64ID:WRBpfbxt
Each value in Rust has a variable that’s called its owner.
...
The ownership of a variable follows the same pattern every time: assigning a value to another variable moves it. When a variable that includes data on the heap goes out of scope, the value will be cleaned up by drop unless ownership of the data has been moved to another variable.

このあたりの記述を読む限り、すべての値は owner となる variabke を持つ (variable が値の ownership を有する) と表現して良いように思う

対象はすべての値なので、 Copy を実装した値にも当然 owner と ownership が存在する

なので、

let a = 1;
let b = a;

という式があった場合、aは1という値のownershipを持つし、bはaの値のコピー(1という値のコピー) のownershipを持つことになる
a の持つ ownership と b の持つ ownership の関係性をどう表現すべきか、というのが議論の対象という理解で良いかな?
2022/02/09(水) 20:01:24.42ID:WRBpfbxt
aという変数が持つ1という値とそのownershipがまとめて複製されてbに渡されると思えば、owenershipの複製という言葉も不自然ではないように思う

複製といいつつ own する値や owner となる変数が異なることに違和感を持つ人がいるのもわからんでもないが、
この構造は Box<T> の clone と同じなので、
clone を複製と呼ぶのであれば、 ownership も複製されるものとして間違いではないと思う

初学者向けの説明として適当かという議論は別途必要だとは思うけども
2022/02/09(水) 20:11:57.38ID:Sh3dorK1
それは単に値のコピーですやん
値が複製されてるだけですやん
bは複製された値のオーナーになってるだけですやん
aの所有権はどこにも複製されてないですやん
2022/02/09(水) 20:45:07.16ID:y0eUGeWz
>>824
> 値とそのownershipがまとめて複製されてbに渡されると思えば
その仮定が偽。
2022/02/09(水) 20:46:37.31ID:y0eUGeWz
ていうか仮定にすらなってない。論点先取。
https://ja.wikipedia.org/wiki/%E8%AB%96%E7%82%B9%E5%85%88%E5%8F%96
2022/02/09(水) 20:47:07.42ID:bzZIRbp2
>>824
Box<T>のcloneと同じなら
どうしてownershipも複製されることになるの?
2つの繋がりがよく分からない
2022/02/09(水) 20:49:21.34ID:vm2ezt88
>>827
なるほど
こういうの論点先取と呼ぶのか
勉強になった
2022/02/09(水) 21:05:16.82ID:uQPdms8/
オーナーシップの説明にオーナーシップを使っているのか
なるほど論外だ
2022/02/09(水) 21:22:51.45ID:DXyGa46n
所有権をCopyするって書くのをやめて、値をCopyする、にしてくれればそれで済むのに、なぜ所有権の複製を正当化しようとするのか
2022/02/09(水) 21:42:23.99ID:MYXFjZ5a
べつに値をコピせずに所有権だけコピーするとか言っているわけでもなし、そんなに問題かね?
2022/02/09(水) 21:52:08.47ID:Sh3dorK1
>>832
正当性を訴えるのはやめたん?w
834デフォルトの名無しさん
垢版 |
2022/02/09(水) 21:58:09.12ID:Th41z547
>>824
だからー、値が複製されて所有権が新規にできるんだってば
2022/02/09(水) 21:58:48.91ID:p5i5ajWp
let a = 1; は値1の所有権をaが持つということ
ここでその値1の所有権を複製してしまうと、同じ値の所有権を持つ人が複数存在してしまうことになる
let b = a; で実際に起きるのは、値1のコピーとして値1'を生成し、その所有権をbに割り当てている
値1と値1'は数値としては同じに見えるとしても違う値であって
それぞれ別々に所有権がある

1'の所有権が1の所有権の複製である、という理解は
権利書をコピーして記名欄だけ書き換えるみたいな
イメージなのかもね
実際にはその記名欄が所有権の全てであって、
複製する部分というのは存在しない
2022/02/09(水) 22:01:53.64ID:pUgNKLbu
Copy実装型にも所有権はあって借用ルールに従う
そして使われる時に値と所有権は複製されて別々の値と所有権になる
そのため借用中だと複製できない
let mut a = 123;
let a1 = &mut a;
let b = a;
*a1 = 345;
println!("a={a}");
println!("b={b}");
例えばこのコードは借用中のため複製できずコンパイルエラー
2022/02/09(水) 22:02:09.07ID:p5i5ajWp
複製するという言い方は、複数の権利者が
(一時的にでも)存在し得るという理解につながるので
単に言い方の問題ではなく避けたほうがいいと思う
2022/02/09(水) 22:06:52.22ID:f/eR1VAb
どうでもいいならそれでいいんだけどね
中身の無いどうでもいい話をしましたってことで
2022/02/09(水) 22:10:36.37ID:zSJbpp9s
>>836
そういうことか!
値だけなら複製できてもよいのに
値と所有権が複製されるために借用中だと複製できないわけか
2022/02/09(水) 22:23:03.85ID:pUgNKLbu
その通り
だから「(所有権と関係なく)値が複製されて、その値に新たな所有権が生じる」よりも
「値と所有権が複製されて、別々の値と所有権になる」の方がRustを正しく理解できる
2022/02/09(水) 22:24:43.45ID:HWZXFj3+
wwww
複製オジのエクストリーム解釈で自演してもモロバレやでwww
2022/02/09(水) 22:35:06.54ID:MYXFjZ5a
>>835
現実世界から借用した用語は多いけど、意味まで完全に同じとは限らないからその議論は無意味だね。
そもそも現実世界の「複製」は「同じものを新しく作ること」だしw
2022/02/09(水) 22:35:22.01ID:oiWhDOci
OwnershipのルールとReferenceのルールが整理できてないんだね
分かった気にならずに一からやり直したほうがよさげ
2022/02/09(水) 22:47:52.82ID:RvxtckJm
>>836
めちゃくちゃな解説でびっくり!!
複製おじさんはこのレベルだったか
2022/02/09(水) 22:55:19.94ID:zSJbpp9s
>>844
僕は>>836の説明で納得した
そして実際にコンパイラエラーも確認した
君がそれを違うと言うならば
どの部分がどういう理由でどのように違うのかを皆に示さなければならないと思う
2022/02/09(水) 22:56:27.31ID:qfxIxGcm
>>836
それはmut借用中の値は使用禁止(コピーのために値を読み取るのも当然禁止)ってRustの基本ルールに違反してるってだけで
所有権の複製なんて新たな概念を持ち出す必要はないと思うが
実際エラーメッセージもそう書いてあるし
2022/02/09(水) 23:03:08.10ID:pUgNKLbu
>>846
借用中の値が使用禁止は所有権が伴っているからこそ生じるルール
だから「(所有権と関係なく)値が複製されて、その値に新たな所有権が生じる」よりも
「値と所有権が複製されて、別々の値と所有権になる」の方がRustを正しく理解できる
2022/02/09(水) 23:11:40.68ID:qfxIxGcm
複製派の人って複製元の所有権と複製先の所有権の
共通部分はなんだと考えているの?
流石に共通部分が全くなければ複製とは言わないよね?
2022/02/09(水) 23:20:26.95ID:pUgNKLbu
>>848
同じ型で複製の直後の値が同じものに対する所有権
全く異なるものに対する所有権が新たに生じるわけではない
所有権も複製されている

ちなみに現実のものに例える話はナンセンス
なぜなら現実世界では土地の所有権だけでなく土地自体も複製できないのだから
2022/02/09(水) 23:23:34.30ID:DXyGa46n
じゃあ「所有権」って言葉を使うのもやめることを提案してみたら?
2022/02/09(水) 23:30:03.48ID:kQ1Azr/o
>>849
土地は複製できないけどそれの何が問題なの?
値として見るならCloneじゃない型と同じじゃないの?
2022/02/09(水) 23:33:43.18ID:Av5orTrB
>>848
これ知りたいね

単に引っ込みがつかなくなってるのではなく
真剣に複製されると思っているのであれば
何らか共通部分があるんだろうから
2022/02/09(水) 23:36:33.39ID:qfxIxGcm
>>849
そうすると所有権という情報には、型と値が含まれてるってこと?
その場合、値の変更は所有権の変更を伴うと考えている?
また、型と値が同じものはたくさんありうるけど、それらの所有権を区別するものはなに?
2022/02/09(水) 23:36:49.81ID:zSJbpp9s
リアルな世界では土地もその所有権も複製できないけど
こちらの世界では値も所有権も複製できる
と考えるだけで矛盾なくRustを理解できると思います
そこに矛盾はありません
855デフォルトの名無しさん
垢版 |
2022/02/09(水) 23:38:50.10ID:IW3Xziq4
こまけえこたあ良いんだよ!! コンパイラ黙らせた奴の勝ち!!
2022/02/09(水) 23:41:48.23ID:MYXFjZ5a
>>852
それぞれ固有の値を持たないのであれば全部同じ「所有権」では?
857デフォルトの名無しさん
垢版 |
2022/02/09(水) 23:48:17.20ID:Th41z547
>>847
>「値と所有権が複製されて、別々の値と所有権になる」
別々のものになってて複製?
言ってて変だと思わんの?
2022/02/09(水) 23:49:17.89ID:DXyGa46n
そもそも発端は入門者向けドキュメント >>486 にて、「所有権の複製(コピー)」とかいう言葉が出てきてこれではダメだ、っていうのが発端だからね
入門者向けドキュメントなんだから、正しい言葉で、正しく伝わる表現をしてほしいのよ
2022/02/09(水) 23:50:31.60ID:MsecEarl
結局のところ元の記事にあったように
「所有権とは、文字通り変数が値を所有できる権利のことです。」と間違って捉えてるってことだろうな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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