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/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
結局のところ元の記事にあったように
「所有権とは、文字通り変数が値を所有できる権利のことです。」と間違って捉えてるってことだろうな
2022/02/09(水) 23:56:24.02ID:pUgNKLbu
>>858
それは正しいだろ
少なくともその解釈でRustの仕様と矛盾する点は何もない
2022/02/09(水) 23:57:32.97ID:wC50dlGN
>>856
ん、これどういう意味?
2022/02/09(水) 23:59:13.88ID:MYXFjZ5a
>>861
Unit型みたいな。
2022/02/10(木) 00:04:56.40ID:ERwpat+E
土地は複製できないって主張もよくわからなくて
例えばコピー機は別に原子レベルで複製しているわけでもなく
人間が見て同じに見える程度に見た目を再現してるだけなわけで
同様に土地だって同じ形状に造成できるわけじゃん

だから複製というときにはオリジナルのどこを再現したかが重要で
何が共通部分で何が差異なのかをはっきりしてほしい
2022/02/10(木) 00:06:24.62ID:TkQE8lES
>>857
複製ってのがそもそも別のものを作ることなんだが
2022/02/10(木) 00:39:11.50ID:lkU+MWHi
所有権っていう"もの"がある訳じゃないよ?
2022/02/10(木) 01:01:15.29ID:ZN2u8Rs1
リソースの所有者はリソースを解放する責務がある
主としては値が変数に束縛されることで所有の関係が作られる

このへんをいろいろひっくるめて所有権の概念になるわけで、こういった概念である「所有権」そのものを複製したり作成するというのは、やはり言葉としておかしい

束縛関係を複製とか言われても意味わからん
2022/02/10(木) 01:05:28.97ID:TkQE8lES
ここで"もの"かそうでないかを区別する意味ってある?その場合の"もの"ってなに?
2022/02/10(木) 02:44:56.84ID:rtSKPHyc
所有権とは所有にまつわるルールのことというのはTRPLに書いてある通りだと思うんだが
take ownership など、所有権という物をやりとりしているように読める文言はどう解釈すれば良いんだ?
2022/02/10(木) 03:18:42.60ID:748mZL+w
所有権の話はもう禁止してくれ、唾飛ばしながら「ワイが一番所有権分かってるぞ!」とかほんまどうでもいいわ
コンピューターサイエンス学科出でもないのに、もう駄コードを書く仕事に戻れ
2022/02/10(木) 04:10:06.01ID:ZV1iYxPB
>>868 が言ってる通り公式ドキュメントと矛盾がないように書くべきでしょ
そうすると、copyするのはvalueであって、ownershipはcopyしない
ownershipはtakeしたりtransferするもの

>>866 の最初に書かれてることは良いけど、そのあとは意味不明
2022/02/10(木) 05:39:51.83ID:LZ4lXgTU
この自演おじさん、そこらじゅうで同じ芸風で荒らし回ってるから本当にタチ悪い。
2022/02/10(木) 07:56:52.23ID:B7Nnq//K
結論:
「所有権の複製」は根拠の無いオレオレ用語であり
rust公式による定義は今回も一切示されなかった

でオシマイの話
2022/02/10(木) 08:16:17.16ID:lkU+MWHi
このおじさん普通に統失だと思う
874デフォルトの名無しさん
垢版 |
2022/02/10(木) 09:03:54.77ID:o2ECnsWv
>>870
これが正しい
2022/02/10(木) 10:20:54.50ID:E3cwpb32
>>868
take ownershipのownershipは”もの”じゃないよ
もうちょっと英語勉強したほうがいいんでは?
2022/02/10(木) 12:39:37.06ID:JVrcL5p7
>>875
理由を言わず間違ってるとだけ指摘して勉強した方が良いとマウントとってくるいつもの人だ
反論できないから空っぽの指摘しかできないのかな
2022/02/10(木) 12:43:51.26ID:tTxcUdMu
unixのファイルシステムの権限周りの継承とかその辺とごっちゃになってんのかね?
どうして所有権をコピーみたいな話が出てきたのかわりと謎
2022/02/10(木) 14:41:33.57ID:3wQKSQe5
謎だよな
C++から来てるわけでもないし
どこから来た発想なんだろう?
2022/02/10(木) 16:06:58.32ID:mDz1Cqyx
>>876
説明してもらっても聞く耳持たないから
もう理由は教えないみたいなことを言われてなかったか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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