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/01/06(木) 17:27:19.44ID:Gs63EiHG
長いから3文字にまとめて😪
2022/01/06(木) 17:28:58.84ID:fX6pq/OF
>>465
Rustスレで学級会始めるおまえも気持ち悪いよ
2022/01/06(木) 17:49:08.32ID:AA9pZn/O
>>がリンクにならない環境を知らんのだが
2022/01/06(木) 18:13:44.84ID:jbChckmf
>>465
よくわかる
いつも中身ないので即NG
だがやつは自演魔なんでマジタチ悪い
2022/01/06(木) 21:11:27.35ID:Q5dnJVm5
>>469がいつものキチガイの典型例
文句をつける意味不明な書き込みをしてその後に自演で同意のレスを付けてくる
スレを荒らすことが目的
2022/01/06(木) 22:28:23.35ID:s+xoikwS
お前らが誰と戦ってるのか
正直理解できない
2022/01/06(木) 23:39:45.17ID:ZA0J9QW6
このスレ常駐の荒らしは以下の特徴があるから無視すればよい
「気持ち悪」「ゲロ」「汚」などの言葉を好む
別案・別情報・別解釈などを具体的に出せず文句を付けるだけ
そのような無意味な書き込みになぜか賛同レス
2022/01/06(木) 23:48:00.39ID:NzY/+9uF
などと>>455氏が言っており
2022/01/07(金) 00:34:18.06ID:QTrF6/lG
2022/01/07(金) 00:34:18.20ID:cXPu1ueH
>>463
コンパイル時にチェックされるものと実行時にチェックされるものがあるよ
多くの場合は前者で済むけど、可変参照を複数箇所で共有したい場合は後者が必要になる
2022/01/07(金) 01:59:05.78ID:QJvziKfk
キモいと思うレスは黙ってNGしといてこれやるといいよ
https://dtolnay.github.io/rust-quiz/

Rustの文法はもうバッチリと思ってる人向け
重箱の隅をつつく問題なんだけどすごく勉強になる
2022/01/07(金) 03:03:06.42ID:7ncHJZDo
クソむずい
2022/01/07(金) 08:11:58.75ID:AAqP4BQM
c++の悪いとこばっか真似してどうすんの。。
2022/01/07(金) 08:58:17.17ID:3q+e3WNv
>>475
コンパイル時のチェックって結局人手で書いたコードによるチェックなんでしょ?
ということは担保は単体テストってこと?
2022/01/07(金) 09:16:18.88ID:3w3matv0
>>479
実行時じゃなくて?
2022/01/07(金) 09:25:48.12ID:9KLybwvT
そもそもだかマシン語でみりゃ
メモリに型もなんもないよw
単なるバイトだらけ
コンパイルの段階で変なコードか
けないようにしてるだけ
でもこれだとぬるぽ!が回避できないので
仕方なく仕組み入れたのがRustでしょ
482デフォルトの名無しさん
垢版 |
2022/01/07(金) 10:01:43.31ID:FjJ2oZu9
Rust書くときは常にIDEに直してもらいながら書いてるから>>476みたいなの全然解けないわw
2022/01/07(金) 10:06:26.42ID:27W+wb2V
>>476
確かにこれは勉強になる
知らなかったことばっかり
2022/01/07(金) 10:10:35.06ID:FVraLxVf
Rustのメモリ安全って、null安全のことだったの?しょぼ
2022/01/07(金) 10:57:05.72ID:9qeGIYdY
>>479
コンパイラのコードのこと?
安全性の保証に形式的証明を与えようという取り組みはあるけどコンパイラの実装が正しいかはコンパイラのテスト頼りだね
https://plv.mpi-sws.org/rustbelt/popl18/
2022/01/07(金) 11:28:53.58ID:9KLybwvT
「Rustは安全でも難しい」といわれる理由――メモリ安全を実現する「所有権」の仕組み
https://atmarkit.itmedia.co.jp/ait/spv/2111/25/news008.html
2022/01/07(金) 12:00:56.69ID:24FxYl/s
>>486
初心者向けにわかりやすく解説しようという試みは評価するが
間違いが多すぎて萎える
ここで初心者の質問に回答してる初心者と同じ
2022/01/07(金) 12:22:15.55ID:9qeGIYdY
>>487
例えばどこが間違ってるの?
2022/01/07(金) 18:09:24.83ID:KzGvgOV1
>>488
整数型や浮動小数点型といったスカラー型の変数は、変数間の代入において所有権は基本的に複製されます。これを「所有権の複製(コピー)」といいます。変数間の代入などにおいて所有権は複製されるので、値の所有者は常に1個でなければならないというルールは守られます。
2022/01/07(金) 19:34:39.40ID:9qeGIYdY
>>489
正しいこと言ってるように見えるけど
どう間違ってるの?
2022/01/07(金) 19:39:44.12ID:pFd15XiZ
所有者が無能だったら終わりです
2022/01/08(土) 00:17:04.62ID:GxMqZbIC
所有権が複製されるって表現はなんかRcを想像してしまうな
493デフォルトの名無しさん
垢版 |
2022/01/08(土) 00:19:22.76ID:tLJ6VgIA
整数型とかの単純のヤツはCopyだかCloneだかをderiveしててデフォのmove semantics機能してなかった気がするな
最近書いてねぇから忘れてんなこれ(´・ω・`)
2022/01/08(土) 06:57:19.85ID:5x1u92SJ
数値型が特別扱いされているわけではない
Copy traitを実装すればcopyされる
Copy traitを実装しなければmoveされる
2022/01/08(土) 23:30:01.75ID:lz8RPHEi
Copyで複製されるのは所有権じゃなくて値だよね
代入先の変数が複製された新しい値の所有権を持つことになるけど、所有権が複製されるんじゃあない
2022/01/09(日) 16:14:36.11ID:uxfV5OFq
copyだけでなくmoveされるのも対象は値
所有権ではない

値をmoveした結果
値に紐付く所有権がくっついてくる
2022/01/09(日) 16:51:12.42ID:TifKF/RV
値と同時に所有権 "も" copy/moveされると捉えることもできるのでは
2022/01/09(日) 18:01:55.54ID:yd7evZmg
個人的に間違った捉え方をするのは自由だが
それを初心者に広めるのはやめていただきたい
2022/01/09(日) 18:56:17.00ID:KYx55eM0
あんたらのお仲間他スレで暴れてばかりだよ、引き取りに来い
2022/01/09(日) 19:06:20.22ID:EvEIewTi
これ結構いいな
概出?
https://docs.microsoft.com/en-us/learn/paths/rust-first-steps/
2022/01/09(日) 19:18:00.80ID:n32zl2Pe
所有権が複製できちゃったら「一個の値に一個の所有者」ってルールが守れないやん(´・ω・`)
2022/01/09(日) 20:01:19.31ID:wa3WbZ82
所有権を持っていると年2回の配当金がもらえます
2022/01/09(日) 20:12:54.12ID:ASvenOj7
しょーゆー拳!
2022/01/09(日) 20:17:43.06ID:QVmVQA75
>>492
> 所有権が複製されるって表現はなんかRcを想像してしまうな

https://doc.rust-lang.org/std/rc/index.html
> The type Rc<T> provides shared ownership of a value of type T

shared ownershipという表現でうまく説明できててrustっていいなと思う
2022/01/09(日) 20:20:09.14ID:Yd6TUYc2
というかCあたりの関数の引数も
コピーじゃなかった?
中身を渡した先でもいじらせる場合とかは
ポインター渡しとかなんかやってた記憶
2022/01/09(日) 21:35:14.41ID:f6gH817b
大半の言語はデフォルトで値渡しだよ
2022/01/09(日) 21:41:43.59ID:QVmVQA75
Cでポインタ型の値を渡してるだけのことを
参照渡しと言っちゃう害悪がネットにチラホラ残ってて悲しい
ポインタ渡しとかいうすっとんきょうな用語も必要性を感じない
Javaで単に参照型変数の値を渡してるだけのことを
参照渡しと言っちゃうのも割りとあって悲しい
2022/01/09(日) 21:57:11.88ID:DflwLcIO
>>501
そう捉えるのが普通だよな
2022/01/09(日) 22:12:54.92ID:tE6q+RNQ
>>501
値が複製された場合なら問題ないんでないの?
2022/01/09(日) 22:21:03.82ID:uOSYnK8a
Rustは非常にシンプルで
Copy traitが実装されていない型は値と所有権がmoveされる
Cooy traitが実装されている型は値がcopyされてその値に新たな所有権が生じる

もちろんそれを所有権と値が複製されたとみてもよい
ちなみにRcは所有権の複製ではなく所有権の共有
2022/01/09(日) 22:28:10.17ID:ec1b4GYb
「所有権とは、文字通り変数が値を所有できる権利のことです。」
ふむふむ

「スカラー型の変数は、変数間の代入において所有権は基本的に複製されます。これを「所有権の複製(コピー)」といいます。」
ふむふむ・・・

「変数間の代入などにおいて所有権は複製されるので、値の所有者は常に1個でなければならないというルールは守られます。」
・・・は?
元の値を所有できる権利を複製したんじゃなかったの?
2022/01/09(日) 22:37:27.87ID:uOSYnK8a
>>511
所有権と値は必ずセットで複製される
当たり前だが片方だけが複製されることはありえない
必ず1対1の関係になる
ちなみにRcの場合は所有権は複製されずに所有権の共有となる
2022/01/09(日) 22:41:22.81ID:zMIZ+Krn
>>511
>変数が値を所有できる権利のこと
"所有できる権利"という捉え方が良くないね
2022/01/09(日) 23:30:44.08ID:enp/nJFU
>>489
所有権だけが複製されるわけじゃないし、たしかに不自然だな
2022/01/10(月) 00:03:57.12ID:x5u3TTyT
>>509
複製された(結果的に値は同じだけどメモリ上の位置は異なる)新たな値に対する新たな所有権を「所有権が複製される」って表現するのはおかしいべ?


>>510
そこよく勘違いされてるけど値自体はCopyトレイトと関係なく常に複製されてるよ(最適化で除かれるとかは別として)

https://doc.rust-lang.org/std/marker/trait.Copy.htmlに全部書いてあるけど
Copyな型は「プリミティブ型みたいに単純にメモリの内容を複製するだけでオッケー=copy」
非Copyな型は「ポインタとか含まれてたりして単純にメモリの内容を複製するだけだとNGな可能性があるから古い方は使えなくするよ=move」
ってだけ
2022/01/10(月) 11:29:11.88ID:0oVbzL+8
>>515
ルールを守れるか守れないかという話。
表現としておかしいかどうかは結論なんて出せないんじゃね?公式ドキュメントででも謳ってない限り。
2022/01/10(月) 20:14:15.89ID:tVKp4zEB
著者のバックグラウンド見る限りC/C++の経験があるオレならRustも分かっちゃうよ?みたいな連載だから表現が慣れてなくても気にしない
監修もRustの人っぽくなさそうだし…多分、関数型の語彙が無いんじゃないかね
2022/01/10(月) 20:29:16.07ID:DRRBVfd3
うんこ言語を好意的に連載してる記事をこき下ろす性格の悪いRusterが集まる駄スレ
2022/01/11(火) 03:16:23.27ID:DWOD4ihn
>>515
> そこよく勘違いされてるけど値自体はCopyトレイトと関係なく常に複製されてるよ(最適化で除かれるとかは別として)
>
> https://doc.rust-lang.org/std/marker/trait.Copy.htmlに全部書いてあるけど

へー、なるほど、いろいろ納得したわ
2022/01/11(火) 11:05:54.30ID:U35zy9ok
>>518
だよなぁ。
誰か筆者に指摘した?

あと、「所有権の複製(コピー)」はRustだと実際は何て言ってるの?
2022/01/11(火) 12:25:22.53ID:yQgVkZD8
「所有権の複製」でググってもほぼ誰も使って無い用語で草
2022/01/11(火) 12:27:41.85ID:zYBpR5AJ
所有権だけをすることなんてないだろうし、そんな言葉なくね
そもそも意味わからん

処理系を実装してる人にとっては考えることかもしれんが
2022/01/11(火) 12:28:11.69ID:zYBpR5AJ
所有権だけを複製すること、の間違い
2022/01/11(火) 21:25:05.09ID:On+Ztxm9
まあ無駄にややこしいだけの説明だわな。
これで間違ってない!とか意地張るような輩は俺だったら落とすわ。
2022/01/11(火) 21:31:59.06ID:xKqG3MQU
どっちに解釈しても問題ない話の一方に固執する方がお断りだな。
2022/01/11(火) 22:00:42.75ID:7fHp9GHd
所有権の複製の意味が分からん
不用意に独自用語使うのを野放しにしちゃいけない
専門用語とその定義がなぜあるのかを考えて欲しい
2022/01/11(火) 22:43:07.52ID:2061HgWk
>>519
実際に生ポインタ(アドレス)を見る形で実験したところ
「関数に値渡し(≠参照渡し)する」時は
「Copy trait実装の有無」に関係なく
「必ず値は複製されている(=別アドレスになる)」という
よく考えれば当たり前の挙動となった

つまり話をまとめると
・Copy trait実装の有無と関係なく「値は必ず複製される」
・Copy trait実装がある時は「所有権も複製される」
・Copy trait実装がない時は「所有権は移動する」
これ以外に表現しようがないことがわかった
2022/01/11(火) 23:09:26.60ID:On+Ztxm9
メモリ上の動きと言語上のルールの違いもまともに理解してなさそうな連中だな。
2022/01/11(火) 23:49:06.82ID:t1MM9BO+
mutの時に書き換えると元の値と別の値に出来るのだから新たな所有権が生じているのは事実
あとは、所有権の複製、という表現の問題
間違ってはいないが理解しにくいならば別の良い表現で置き換えればよいが何がいいだろう?
2022/01/12(水) 00:52:45.70ID:1lKX/EK6
値が複製されるのに伴って新たな所有権が生成される
2022/01/12(水) 08:45:55.15ID:zdKxvEH9
ムーブの場合は元の所有権が破棄されて新たな所有権が生成される
2022/01/12(水) 10:38:50.42ID:uD0wFQGQ
値を複製したらメモリの領域が別なのに「所有権の複製」は何を複製すると思ってんだろ
2022/01/12(水) 18:27:19.23ID:5pTy1wN9
>>532
さっぱりわからんよな

>>529
> 間違ってはいないが理解しにくいならば

何言ってんのコイツ?
2022/01/12(水) 21:24:46.00ID:zdKxvEH9
全く同じものを新しく生成するのと複製は外から見て区別しようがないんだから
535デフォルトの名無しさん
垢版 |
2022/01/12(水) 22:30:30.00ID:y9ayzVSo
所有権はコンパイル時のはなし
メモリの動きは実行時のははし
2022/01/12(水) 23:21:45.30ID:mVKgaRWA
セマンティクスの話をしろ
2022/01/12(水) 23:51:37.77ID:DMKGOQqO
現実世界の所有権が複製可能な権利だったのなら
複製されると勘違いする人がいても不思議はないが・・・
2022/01/13(木) 08:49:48.70ID:+PFReeTS
質量保存則に縛られる現実世界の複製との対比には限界があるわな。
2022/01/13(木) 10:12:58.78ID:8S0jzhzB
権利のような無形物は質量保存則には縛られない

Borrow Checkerが課すルールをわかりやすく説明するためのメタファーとして
現実世界の所有権という概念を借りてきてるのに
そのメタファーを分かりにくくするエクストリームなルールを勝手に追加して広めるのはやめよう
2022/01/13(木) 10:57:22.74ID:VN3LqOp5
https://users.rust-lang.org/t/what-is-the-formal-definition-of-ownership/41984
なんか同じようなやり取りして同じように最終的にグダグダなまま閉じてて草
2022/01/13(木) 11:03:58.63ID:4F526BmN
というかRustの実装のところ見ればいいんじゃね?
仕組みのコードはあるだろうし
2022/01/13(木) 11:11:48.72ID:0M0jmEeK
見るまでもないだろw
2022/01/13(木) 12:20:30.48ID:k/BdCeDW
https://doc.rust-lang.org/rust-by-example/scope/move.html
ここでは所有権が移動される(the ownership of the resources is transferred)とあるから
ここからの類推で所有権の複製という言葉が出てきたのかな
2022/01/13(木) 12:30:05.91ID:H8cLP4dt
Ownershipを所有権と訳したから
「所有権とは、文字通り変数が値を所有できる権利のことです」
という間違った解釈がされて
さらには「所有権の複製」なんていうトンデモ説が出現しちゃう
2022/01/13(木) 14:09:36.75ID:O06YpWsI
>>543
ownershipが所有権ならtransferは譲渡
move(移動)とは明確に使い分けられてる
2022/01/13(木) 14:28:13.33ID:LRlvXHH5
結局はどこにも原典がないオレオレ用語でワロタ
技術は研鑽していかないといけないのに
ポエムと独自解釈と拡大解釈によって逆方向に突き進むボンクラ
547デフォルトの名無しさん
垢版 |
2022/01/13(木) 15:21:48.48ID:4OU2rK55
まぁ、オープンソースですらねぇし専門家の目すら通ってない様なサイトだし
それっぽい事書いときゃいいんだよってのが大抵のweb界隈

itで何か知りたいなら手っ取り早い話公式ドキュメント当たれって事だろ(´・ω・`)
2022/01/13(木) 15:31:14.25ID:iHsQmzfW
それでわかりやすくなるんなら別にいいけど、余計わかりにくくしてるってさぁ。。
2022/01/13(木) 15:55:36.32ID:k/BdCeDW
>>545
https://doc.rust-jp.rs/rust-by-example-ja/scope/move.html
修正のpull req出しておいて
2022/01/13(木) 16:12:14.47ID:VN3LqOp5
ルー語で言うと「ownershipがtransferされることをmoveって呼ぶ」的な?
2022/01/13(木) 16:19:48.57ID:VN3LqOp5
this is known as a move.
英語のほうだと「ムーブとして知られています」か

実際コンパイラのソースみてもownershipはtransferとかtakeっていう表現でmoveだのcopyとは言ってないね
2022/01/13(木) 16:53:50.81ID:qAhzUFbZ
>>549
公式リファレンスくらいは英語で読もうよ
そんな変なサイト見てるからOwnershipの意味すら取れなくなるんだぞ
553デフォルトの名無しさん
垢版 |
2022/01/13(木) 17:08:41.31ID:2BXAobev
>>552
それは変なサイトではなくRust公式ページの日本語訳。
元のRust公式ページでも同様。

Ownership and moves
https://doc.rust-lang.org/rust-by-example/scope/move.html

Because variables are in charge of freeing their own resources,
resources can only have one owner.
This also prevents resources from being freed more than once.
Note that not all variables own resources (e.g. references)

When doing assignments (let x = y) or passing function arguments by value (foo(x)),
the ownership of the resources is transferred.
In Rust-speak, this is known as a move.
2022/01/13(木) 17:27:36.08ID:W1ZKAEcb
>>553
Google翻訳にかけてごらんw
主語も目的語も受動態の意味もわかってないような翻訳はゴミ
2022/01/14(金) 00:21:00.58ID:hAOjwXhX
DeepL で翻訳してみた

なぜなら、変数は自身のリソースを解放する役割を担っているからです。
リソースは一人のオーナーしか持つことができません。
これはまた、リソースが複数回解放されるのを防ぐためでもあります。
すべての変数がリソースを所有するわけではないことに注意してください(例:参照)。

代入(let x = y)や関数の引数を値で渡す場合(foo(x))。
リソースの所有権は移転する。
Rustの用語では、これを「移動」と呼びます。
2022/01/14(金) 00:30:32.83ID:hAOjwXhX
「所有権の複製」とか、意味の分からない事を書いている、香具師がいるのか?
2022/01/14(金) 00:36:35.57ID:kUhlpB/h
>>556
!Copyの場合は所有権がtransferされるのであれば
Copyの場合はどう表現すべきかという話
2022/01/14(金) 02:45:20.76ID:InXswW/0
>>557
元の値の所有権はそのまま、複製された新しい値の所有権が新しく発生する。
元の値の所有権について何も操作は行われておらず、表現すべきことも無い。
559556
垢版 |
2022/01/14(金) 03:32:18.88ID:hAOjwXhX
所有権が複製されるという書き方よりも、むしろ、

primitive を含むコピー型変数は、コピーされると、
所有権は移動しないので、元の変数にもアクセスできる、みたいに使う

コピーされると新たに、別のオブジェクト(実体・メモリ領域)と所有権が作られるとか
2022/01/14(金) 08:35:26.86ID:8BRe3wDd
- 所有権ごと複製するという表現がわかりやすいかわかりにくいか⇒人それぞれ
- 所有権を複製するという表現が逆になにか問題を生ずるか⇒今のところ挙げられてない
2022/01/14(金) 08:46:30.94ID:y5w5F0v6
>>556
そう
「水素の音」みたいなもん
「水素の音」って言いたい人がいるだけ
562デフォルトの名無しさん
垢版 |
2022/01/14(金) 09:28:53.08ID:n8eH8EkW
>>558
これだよな
2022/01/14(金) 09:48:26.29ID:20065uel
所有権の複製では意味が通らない事は明らかなので、
誰か >>489 の文をサクッと直してくれていいんだぞ
2022/01/14(金) 09:59:56.29ID:wd6QtXqe
流れ見てると「所有権の複製」は

おかしいから使うな派が半分
おかしいけどまあ好きにすれば派が半分
おかしくない派が約1名

みたいな感じ?
2022/01/14(金) 12:13:02.65ID:8BRe3wDd
この生産性のない議論に参加している人の割合と考えればさもありなん。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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