22/01/11 12:27:41.85 zYBpR5AJ.net
所有権だけをすることなんてないだろうし、そんな言葉なくね
そもそも意味わからん
処理系を実装してる人にとっては考えることかもしれんが
533:デフォルトの名無しさん
22/01/11 12:28:11.69 zYBpR5AJ.net
所有権だけを複製すること、の間違い
534:デフォルトの名無しさん
22/01/11 21:25:05.09 On+Ztxm9.net
まあ無駄にややこしいだけの説明だわな。
これで間違ってない!とか意地張るような輩は俺だったら落とすわ。
535:デフォルトの名無しさん
22/01/11 21:31:59.06 xKqG3MQU.net
どっちに解釈しても問題ない話の一方に固執する方がお断りだな。
536:デフォルトの名無しさん
22/01/11 22:00:42.75 7fHp9GHd.net
所有権の複製の意味が分からん
不用意に独自用語使うのを野放しにしちゃいけない
専門用語とその定義がなぜあるのかを考えて欲しい
537:デフォルトの名無しさん
22/01/11 22:43:07.52 2061HgWk.net
>>519
実際に生ポインタ(アドレス)を見る形で実験したところ
「関数に値渡し(≠参照渡し)する」時は
「Copy trait実装の有無」に関係なく
「必ず値は複製されている(=別アドレスになる)」という
よく考えれば当たり前の挙動となった
つまり話をまとめると
・Copy trait実装の有無と関係なく「値は必ず複製される」
・Copy trait実装がある時は「所有権も複製される」
・Copy trait実装がない時は「所有権は移動する」
これ以外に表現しようがないことがわかった
538:デフォルトの名無しさん
22/01/11 23:09:26.60 On+Ztxm9.net
メモリ上の動きと言語上のルールの違いもまともに理解してなさそうな連中だな。
539:デフォルトの名無しさん
22/01/11 23:49:06.82 t1MM9BO+.net
mutの時に書き換えると元の値と別の値に出来るのだから新たな所有権が生じているのは事実
あとは、所有権の複製、という表現の問題
間違ってはいないが理解しにくいならば別の良い表現で置き
540:換えればよいが何がいいだろう?
541:デフォルトの名無しさん
22/01/12 00:52:45.70 1lKX/EK6.net
値が複製されるのに伴って新たな所有権が生成される
542:デフォルトの名無しさん
22/01/12 08:45:55.15 zdKxvEH9.net
ムーブの場合は元の所有権が破棄されて新たな所有権が生成される
543:デフォルトの名無しさん
22/01/12 10:38:50.42 uD0wFQGQ.net
値を複製したらメモリの領域が別なのに「所有権の複製」は何を複製すると思ってんだろ
544:デフォルトの名無しさん
22/01/12 18:27:19.23 5pTy1wN9.net
>>532
さっぱりわからんよな
>>529
> 間違ってはいないが理解しにくいならば
何言ってんのコイツ?
545:デフォルトの名無しさん
22/01/12 21:24:46.00 zdKxvEH9.net
全く同じものを新しく生成するのと複製は外から見て区別しようがないんだから
546:デフォルトの名無しさん
22/01/12 22:30:30.00 y9ayzVSo.net
所有権はコンパイル時のはなし
メモリの動きは実行時のははし
547:デフォルトの名無しさん
22/01/12 23:21:45.30 mVKgaRWA.net
セマンティクスの話をしろ
548:デフォルトの名無しさん
22/01/12 23:51:37.77 DMKGOQqO.net
現実世界の所有権が複製可能な権利だったのなら
複製されると勘違いする人がいても不思議はないが・・・
549:デフォルトの名無しさん
22/01/13 08:49:48.70 +PFReeTS.net
質量保存則に縛られる現実世界の複製との対比には限界があるわな。
550:デフォルトの名無しさん
22/01/13 10:12:58.78 8S0jzhzB.net
権利のような無形物は質量保存則には縛られない
Borrow Checkerが課すルールをわかりやすく説明するためのメタファーとして
現実世界の所有権という概念を借りてきてるのに
そのメタファーを分かりにくくするエクストリームなルールを勝手に追加して広めるのはやめよう
551:デフォルトの名無しさん
22/01/13 10:57:22.74 VN3LqOp5.net
URLリンク(users.rust-lang.org)
なんか同じようなやり取りして同じように最終的にグダグダなまま閉じてて草
552:デフォルトの名無しさん
22/01/13 11:03:58.63 4F526BmN.net
というかRustの実装のところ見ればいいんじゃね?
仕組みのコードはあるだろうし
553:デフォルトの名無しさん
22/01/13 11:11:48.72 0M0jmEeK.net
見るまでもないだろw
554:デフォルトの名無しさん
22/01/13 12:20:30.48 k/BdCeDW.net
URLリンク(doc.rust-lang.org)
ここでは所有権が移動される(the ownership of the resources is transferred)とあるから
ここからの類推で所有権の複製という言葉が出てきたのかな
555:デフォルトの名無しさん
22/01/13 12:30:05.91 H8cLP4dt.net
Ownershipを所有権と訳したから
「所有権とは、文字通り変数が値を所有できる権利のことです」
という間違った解釈がされて
さらには「所有権の複製」なんていうトンデモ説が出現しちゃう
556:デフォルトの名無しさん
22/01/13 14:09:36.75 O06YpWsI.net
>>543
ownershipが所有権ならtransferは譲渡
move(移動)とは明確に使い分けられてる
557:デフォルトの名無しさん
22/01/13 14:28:13.33 LRlvXHH5.net
結局はどこにも原典がないオレオレ用語でワロタ
技術は研鑽していかないといけないのに
ポエムと独自解釈と拡大解釈によって逆方向に突き進むボンクラ
558:デフォルトの名無しさん
22/01/13 15:21:48.48 4OU2rK55.net
まぁ、オープンソースですらねぇし専門家の目すら通ってない様なサイトだし
それっぽい事書いときゃいいんだよってのが大抵のweb界隈
itで何か知りたいなら手っ取り早い話公式ドキュメント当たれって事だろ(´・ω・`)
559:デフォルトの名無しさん
22/01/13 15:31:14.25 iHsQmzfW.net
それでわかりやすくなるんなら別にいいけど、余計わかりにくくしてるってさぁ。。
560:デフォルトの名無しさん
22/01/13 15:55:36.32 k/BdCeDW.net
>>545
URLリンク(doc.rust-jp.rs)
修正のpull req出しておいて
561:デフォルトの名無しさん
22/01/13 16:12:14.47 VN3LqOp5.net
ルー語で言うと「ownershipがtransferされることをmoveって呼ぶ」的な?
562:デフォルトの名無しさん
22/01/13 16:19:48.57 VN3LqOp5.net
this is known as a move.
英語のほうだと「ムーブとして知られています」か
実際コンパイラのソースみてもownershipはtransferとかtakeっていう表現でmoveだのcopyとは言ってないね
563:デフォルトの名無しさん
22/01/13 16:53:50.81 qAhzUFbZ.net
>>549
公式リファレンスくらいは英語で読もうよ
そんな変なサイト見てるからOwnershipの意味すら取れなくなるんだぞ
564:デフォルトの名無しさん
22/01/13 17:08:41.31 2BXAobev.net
>>552
それは変なサイトではなくRust公式ページの日本語訳。
元のRust公式ページでも同様。
Ownership and moves
URLリンク(doc.rust-lang.org)
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.
565:デフォルトの名無しさん
22/01/13 17:27:36.08 W1ZKAEcb.net
>>553
Google翻訳にかけてごらんw
主語も目的語も受動態の意味もわかってないような翻訳はゴミ
566:デフォルトの名無しさん
22/01/14 00:21:00.58 hAOjwXhX.net
DeepL で翻訳してみた
なぜなら、変数は自身のリソースを解放する役割を担っているからです。
リソースは一人のオーナーしか持つことができません。
これはまた、リソースが複数回解放されるのを防ぐためでもあります。
すべての変数がリソースを所有するわけではないことに注意してください(例:参照)。
代入(let x = y)や関数の引数を値で渡す場合(foo(x))。
リソースの所有権は移転する。
Rustの用語では、これを「移動」と呼びます。
567:デフォルトの名無しさん
22/01/14 00:30:32.83 hAOjwXhX.net
「所有権の複製」とか、意味の分からない事を書いている、香具師がいるのか?
568:デフォルトの名無しさん
22/01/14 00:36:35.57 kUhlpB/h.net
>>556
!Copyの場合は所有権がtransferされるのであれば
Copyの場合はどう表現すべきかという話
569:デフォルトの名無しさん
22/01/14 02:45:20.76 InXswW/0.net
>>557
元の値の所有権はそのまま、複製された新しい値の所有権が新しく発生する。
元の値の所有権について何も操作は行われておらず、表現すべきことも無い。
570:556
22/01/14 03:32:18.88 hAOjwXhX.net
所有権が複製されるという書き方よりも、むしろ、
primitive を含むコピー型変数は、コピーされると、
所有権は移動しないので、元の変数にもアクセスできる、みたいに使う
コピーされると新たに、別のオブジェクト(実体・メモリ領域)と所有権が作られるとか
571:デフォルトの名無しさん
22/01/14 08:35:26.86 8BRe3wDd.net
- 所有権ごと複製するという表現がわかりやすいかわかりにくいか⇒人それぞれ
- 所有権を複製するという表現が逆になにか問題を生ずるか⇒今のところ挙げられてない
572:デフォルトの名無しさん
22/01/14 08:46:30.94 y5w5F0v6.net
>>556
そう
「水素の音」みたいなもん
「水素の音」って言いたい人がいるだけ
573:デフォルトの名無しさん
22/01/14 09:28:53.08 n8eH8EkW.net
>>558
これだよな
574:デフォルトの名無しさん
22/01/14 09:48:26.29 20065uel.net
所有権の複製では意味が通らない事は明らかなので、
誰か >>489 の文をサクッと直してくれていいんだぞ
575:デフォルトの名無しさん
22/01/14 09:59:56.29 wd6QtXqe.net
流れ見てると「所有権の複製」は
おかしいから使うな派が半分
おかしいけどまあ好きにすれば派が半分
おかしくない派が約1名
みたいな感じ?
576:デフォルトの名無しさん
22/01/14 12:13:02.65 8BRe3wDd.net
この生産性のない議論に参加している人の割合と考えればさもありなん。
577:デフォルトの名無しさん
22/01/14 12:25:28.10 kUhlpB/h.net
>>564
どうでもいい派が抜けてる
578:デフォルトの名無しさん
22/01/14 13:03:41.15 bXd4RL2X.net
>>560
全く別の所有権なんだからコピーとか言うとわかりにくいだろ。
579:デフォルトの名無しさん
22/01/14 21:39:59.21 +ggCJzG3.net
所有権というか、ポインタなのか、実体なのかって考えれば所有権もすぐに理解できると思うが
580:デフォルトの名無しさん
22/01/14 22:02:26.42 hgiR/8Zn.net
>>568
それは所有権を理解してないのでは?
581:デフォルトの名無しさん
22/01/14 22:22:42.07 8BRe3wDd.net
>>:567
1つだったものが2つになることを複製と呼ぶのはべつにわかりにくいとは思わんがなぁ
582:デフォルトの名無しさん
22/01/14 22:37:39.46 WRwvxAen.net
現実のものに例えると適する例がないけど
近い分野だとOSでのプロセスのfork()に近いかな
どちらも初期状態は同じでその後は別の道を歩んで値(メモリ)が別の値を取れるようになる
これをプロセスの複製と呼ぶから複製という単語自体はわかりやすいと思う
583:デフォルトの名無しさん
22/01/14 22:45:21.62 bXd4RL2X.net
>>570
だから「所有権」に関しては全く別物だろうがよ。。いつまでアホなこと言ってんだか。
584:デフォルトの名無しさん
22/01/14 22:49:30.67 IfPg31YF.net
ジエンさんも複製されてるねw
585:デフォルトの名無しさん
22/01/14 22:54:57.45 k9ZagSOx.net
>>570
所有権は複製はできないが分割は可能
共有名義の不動産持分みたいなやつ
Rustに当てはめるとRcにあたる
586:デフォルトの名無しさん
22/01/14 22:59:38.88 8BRe3wDd.net
>>572
>だから「所有権」に関しては全く別物だろうがよ
「全く別物」という理由は?2つになるのは変わるまい。
587:デフォルトの名無しさん
22/01/14 23:04:12.94 8BRe3wDd.net
>>574
人それぞれだと思うが俺は所有権の分割って方がわかりにくいと思うがな。
Rcと紛らわしいから「複製」は使うなというのは納得できるが。
588:デフォルトの名無しさん
22/01/14 23:08:16.48 wd6QtXqe.net
>>571
プロセスはtask_structとかがあってしかも実際に複製されてるからな
Rustの所有権はそういうふうに実際にstruct Ownership;みたいのが有るわけじゃない
上の方でも言ってるやつがいるけどborrowcheckerとかのルールや制約を所有権って概念で説明してるだけ
だからメモリ上でCopyな(=単純なmemcpyで矛盾が起きない)型が複製されりゃ新しい所有権が作られるし!Copyな(=単純なmemcpyだと矛盾が起きる可能性が有る)型なら所有権もtransferされるってだけ
そこに解釈云々だのの余地はなく複製もクソもない
589:デフォルトの名無しさん
22/01/14 23:11:40.41 Gij7VB+L.net
>>571
そこで言う複製は値の複製
forkしてもPIDは複製されないのと同じで所有権も複製されない
590:デフォルトの名無しさん
22/01/14 23:13:06.72 hAOjwXhX.net
複製という用語は、2つの実体が作られたよりも、
その2つの同値性が強調される
例えば、一卵性双生児は同一の遺伝子だから複製だけど、
二卵性双生児は複製じゃない。
単に、別々の2つの実体が発生しただけ
二卵性双生児間には同値性が無いから
ただ、文書を書いた外人は、copy を同値性という意味で使っていない
長文で説明するのが面倒くさいので、copyという短い単語で、
単に、2つの実体が作られたみたいに、気軽に使っているのだろう
だから、copyを翻訳すると複製になってしまう
591:デフォルトの名無しさん
22/01/14 23:23:12.29 b+sgeTEs.net
複製という訳の問題じゃないよね
「所有権のコピー」と言っても「copy ownership」と言っても何も変わらない
592:デフォルトの名無しさん
22/01/14 23:34:11.11 b8FVBfqE.net
PIDとか二卵性双生児とか、根拠や脈絡がない例え話が次々に出てくるのが笑える。
なんでそこまで必死なのかと。
593:デフォルトの名無しさん
22/01/14 23:56:50.14 ErNyx2qm.net
fork出してきたお前が言うなやw
594:デフォルトの名無しさん
22/01/15 00:13:28.41 5R4N3qYj.net
>>571は曲がりなりにも根拠らしきものを挙げているけど
>>578のPIDはまったくの根拠レスじゃん、
forkで複製されないものを探したらPIDが出てきたとかじゃね?
595:デフォルトの名無しさん
22/01/15 01:02:15.31 l/1QpEiq.net
>>570
値はそうかも知れんが所有権は新しくできたものだろ。
新しくできたものを複製ってのは変だろうが。
596:デフォルトの名無しさん
22/01/15 01:19:56.24 KOUnkRnZ.net
C++の例外をちゃんと扱うのは難しい、Rustのほうが簡単やろ
597:デフォルトの名無しさん
22/01/15 01:20:44.09 KOUnkRnZ.net
スレ間違えた
まあいいや
598:デフォルトの名無しさん
22/01/15 02:34:21.16 LQYSNqi+.net
>>583
そう感じちゃうのがRustの所有権を理解してない何よりの証拠なんだよなぁ
599:デフォルトの名無しさん
22/01/15 08:00:13.06 SUNY4hKu.net
>>587
根拠を挙げて主張しているかそうでないかの違い。国語の問題。
所有権を理解しているかどうかは関係ないんだがお前さんの読解力にも問題があるな。
600:デフォルトの名無しさん
22/01/15 08:48:58.88 MrK/oPRe.net
根拠があるってんなら単にrust公式から定義をひっぱってくればいいのではw
それが無いから単なる珍妙なオレオレ用語で終了なんだよこの話は
こーいう手合いをいちいち構ってると時間足りないぞ人生は短いぞ
601:デフォルトの名無しさん
22/01/15 09:24:09.35 i5tbAI8Y.net
>>588
複製おじさん必死だなww
602:デフォルトの名無しさん
22/01/15 10:37:04.68 SKIF+upB.net
もう誰か本家のissueに「CopyとMoveって何をcopy、moveしてるの?所有権のcopyっておかしい?」って突撃してこいよw
603:デフォルトの名無しさん
22/01/15 10:38:54.35 zYbpVr1V.net
スレ追い切れてないけど所有権だけcopy/moveしてるという主張してる人がいるの?
604:デフォルトの名無しさん
22/01/15 11:23:39.22 xPHqeDv2.net
>>591
聞くまでもなくおかしいだろwww
何をcopy、moveしてるのかはチュートリアル読めよ
605:デフォルトの名無しさん
22/01/15 11:24:43.51 ZhZU0a8B.net
>>592
複製おじさんちーっすw
606:デフォルトの名無しさん
22/01/15 12:21:18.07 NVDl8gUD.net
参照の説明に合わせてCopy Typeには所有権は無いという捉え方ならかろうじて理解はできる
607:デフォルトの名無しさん
22/01/15 13:06:56.98 SKIF+upB.net
>>593
おれら匿名の有象無象におかしいって指摘されても聞く耳持たねぇみたいだから本家でぶった切られてこいっていう皮肉なw
608:デフォルトの名無しさん
22/01/15 16:47:14.84 MrK/oPRe.net
Cでポインタへのポインタをダブルポインタと言い張ったり
Cで関数へポインタで値渡ししてるだけのことを参照渡しと言い張ったり
酷いと思わんかね?
思わん人も居ることのほうが問題
609:デフォルトの名無しさん
22/01/15 17:52:02.36 gzKdcX6j.net
>Cでポインタへのポインタをダブルポインタと言い張ったり
>Cで関数へポインタで値渡ししてるだけのことを参照渡しと言い張ったり
c++でポインタ渡しを参照渡し言うならそりゃ誤解は出てくるが、そんなに問題にならんわ。
てか extern C で参照渡しは普通にポインタ扱いになるしな。
rustで所有権のコピー言うのは明確に意味がおかしい。
610:デフォルトの名無しさん
22/01/15 18:25:43.70 V6fKEShR.net
もうええやろこの話題は…こんな枝葉の問題でギャーギャー騒いでたら何も身につかんで…
Rust棒を使って気に食わないやつを殴りたいだけなんか…?
611:デフォルトの名無しさん
22/01/15 18:25:58.18 T5sD8sXT.net
所有権 → リソースの解放義務
コピーしたらアカン
612:デフォルトの名無しさん
22/01/15 19:00:19.86 Pt/mdzot.net
c++23以降で契約プログラミングのサポートが入るらしいけど、rustって言語レベルで契約プログラミングサポートしてる?
613:デフォルトの名無しさん
22/01/15 19:35:04.98 Ipn+w0vn.net
1週間以上も議論が続いている原因はおそらく
copyとmoveの対象の非対称性にあると思う
Copy trait非実装の型は「所有権がmoveされる」
Copy trait実装の型は「値がcopyされる」そして「新たな所有権が生じる」
614:デフォルトの名無しさん
22/01/15 20:06:03.10 gzKdcX6j.net
そんな複雑な理屈じゃなくてただのバカが意固地になってるだけだろ。。
615:デフォルトの名無しさん
22/01/15 21:12:26.97 U8m/+TaT.net
>>602
議論が続いてる気になってるんだw
616:デフォルトの名無しさん
22/01/15 21:34:33.77 5CQZXOEN.net
>>602
moveの対象も値だぞ
the bookのownershipの解説ページに1つでもmoveの対象がownershipになってる箇所あるか?
URLリンク(doc.rust-lang.org)
@ITの記事はそこも間違ってる
617:デフォルトの名無しさん
22/01/15 21:37:55.34 5CQZXOEN.net
>>600
ホントこれ
所有権が何かわかってれば複製なんて考えは絶対出てこない
618:デフォルトの名無しさん
22/01/15 21:44:00.10 +D8ShBal.net
俺は中立派なので
「Copyトレイト実装型は値と所有権が複製される」
でも構わないし9割以上の人々にはこれで通じるだろう
あとはどこまでこだわるかだけだ
これ以上その表現は容認できないと続けるならばスレ荒らしと変わらない
619:デフォルトの名無しさん
22/01/15 21:52:50.82 MrK/oPRe.net
>>607
「所有権の複製」は根拠の無いオレオレ用語であり
rust公式による定義は一切示されなかった
でオシマイの話
議論ですらないし
どっち派という派閥の話でもない
620:デフォルトの名無しさん
22/01/15 22:04:56.72 Ipn+w0vn.net
一般的に「批判や反対だけならバカでもできる」と言われるので
ここは代替案、修正案、改善案を示してはどうだろうか?
621:デフォルトの名無しさん
22/01/15 22:09:17.84 im+Hgbd+.net
匿名掲示板のやりとりで意見を変える人なんていないしとっとと次の話題に移るに限る
622:デフォルトの名無しさん
22/01/15 22:17:16.04 xn0tLhqJ.net
複製おじさんが必死過ぎて草www
自分の間違いに気づいてもなお苦し紛れの言い訳テラワロスw
623:デフォルトの名無しさん
22/01/15 22:29:40.11 SUNY4hKu.net
>>597
参照渡しという用語は定義があるからCのポインタ値渡しに使うのは明らかに間違いなわけだが
ダブルポインタの方は正式に仕様で規定されているわけではないが俗語として通用しているな。
俗語だから前提無しに誰にでも通じるわけじゃないというところ注意が必要だが。
624:デフォルトの名無しさん
22/01/15 22:30:43.34 daomKUdj.net
複製おじさんは自演して複数人を装ういつもの人
いつも間違いを指摘されるが全く反省せず
嘘を書き続けて強弁しつつ自演擁護するのが趣味
C++じいさんと一緒にここに隔離されてる
625:デフォルトの名無しさん
22/01/15 22:33:34.89 im+Hgbd+.net
所有権も複製されるとするとrustの所有権システム破綻するの?
そういう話ではなくて用語の用法に違和感があるという議論だよね?
理解合ってる?
626:デフォルトの名無しさん
22/01/15 22:44:35.60 Ipn+w0vn.net
>>614
その通り
俺は既に書いたように
『Copy trait実装の型は「値がcopyされる」そして「新たな所有権が生じる」』だが
これを『値と所有権が複製される』と表現する人がいても特に困らないしRustの理解で破綻することもない
現実にある所有権に照らし合わせると『所有権の複製』という用法に違和感があるだろうという話
627:デフォルトの名無しさん
22/01/15 23:04:44.12 psZvEbv8.net
>>613
今日いきなり「複製おじさん」とかいう特異な単語を使う人が立て続けに現れたんですがw
628:デフォルトの名無しさん
22/01/15 23:42:27.61 IhXEZL2k.net
>>614
複製されたら破綻するよ
当たり前じゃん
所有権を何だと思ってんの?
わかってないの複製おじさんだけだよ
629:デフォルトの名無しさん
22/01/16 10:16:15.91 FbMoDLfJ.net
>>614
>所有権も複製されるとすると
所有権は複製されない。
630:デフォルトの名無しさん
22/01/16 10:41:29.77 78YeqR3t.net
一週間バカにされ続けても自ら学ぼうとしないメンタルすごいよな
記事書いたやつも複製おじさんも所有権を変数単位のフラグみたいに認識してるんだよ
Copyなら変数の値をコピーして所有権フラグの値もコピーするイメージ(何か問題でも?w)
現実の所有権のように各所有権が個別リソースに紐づくと考えてないから「所有権を複製」しても問題ないと思っちゃう
所有権のメタファー台無し
631:デフォルトの名無しさん
22/01/16 10:49:19.61 78YeqR3t.net
>>617
>所有権を何だと思ってんの?
この質問に答えられるようなら1週間前に終わってる話
自信がなくバカにされるのが怖くて答えられない
だから自演して印象操作に走ってしまう
それで余計にバカにされちゃう悪循環
632:デフォルトの名無しさん
22/01/16 10:53:40.34 zLzfdhk5.net
Rustスレは
仲介イテレータおじさん
所有権の複製おじさん
算数100点おじさん
の提供でお送りします
633:デフォルトの名無しさん
22/01/16 10:57:58.12 Ew12sdpw.net
みんなサビサビや!
634:デフォルトの名無しさん
22/01/16 12:33:17.26 hGTA6e5C.net
仲介おじさんと複製おじさんは同一人物でしょ
635:デフォルトの名無しさん
22/01/16 14:09:05.15 KLhMVNjz.net
しょーゆー拳!の複製とは・・・所有してない事では・・・?それとも共有?創造イテレーターおじさん。。。
636:デフォルトの名無しさん
22/01/17 22:59:06.94 Y2e2eRad.net
Rust 1.58で使えるようになったね
let var = 123.45;
assert_eq!(" 123.450", format!("{var: >10.3}"));
let vec = (5..=9).collect::<Vec<i32>>();
assert_eq!("[5, 6, 7, 8, 9]", format!("{vec:?}"));
637:デフォルトの名無しさん
22/01/19 19:54:17.44 E5BGSNnr.net
rust学習してるんだけど
コンパイル時検査で並列処理の安全性(可変参照が1つである事)を証明できるんだろうか?
実行時に借用チェックが行われてるという説明があったけどそれは必要なの?
638:デフォルトの名無しさん
22/01/19 19:59:57.13 E5BGSNnr.net
勘違いかも
この記事実行時にチェックしてるという意味じゃないかもしれない
639:デフォルトの名無しさん
22/01/19 21:18:54.23 gQYkvdGO.net
>>626
複数スレッドから参照される変数はコンパイル時に保証できないから実行時に保証されるよ
Mutexとか
640:デフォルトの名無しさん
22/01/19 21:23:52.62 tIKoVln/.net
Rc<RefCell<T>>のように所有権が共有されてる値を変更する場合なんかは実行時チェックしかできない
interior mutability patternと呼ばれるやつはみんなそう
641:デフォルトの名無しさん
22/01/19 21:24:20.06 tIKoVln/.net
ガブリンチョ
642:デフォルトの名無しさん
22/01/20 10:26:42.45 O3OMKZ6x.net
実行時に動的に借用のチェックをさせたいという動機は分かるんだが
RefCellっていう名前でそれが表現できてると思えないし
一方で内部可変性を表現してるとも思えないし
そもそも内部可変性と実行時借用規則強制と二つのことが一つの名前になってるし
じゃあどうすべきだったということも思いつかないけど
なんかモヤモヤしてる
643:デフォルトの名無しさん
22/01/20 12:30:05.06 Rdmkjysn.net
Cell<T> は Mutable<T>
RefCell<T> は DynamicMutable<T>
Cellが何かを一度イメージできるようになると
今のネーミングでも困らないから名前が変わることはないと思う
interior mutabilityという名前も最初は分かりにくかった
こっちはまだ変わる可能性あると思う
644:デフォルトの名無しさん
22/01/20 12:40:28.40 z2ZQEaJV.net
URLリンク(internals.rust-lang.org)
議論はあったが決定的な代替案があったわけでもないみたいね
645:デフォルトの名無しさん
22/01/20 12:41:15.85 lj0NmUaq.net
あー、なるほど、名前が分かりづらいのはおれが日本人のせいなのかな、とか
646:思ってたけど、やっぱり慣れてないと分かりづらいネーミングだったか
647:デフォルトの名無しさん
22/01/20 13:06:17.45 wvPJOB1p.net
そもそもBoxってなんやねん!😡
648:デフォルトの名無しさん
22/01/20 13:18:31.58 hnvUf8sg.net
>>631
中身を書き換えられる『セル』という分かりやすい名前
Cellは内部可変がOK
RefCellは内部可変参照がOK
違いが分かりやすいように3種類を持つ構造体を用意
struct S {
a: [i32; 3],
c: Cell<[i32; 3]>,
r: RefCell<[i32; 3]>,
}
let s = S {
a: [1, 2, 3],
c: Cell::new([1, 2, 3]),
r: RefCell::new([1, 2, 3]),
};
// s.a = [4, 5, 6]; // コンパイルエラー (sがmutじゃないため)
// s.a[1] = 5; // コンパイルエラー (sがmutじゃないため)
s.c.set([4, 5, 6]); // OK 内部可変
{
let mut p = s.r.borrow_mut(); // OK 内部可変参照
p[1] = 5;
// このブロックを抜けるとborrow自動返却
}
assert_eq!([1, 2, 3], s.a);
assert_eq!([4, 5, 6], s.c.get());
assert_eq!([1, 5, 3], *s.r.borrow());
649:デフォルトの名無しさん
22/01/20 13:20:34.04 O3OMKZ6x.net
メソッド名が動的←→静的と対称的であったりもしないし・・・
Cell: get, get_mut, set
RefCell: get_mut, borrow, borrow_mut
ただしget_mutはそれぞれ
URLリンク(doc.rust-lang.org)
> this method expects self to be mutable, which is generally not the case when using a Cell.
URLリンク(doc.rust-lang.org)
> this method expects self to be mutable, which is generally not the case when using a RefCell.
とあり通常の用途とやらで考えると
Cell: get, set
RefCell: borrow, borrow_mut
共に"Cell"で内部可変性を表現しつつ
用途はメソッド名で十分わかるしまぁもういいのかこれで
650:デフォルトの名無しさん
22/01/20 13:27:05.24 O3OMKZ6x.net
>>632
>>636
Cellっていう短い名前にクッキリした役割を描いたのはRust陣営は成功かもね
Rust以前に前例があるかどうかは知らんけど
>>634
名前の説得力が不足してる疑いはあるよね
>>635
それなw
651:デフォルトの名無しさん
22/01/20 13:39:18.98 hnvUf8sg.net
>>637
Cell⇔RefCell は 静的⇔動的 の関係ではない
Cell⇔RefCell は 直接⇔参照 の関係
そのため余分にRefが付く
静的⇔動的 の関係にあるのは
「&」⇔「RefCell::borrow()」)
「&mut」⇔「RefCell::borrow_mut()」
652:デフォルトの名無しさん
22/01/20 13:52:05.11 O3OMKZ6x.net
>>639
少なくとも構造体の説明としては
URLリンク(doc.rust-lang.org)
> A mutable memory location.
URLリンク(doc.rust-lang.org)
> A mutable memory location with dynamically checked borrow rules
↑のように書いてあるね
だから
SCell // A mutable memory location with statically checked borrow rules
DCell // A mutable memory location with dynamically checked borrow rules
こんなんでもよかったんじゃないかなぁと思ったがこれはこれで石投げられそう
653:デフォルトの名無しさん
22/01/20 14:13:35.66 hnvUf8sg.net
>>640
それは違う
間違った解釈で無関係な場所に「with statically checked borrow rules」を付けてはいけない
参照借用規則『multi readers xor single writer』に対して
以下が「静的チェック⇔動的チェック」の関係にある
静的チェック: multi「 &」xor single「&mut」
動的チェック: multi「RefCell::borrow()」xor single「RefCell::borrow_mut()」
一方でCellとRefCellの関係は
内部可変性が「直接書き換えOK」⇔「参照書き換えOK」の関係
だからCellに対してRef(参照)が付くRefCellという名前になっている
そして参照となるRefCellに対してのみ上述の参照借用規則が適用される
654:デフォルトの名無しさん
22/01/20 14:23:25.93 O3OMKZ6x.net
>>641
なるほどね
URLリンク(doc.rust-lang.org)
> If you require interior mutability by reference,
> consider using RefCell which provides run-time checked mutable borrows through its borrow_mut method.
↑ここでもまずは「参照による
655:内部可変性が必要な場合は」と先に来てるね 「実行時に動的に借用のチェックをさせたいという」のが動機だと俺勝手に思いこんでたけど それは一番じゃないみたい
656:デフォルトの名無しさん
22/01/20 14:32:46.88 XZNQ8H/m.net
>>635
Cell/RefCellと違ってBoxは分かりやすくていい名前だと思うぞ
Boxing/Unboxingは他の言語でも普通に使われてるよね?
旧名のOwned<T>や代替案のHeap<T>に比べると確実にいい
657:デフォルトの名無しさん
22/01/20 14:45:20.72 nm3lJD8v.net
Boxing/UnboxingはC#やJavaにもあるからBoxには全く違和感なかったけど
よく考えるとソースコード上にBoxという文字列が出現するのはRustだけかも?
658:デフォルトの名無しさん
22/01/20 14:54:02.35 3oKX7/s6.net
Scheme でも次の規格に Box が入ることになっている。
(既に導入している処理系も結構ある。)
659:デフォルトの名無しさん
22/01/20 15:32:21.48 hnvUf8sg.net
通常の型TやBox<T>などがSend+Syncである一方
Cell<T>とRefCell<T>は!Send+!Syncであることと引き換えに内部可変性を得ている
つまりmutではない参照の内部にあったとしても
「Cell<T>」は「mut T」のように成れて直接書き換え可能
「RefCell<T>」は「&mut T」を得られて参照書き換え可能
ここでCellとRefCellの違いは「&」すなわち「Ref」だからこの命名自体は分かりやすいと思う
660:デフォルトの名無しさん
22/01/20 16:52:16.46 O3OMKZ6x.net
>>644
むしろJava等にあるからこそ戸惑ったわ
既にあるBoxing/Unboxingへの理解に対して
Rustでは突如構造体としてBoxだもん
661:デフォルトの名無しさん
22/01/20 23:14:12.74 c3YxPrqk.net
まあBox と名前を合わせてBoxCellとか逆にBoxをRefにするかした方が統一的な名前づけだったとは思う。
662:デフォルトの名無しさん
22/01/21 07:08:34.56 zwVIa7Oi.net
>>648
Box<T>はヒープ上にTの場所を確保してそこを指し示します
Cell<T>はヒープ上かどうかは無関係で例えば>>636の使用例では全てスタック上
したがって「Boxと名前を合わせてBoxCellとか」はおかしいです
TとCell<T>はメモリ上の格納場所も実体も同じです
つまりCellとは内部可変性という特性を与え示していると考えたほうがわかりやすいでしょう
RefCell<T>も同様ですがこちらは参照借用規則の実行時チェックのためのborrowフラグが余分に確保されます
もうひとつの「BoxをRefにするかした方が統一的な名前づけだったとは思う」もおかしいです
refは参照(reference)の略としてあちこちで使われておりヒープ上かどうかは無関係ですが
Box<T>はあくまでもTがヒープ上にあることが主眼です
余談ですがこの関係でRefといえばstd::cell::Refという構造体があり
これはRefCell::borrow()が返す型として直接意識することはなく使われています
ちなみにRefCell::borrow_mut()が返す型はstd::cell::RefMutです
663:デフォルトの名無しさん
22/01/21 10:40:22.86 a7B69/kD.net
何も分かってねーなこいつ。
なぜBoxにするか、なぜRefCellにするかってのは要するに構造体のサイズを決定できない場合を想定してるわけよ。
スタックにそういういう動的にサイズが異なる実体をおくことも最近のコンパイラではないこともないが、通常はヒープに置くわ。
文字通りしか考えないで実際の使い方なんか一切考えないやつってのが丸わかりになるって意味では
分かってなさそうなやつにこの辺りについて問いただすってのは割と良いかも。
664:デフォルトの名無しさん
22/01/21 11:50:08.61 ePel1TKs.net
皆の言ってることがよくわからん
そもそもBoxとRefCellって対比させるようなものか?
665:デフォルトの名無しさん
22/01/21 12:13:07.97 a7B69/kD.net
T -- Box<T>
Cell<T> -- RefCell<T>
って普通に考えれば対比させると思うけど。
666:デフォルトの名無しさん
22/01/21 13:03:50.49 ePel1TKs.net
RefCell<T>はTへのrefが作れるCell (実行時にborrow checkする)
TとBox<T>はborrowに関しては同じ振る舞いでデータの場所がヒープか否かの違い
全然関係性違うと思うんだけど
667:デフォルトの名無しさん
22/01/21 16:26:46.26 HthXViD+.net
>>653と>>649は合っている
>>650は間違っている
BoxとRefCellには共通点も類似性も関係性も何もない
668:デフォルトの名無しさん
22/01/21 16:43:50.31 9uS/kBRP.net
「所有権の複製」がおかしいってことは納得言ってくれたん?w
669:デフォルトの名無しさん
22/01/21 23:30:48.05 HnzI5Wog.net
表現の問題だけど別にいいんじゃね?
670:デフォルトの名無しさん
22/01/22 00:49:37.07 FWRR5JB/.net
ダメです
明らかにおかしい
ポインタ渡しと参照渡しを間違えてるくらいにはおかしい
671:デフォルトの名無しさん
22/01/22 01:05:08.77 7E1QrPk4.net
それは解釈のレイヤの問題。
JIS の情報処理用語の定義では参照呼び (参照渡しという言葉は定義がないが実質的に同じだろう) はオブジェクトの場所を渡すことと定義されていて、
ポインタという形で場所を渡すのも参照呼びの一種ということになる。
言語仕様の話をしているところで異なるレイヤが混ざるのはおかしくはあるが、
実例を示そうとしたり、逆に抽象的に説明しようとしたりすると境界が曖昧になることはある。
672:デフォルトの名無しさん
22/01/22 19:22:08.25 1QIe2ldW.net
じゃああなたはポインタ渡しと参照渡しを間違えてもいいよ
673:デフォルトの名無しさん
22/01/22 19:59:43.90 n0owABsu.net
>>658
ポインタ渡しと参照渡しが同じなら、nullptrを渡すのと同じことを参照渡しでどうやるか教えてくれ。
674:デフォルトの名無しさん
22/01/22 20:05:58.29 DSkywrpw.net
>>657
参照渡しじゃなくてダブルポインタの方だろ。
675:デフォルトの名無しさん
22/01/22 20:32:06.98 9yXjOkuN.net
ポインタ渡しっていう用語も使わないでほしい
ポインタ型の時に特別なもんでもなんでもなく
他の場合と同じcall by valueなのだから
676:デフォルトの名無しさん
22/01/22 20:53:17.10 vfyV6CZn.net
rustにおいて参照渡しと言ったらどういう意味になるんだろうか
677:デフォルトの名無しさん
22/01/22 22:32:38.62 g0imoAcW.net
>>657
そんなレベルじゃないだろw
「値の参照外し」くらいのありえねーやつだぞ
678:デフォルトの名無しさん
22/01/22 23:03:41.04 bh/4ELt7.net
>>663
&Tを渡すこと
679:デフォルトの名無しさん
22/01/22 23:09:33.04 j/zdYx9z.net
>>654
>BoxとRefCellには共通点も類似性も関係性も何もない
そうそう、何の共通点も類似性も関係性もないのに
The BookではBoxとRefCellを対比させてどういうケースにどっちを使うかわざわざ解説してるんだよなぁ
何の共通点も類似性も関係性も無いにも関わらずw
680:デフォルトの名無しさん
22/01/22 23:45:04.56 YZScTEQ/.net
>>666
マジでその二つは関連も類似も何もない
大きく分類してもBoxはスマートポインタの一種だが
RefCellはスマートポインタではなく内部可変性という性質の指定のみ
681:デフォルトの名無しさん
22/01/23 00:16:51.00 GGOFm3A0.net
>>666
URLリンク(doc.rust-lang.org)
URLリンク(doc.rust-jp.rs)
ここのこと?
682:デフォルトの名無しさん
22/01/23 01:50:05.66 N2HN4NXS.net
clippy様がvoldemort typeを説明せよと仰せなのだが
もしかして、名前を言ってはいけないあの人のことをご存じない?
>>668
そこはinterior mutabilityの前提としてborrowing rulesを
おさらいするためにBoxを出してるだけだから違うだろ。
多義的なオレオレ用語が多くて質は悪いけど
the bookに意味もなくBoxとRefCellを登場させてる章なんてなかったと思う。
683:デフォルトの名無しさん
22/01/23 09:58:49.85 I/0ReqFd.net
なんでわざわざ自演するのかね?
684:デフォルトの名無しさん
22/01/23 10:23:00.27 pcY9kzKW.net
それが仲介おじの悪癖なんよ
685:デフォルトの名無しさん
22/01/23 14:04:42.46 Tw7cio1+.net
病気だな
病名は知らんけど
686:デフォルトの名無しさん
22/01/23 15:19:04.05 Qjn377p7.net
rust勉強しはじめたばかり、C,C++はだいぶ昔少し経験がある程度
Cとかじゃ、constなpointerは、変数自体がconstと、指ししめす対象自体がconstである場合があり
const T * const p;
みたいな宣言があったが
Rustはデフォルトでイミュータブルなのはわかるけど、mutを付けると、変数自体も指し示す対象もmutableになってしまう?
let mut v = vec![1, 2, 3];
v.push(2);
v = vec![4,5,6];
どっちか一方を禁止する方法とかあるのですか?
687:デフォルトの名無しさん
22/01/23 17:38:28.44 v0FQj8Ao.net
C上がりのヤツって意味のないところにconst付けがち
関数の引数にconst DWORD vとか
688:デフォルトの名無しさん
22/01/23 19:54:52.69 GGOFm3A0.net
>>673
どういうことをしたいのかによるけど
let x = Vec![...];
let mut y = &x;
みたいにすればyは再代入可能だけどxやvecの中身は変更不可になる
689:デフォルトの名無しさん
22/01/23 20:02:24.55 N2HN4NXS.net
末尾oとかWとかで荒らしてるやつ回線なんだ?亡霊か?
690:デフォルトの名無しさん
22/01/23 20:58:37.79 sgP3cX+L.net
えっ、一人二役まだ続けるのか
691:デフォルトの名無しさん
22/01/23 22:45:59.41 N2HN4NXS.net
お前Lはないだろ
692:デフォルトの名無しさん
22/01/23 23:46:00.51 QpDxG2zZ.net
ちなみにRustでのconstとはコンパイル時点で定数(どんな複雑な型でもよい)であること
プログラミング言語によってはconstなのに実行時に決まる値(がその後変化しないこと、つまり単なるimmutable)を意味しているので意味の差に注意
693:デフォルトの名無しさん
22/01/23 23:59:31.12 2V1gRdrY.net
>>674
Rustでは関数の引数にconstはないな
ジェネリクスとしてのパラメータにはconstがありこちらは便利
694:デフォルトの名無しさん
22/01/24 00:27:06.65 bSZB9aci.net
>>675
ありがとうございます。
やりたいことは、だいたい同じですけど、少し違って
v.push(2)か再代入のv= vec![4,5,6];のどちらかを禁じたいでしたけど
あなたの投稿みて考えて
let v = &mut vec![1, 2, 3];
v.push(2);
//v = vec![4, 5, 6]; エラーになる
で一応できました。
でも再代入可能で、中身変更不可にvをする方法は思い浮かびませんでした。
675のようにして、vからyに代入したらyはそうなりますが。
695:デフォルトの名無しさん
22/01/26 20:11:49.47 IHm+4QQV.net
すまんが、Replit使って学習してるんだけどさ
たまたま海外勢の動画見たら、同じReplitのはずなのに波線の指摘とかコード補完とか効いててびっくりしたわ
URLリンク(www.youtube.com)
うちではこんなのならないんだけど・・・・やり方わかる人いたら教えてくれんかな?
696:デフォルトの名無しさん
22/01/26 22:40:12.84 e2k0MxNT.net
Repl.itは、リンターやデバッガーからサードパーティのパッケージ、ホスティング、デプロイまで、
すべてを備えた、ブラウザー内の完全な共同クラウド開発環境です
697:デフォルトの名無しさん
22/01/27 14:52:35.89 kmz9k/kc.net
プログラミングRustの第2版の訳書出たんだな
698:デフォルトの名無しさん
22/01/27 17:03:59.04 O/Xb3RdK.net
t
699:デフォルトの名無しさん
22/01/30 18:39:19.14 Np8aVX2s.net
Rustはゼロ除算はコンパイルエラーになるの?
700:デフォルトの名無しさん
22/01/30 18:46:47.93 iWlFH2We.net
const文脈ならコンパイルエラーになったはず
701:デフォルトの名無しさん
22/01/30 19:13:28.33 9ei8l7Ku.net
コンパイル時に判明しないゼロ除算やオーバーフロー除算 ex. -128_i8 / -1_i8 はpanicとなるので
それが困る場合はchecked_div()を使えばOption型が返りNoneとなる
702:デフォルトの名無しさん
22/01/30 20:48:51.55 iWlFH2We.net
>>688
ほんとだ、定数式じゃなくてもエラーになるんだね
URLリンク(play.rust-lang.org)
即値じゃなくてもエラーにしてくれてある程度賢そう
URLリンク(play.rust-lang.org)
703:デフォルトの名無しさん
22/01/30 21:12:48.50 2J0C/Vn/.net
const fn divide(x:i32, y:i32) ->i32 {
x / y
}
let x = divide(1, 0); //panic
const y: i32 = divide(1, 0); //compile error
704:デフォルトの名無しさん
22/01/31 00:45:03.08 wgfsi16C.net
>>690
定数式の文脈でゼロ除算起きるとコンパイルエラーになるのはある意味当然だと思うんだけど
そうじゃないところでエラーになるのが意外だった
デバッグビルドでもMIRの最適化とかで定数畳み込みみたいなことやってるのかな
705:デフォルトの名無しさん
22/01/31 07:35:21.99 qlFEomu1.net
>>691
Rustではconst fnな関数を使ってconstな定数を作ることができる
つまりコンパイラがその定数を算出するためコンパイル時点で判明する
706:デフォルトの名無しさん
22/01/31 10:25:13.89 y6tOo2ii.net
とあるデータフォーマットを扱うライブラリを作っています。
一定形式のレコードが連続で書き込まれて最後には終端レコードが書き込まれるという単純な形式です。
Rust 上でもレコードを追加するのと終端処理のふたつのメソッドがあるだけです。
要は ↓ のように使えるライブラリだということです。
let mut file = File::create("file.hoge").unwrap();
Hoge::new(&mut file).add_entry("string1")?.add_entry("string2")?.finish();
このとき
・ 終端処理は必ずしたい
・ 終端処理はエラーの可能性もあり、それは捕捉したい (ので drop でさせられない)
という制約を静的に表現できるでしょうか?
現状では終端処理のメソッドが実行されたときにフラグを立てておいて
drop 内でそのフラグを検査するという形にしています。
可能ならコンパイル時に発見できるようにしたいです。
707:デフォルトの名無しさん
22/01/31 11:02:40.38 qlFEomu1.net
エラーを捕捉したいことをデストラクタに任せない
つまりそのような終端処理はdropされる前に終える
例えばBufWriter利用時も終える時は明示的にflushを呼ぶ
そしてflushはResultを返しエラーが判明する
708:デフォルトの名無しさん
22/01/31 11:32:28.54 LhFaS6j7.net
finishの呼び忘れを静的に捕捉したいということだからflushの例では不十分かな
add_entryの戻り値型の暗黙のdropを防げばいいけど、そういった機能はまだない(RFCにはあるけど進んではない)
URLリンク(users.rust-lang.org)
このスレッドではdropの実装に存在しないC FFI呼び出しを書いておいて、リンクエラーとして捕捉する方法が提案されているね
709:デフォルトの名無しさん
22/01/31 11:35:46.57 y6tOo2ii.net
>>694
それを制約として表現できるか (終端処理をしていないときにエラーになるように制約を書けるか) という質問をしてる。
つまり出来ないってこと?
710:デフォルトの名無しさん
22/01/31 11:53:47.47 y6tOo2ii.net
>>695
それは残念。
言語の機能として用意されてないまわりくどい方法を使うと
エラーメッセージがよくわからん (本来の問題とは違う内容が出てくる) ことになりがちだし、
使うときに unsafe や forget をいちいち書いてもらわなきゃならないのは
ライブラリとして提供するときにはちょっと汚すぎるなぁ。
711:デフォルトの名無しさん
22/01/31 12:37:43.75 pXNCEmdM.net
PhantomType的な?
712:デフォルトの名無しさん
22/01/31 12:39:21.72 pXNCEmdM.net
エラーメッセージがよくわからん事になりがちだからNGか
713:デフォルトの名無しさん
22/01/31 12:47:03.61 qlFEomu1.net
>>696
なるほど
コンパイラは解析してdropさせるべき位置を把握しているから
そこへ至る全ての経路上で例えばFinalize trait実装型はそのメソッドfinalize()を呼んでいないとコンパイルエラーとなる
というような制約をするFinalize trait
が存在していれば要望を満たす?
714:デフォルトの名無しさん
22/01/31 13:15:16.14 wgfsi16C.net
>>692
非const fnについての話なんだけど
715:デフォルトの名無しさん
22/02/01 18:21:42.44 EUosKgIx.net
amazon primeの記事経由でegui見てみたが結構いいな
ネイティブで試してみたが充分実用レベル
716:デフォルトの名無しさん
22/02/01 21:04:57.74 YxH4csZd.net
GCは標準からは消えたけどライブラリでやればいいってかつてこのスレで言われたことがあるのだが、GCライブラリのデファクトスタンダードってどれだ
717:デフォルトの名無しさん
22/02/01 21:52:48.48 noSg7Gj9.net
>>703
デファクトなんてあるわけないじゃん
マークスイープGCするならRust使う意味ないんだから
718:デフォルトの名無しさん
22/02/01 22:04:01.37 YxH4csZd.net
>>704
いや一部だけGC欲しい時は普通にあるからそれは言い過ぎ
719:デフォルトの名無しさん
22/02/01 22:51:54.30 l+/c7OlD.net
クッソ身につまされる記事があったので共有する
URLリンク(dystroy.org)
720:デフォルトの名無しさん
22/02/01 23:11:34.83 rVnoodM/.net
>>706
これはいい記事だな
次からテンプレ入り希望
721:デフォルトの名無しさん
22/02/01 23:23:08.93 rLXhSAw+.net
>>702
eguiは毎回60fpsで全画面を描き直すことで差分描き直しを避けて簡単にしてるようだけど
省力化したい方針と合わないや
ゲーム向き?
>>705
GC使ってもRustのRAIIを無くせるわけじゃないから
そういう時はVecに入れて使って
あとは任意のタイミングで未使用の要素の区画を再利用という感じにしてる
>>706
Rustは各種bookを読んであとはstd docとreference見ながら
コンパイルエラーの通り直すだけで何とかなるから書かれている通りだね
付け加えると基本要素については覚えていないメソッドのために回り道しがちなので
Option Result slice str Iteratorあたりの全メソッドは一通り認識しておくといいかな
722:デフォルトの名無しさん
22/02/02 10:20:38.88 OC/eznuR.net
複製おじは自分では何とかなってると思ってるのか
723:デフォルトの名無しさん
22/02/02 11:48:12.13 yXsdGz3O.net
🐜蟻型蜂🐝はポジティブシンギング🤯だから
724:デフォルトの名無しさん
22/02/02 18:24:25.46 LUGaOk8s.net
>>706
>Mistake 3 : Start by implementing a graph based algorithm
その通りだとは思うけどRustと相性の良いアルゴリズム集的なのは欲しいとも思う
725:デフォルトの名無しさん
22/02/02 19:18:50.51 aYiI+nmg.net
>>711
汎用データ構造の大部分を使うな、という話になりそうだからなぁ。
スタックとキューくらいは楽に使えるのかね。
726:デフォルトの名無しさん
22/02/02 20:06:31.96 9W9+AwqU.net
dynや lifetime heavyは失敗しながら学ぶのでいいと思う
普通の人はしばらくやってれば気づくから
727:デフォルトの名無しさん
22/02/02 20:34:19.12 ljjcfSf9.net
deny(rust_2018_idioms)はガチのマジでオススメです
728:デフォルトの名無しさん
22/02/02 22:05:12.51 cdYzXGt/.net
データ構造が大事なんだって言われながら育ってきた身としちゃあ辛い話じゃねえか
自分で作らなけりゃいいんだな!ってslab_tree使って
「ある条件に合致した子ノードから、ルートまでの値をリストで取り出す」
みたいな処理を書こうとしたら怒られるんだよな。
node_ref.parent() : &Self<T> -> Option<NodeRef<T>
っていう型なもんだから、次々に親をたどるために
while Some(parent) = node.parent() { node = parent; ...}
みたいな処理書くと、当然怒られる。
何とか抜け道無いかって探したら、node自身じゃなくてそのIDを使えばよかったんだけど、
いつも抜け道があるとは思えない。辛い。
729:デフォルトの名無しさん
22/02/02 22:39:17.87 O+j3A95O.net
Rustで普通にやってるとスレッドセーフを強いられるから制約がキツくなるんだよね
730:デフォルトの名無しさん
22/02/02 22:41:53.47 J71gX0gE.net
大昔からの単純なポインタ相互参照だと
ダングリングポインタ・多重解放・解放忘れなどが全く存在しないことを検証すべき範囲が一般的には広くなりすぎる
もし狭い範囲に閉じ込められるケースならば閉じ込めた中でunsafeを用いたとしても効率的な型を提供すればよい
標準ライブラリにあるヒープを用いる型は全てそのようにして作られている
731:デフォルトの名無しさん
22/02/03 23:00:23.96 KgH5nhZs.net
>>684
今それ読んでる
出版物だけあって日本語の質はずっといい
732:デフォルトの名無しさん
22/02/03 23:17:16.89 VxNIdQ9k.net
Craterについて教えてください
733:デフォルトの名無しさん
22/02/04 00:50:00.86 Ueb60Gjp.net
>>718
もしかしてThe Bookの勝手訳の質と比べてる?
734:デフォルトの名無しさん
22/02/04 21:15:13.65 fCF+Tqbd.net
>>720
勝手訳というのがなにを指すのか不明だけどオリジナルのThe Bookからリンクされている日本語訳のことであればそれと比べている
735:デフォルトの名無しさん
22/02/04 21:21:32.40 b3SZZj/4.net
そんなのを見るのは極初期だけで些細な話
その後はdoc.rust-lang.orgとdocs.rsしか見ないのだから
736:デフォルトの名無しさん
22/02/05 13:22:14.88 XET6D0Ck.net
その極初期の人が見る和訳の質の話をしてるんだろ
737:デフォルトの名無しさん
22/02/05 14:41:30.63 e42LAXmg.net
あれは害悪レベルの訳だから初期でも見ない方がいいよ
ここでよくおかしなレスしてる人もあれの影響なんじゃないか?
738:デフォルトの名無しさん
22/02/05 15:12:20.92 WBcMnxrA.net
どうせ>>722のドキュメント見ないと先へ進めないしほとんどは中学生でもわかる平易な英語
日本語訳の質にこだわるような低レベルのやつはほっとけばいい
739:デフォルトの名無しさん
22/02/05 15:52:33.91 2hiBx8fY.net
Mistake 2 : Dive in without looking at the book
740:デフォルトの名無しさん
22/02/05 15:59:05.92 WBcMnxrA.net
>>726
まさにそれで最初は日本語訳でもいいがその後にthe bookを直接見るべき
そしてどの英単語でどう表現されているかを掴めば日本語訳がどうかに関わらず先へ進める
741:デフォルトの名無しさん
22/02/05 16:02:12.98 2hiBx8fY.net
>>727
言ってること変わってますけど
742:デフォルトの名無しさん
22/02/05 16:03:52.79 WBcMnxrA.net
一貫してるぞ
日本語訳の質にこだわるような低レベルのやつはほっとけばいい
これしか主張していない
743:デフォルトの名無しさん
22/02/05 16:09:07.88 2hiBx8fY.net
そこ以外の文章はポエムか何かだったの?
744:デフォルトの名無しさん
22/02/05 16:22:12.93 XET6D0Ck.net
じゃあ和訳の質を話題にしている低レベルの人同士の会話はほっとけばいいのにw
745:デフォルトの名無しさん
22/02/05 17:02:52.76 VkrSTqtm.net
日本語イラネ言っている人は技術資料が英語でも
日本語でも生産性が変わらない人なんだよね?
アメリカの仕事でもした方が稼げるんじゃない?
746:デフォルトの名無しさん
22/02/05 17:05:29.47 nog/R4+C.net
和訳の質にこだわってる人たちも唯一役に立つチャンスがあるよ
それは和訳の改善案を提案して質の向上に貢献すること
しかし和訳の質にこだわってるここの人たちは批判だけで提案がないから残念な人たち
747:デフォルトの名無しさん
22/02/05 17:15:34.64 9gZgvarh.net
和訳の質にこだわっている人たちの質にこだわっている人は何の役にたつの?
748:デフォルトの名無しさん
22/02/05 17:36:04.99 XET6D0Ck.net
どこの食堂が美味いか話しているところに割り込んで、
不味い方を立て直してこいと言うくらいナンセンス。
749:デフォルトの名無しさん
22/02/05 17:36:55.75 Z82/7dFa.net
>>725
その結果、所有権を複製しちゃったんでしょw
750:デフォルトの名無しさん
22/02/05 17:58:18.58 oHTbhGZf.net
とはいえ元の話は
無料の炊き出しがレストランより不味い
みたいな話なのでそりゃそうだろうとしか
誰もがオライリーを気軽に買えるわけでもないし
それぞれ意味はあるだろう
751:デフォルトの名無しさん
22/02/05 18:14:45.46 9gZgvarh.net
ざんねんながら悪文どころか誤訳だらけで無料の炊き出しよりひどいのがままあるのが技術書の世界
752:デフォルトの名無しさん
22/02/05 18:19:44.18 nog/R4+C.net
>>738
誤訳だと言うなら改善案を提案して質の向上に貢献するのがいいよ
それができないなら単なるイチャモン付けるだけの残念な人
753:デフォルトの名無しさん
22/02/05 18:40:50.96 SfaxLljQ.net
クソ不味い飯屋にわざわざ改善案を提案するやつww
「批判するなら対案出せ」と同じアホ理論www
754:デフォルトの名無しさん
22/02/05 18:44:43.09 NEwj3nV7.net
両立するよ。
改善に取り組みつつ現時点では良くないところもある (信頼しすぎるな) と初心者に警告するのは何も矛盾しない。
755:デフォルトの名無しさん
22/02/05 18:55:08.74 RA3mCqKO.net
>>741
>両立するよ。
何と何が両立するの?
756:デフォルトの名無しさん
22/02/05 19:15:32.20 9gZgvarh.net
>>739
ではイチャモン付けるだけの残念じゃない君が俺の代わりに改善案を提案しておいてくれ
757:デフォルトの名無しさん
22/02/05 19:38:56.71 nog/R4+C.net
>>743
自分は現状の和訳で問題ない派
そんな些細なことよりも和訳だけでなく原文も併用した方がよく
その後は原文だけの世界なのだから
758:デフォルトの名無しさん
22/02/05 19:43:44.48 9gZgvarh.net
なんだ、日本語が読めない人だったか
759:デフォルトの名無しさん
22/02/05 19:50:42.02 WBcMnxrA.net
日本語訳の質にこだわるような低レベルのやつはその先へ行けないため日本語訳にこだわる
760:デフォルトの名無しさん
22/02/05 21:53:27.09 tUU0u0u/.net
複製おじさんが言っても説得力ゼロ
761:デフォルトの名無しさん
22/02/05 22:32:09.49 nog/R4+C.net
和訳にイチャモン付けるだけの残念な人は「複製おじさん」を連呼する人でしたか
762:デフォルトの名無しさん
22/02/06 10:19:03.76 rpYaxfPG.net
>>543からの流れを見ると確かに複製おじさんは英語読めないっぽいが
Copyを「所有権の複製」と思い込むのは日本語訳の質が原因ではない気がする
763:デフォルトの名無しさん
22/02/06 21:49:38.13 iA9Wv++J.net
そんな超初心者入門のところでもめてるのかね
trait Copyを実装している型は複製されて、実装していなかったら移動となるだけだぞ
所有権は難しくない
764:デフォルトの名無しさん
22/02/06 21:58:58.41 nXnmaz3p.net
>>750
何が複製されて
何が移動するのかな?
765:デフォルトの名無しさん
22/02/06 22:11:28.10 BkoYcqr9.net
>>489 の文章が間違ってる、いやおかしくない、って揉めてただけだよ
まあ気付けば普通はおかしいと思うんだけど
766:デフォルトの名無しさん
22/02/06 22:13:32.98 iA9Wv++J.net
>>751
所有権
Copy実装型は常に所有権が分岐する
767:デフォルトの名無しさん
22/02/06 22:39:23.39 JXWBQEX4.net
>>753
複製(copy)と分岐(branching)
768:は全く違う意味だけどCopy実装型だと所有権が複製されつつ常に分岐する?? どういう意味?
769:デフォルトの名無しさん
22/02/06 22:43:41.39 iA9Wv++J.net
>>754
初期状態は全く同じ
つまり複製されて分岐する
それ以降は異なりうる
770:デフォルトの名無しさん
22/02/06 22:57:43.95 VdsOdvUM.net
Rustの所有権というのは権利というよりも所有しているリソースの解放義務を指している
複製できたら所有権管理の意味がない
分岐はもっと意味不明
771:デフォルトの名無しさん
22/02/06 22:59:53.55 9tkt2bmo.net
489から始まった議論をまたやり直すの?
772:デフォルトの名無しさん
22/02/06 23:01:30.97 s1W7Zv37.net
複製おじさんが分岐して所有権分岐おじさんにw
773:デフォルトの名無しさん
22/02/06 23:04:45.50 iA9Wv++J.net
>>756
複製され分岐するため
リソース解放義務はそれぞれに生じる
774:デフォルトの名無しさん
22/02/06 23:09:58.47 Woj/yg4T.net
>>759
複製おじさん、嘘ついちゃダメだよ
詳しくはdoc.rust-lang.orgとdocs.rs見てねw
775:デフォルトの名無しさん
22/02/06 23:26:57.07 kRmD/jh4.net
複製おじさん連呼する人は、もちっと具体的に指摘してくれるとありがたいんだが。
776:デフォルトの名無しさん
22/02/06 23:31:49.27 iA9Wv++J.net
嘘ではない
もちろんCopy実装型の時点でヒープは使われないので解放といってもスタッフ上のみだから実質何も行われない
そのためデストラクタも容認されていない
その観点からCopy実装型は所有権がないと主張する人もいるくらいだ
777:デフォルトの名無しさん
22/02/06 23:59:50.68 fxuI+J0l.net
>>761
おじさんを連呼してる人はスレを荒らしているだけのクズ
説明や代案や根拠などを語れない
778:デフォルトの名無しさん
22/02/07 00:00:24.28 eBqtDcmM.net
>>762
何も行われないのに複製されて分岐してそれ以降は異なりうるってどういうことだよ
矛盾だらけ
779:デフォルトの名無しさん
22/02/07 00:09:06.68 sOY0eIf2.net
>>761,763
複製おじさん得意の自演乙www
嘘つきは分岐の始まり
780:デフォルトの名無しさん
22/02/07 00:19:43.65 +QREW3s6.net
> そんな超初心者入門のところでもめてるのかね
> 所有権は難しくない
【超初心者向け所有権の説明】
Copy実装型は所有権が複製されて分岐してそれ以降は異なりうる
難しくないw
781:デフォルトの名無しさん
22/02/07 00:23:15.30 A0JQeUWh.net
>>764
この件は有名な話でRustコンパイラのサボり。
Copy型は複製分岐されて各々がdropされるのが正しいけど、スタック変数のみだからそれをサボっている。
つまり現在のコンパイラ実装は正しくなくて、dropしちゃうとサボりのせいでメモリunsafetyを引き起こす可能性がある。
だからCopy型はDropを現状では許していないという話。
rustc --explain E0184 を見てね。
782:デフォルトの名無しさん
22/02/07 01:29:41.70 6Fl/+EdH.net
>>767
なんか仕様と実装を混ぜて話してるけどなんで?
普通、仕様にそって実装がされるはずだけど、(この部分に関しては)実装に仕様が引きずられてるってこと?
それとも仕様通りではないってこと?
783:デフォルトの名無しさん
22/02/07 08:04:57.91 cIffYd5J.net
>>725
順調に滅びの道を歩んでいるな。
784:デフォルトの名無しさん
22/02/07 12:36:41.09 E3rdzbcC.net
将来実現されるであろうあるべき仕様が実装の都合で実現できていないから、それと矛盾しない範囲に仕様の範囲を制限した、という理解で良い?
785:デフォルトの名無しさん
22/02/07 13:38:44.35 ZeQEvlq1.net
>Copy型は複製分岐されて各々がdropされるのが正しいけど、スタック変数のみだからそれをサボっている。
まーた勝手な思い込みの妄想で嘘垂れ流してる
いい加減にしろ
786:デフォルトの名無しさん
22/02/07 18:29:28.92 lRQrpp2a.net
>>767
それ1.0以前の話で今とは実装も前提も全く違うからエラーメッセージ修正したほうがいいやつ
もし仮にDropかつCopyな型が実装できるようになったとしても所有権は複製されないから
787:デフォルトの名無しさん
22/02/07 21:58:52.41 pvg7UzFi.net
>>768
「currently disallowed」「current implementation is incorrect」「disabled for now」と強調されてるように、
あくまでも現在の実装は本来とは異なり正しくなくて、問題を引き起こすために、CopyとDropの両立を現時点では禁止してる。
理論的にはCopy型は複製分岐されて各々がdropされる形が正しくてCopyとDropの共存が可能。
この暫定的な実装に引きずられた暫定的な仕様が、将来は正される可能性も残す表現となっている。
両立禁止で実害が出てないため優先順位は低いと思われるが、もし将来に共存可能になったとしても後方互換性は生じない。
>>772
最新のエラーメッセージで合っている。
URLリンク(github.com)
Latest commit 9e5f7d5 on 28 Aug 2020
788:デフォルトの名無しさん
22/02/07 22:27:06.61 zI1SZbAO.net
>>773
>理論的にはCopy型は複製分岐されて各々がdropされる形が正しくて
複製分岐されるのが正しいという根拠は?
789:デフォルトの名無しさん
22/02/07 22:38:57.39 pvg7UzFi.net
>>774
Copyなので複製分岐されるのは当たり前。
今はそこが論点ではなくて、複製分岐の後に各々に解放処理が生じるけど、現在は正しく実装されていないので仕様に制限があるとコンパイラのメッセージでも出る話。
790:デフォルトの名無しさん
22/02/07 22:50:06.68 3WtW5B3R.net
>>774
複製分岐おじさんは日本語通じないからまともに相手しても時間の無駄だよ
791:デフォルトの名無しさん
22/02/07 22:52:45.27 MLiEvPiI.net
「最新のエラーメッセージ」は1.0直前に書かれたものだしもう仕様化してもいいんじゃね
URLリンク(github.com)
792:デフォルトの名無しさん
22/02/07 23:03:21.13 jZIVUuZq.net
いつも傍から見ていてパターンがわかってきた
普通は「○○○は間違っている、×××が正しい」となるんだけど
なぜか「○○○は間違っている」だけで終わって代わりとなる対案が出てこない
>>771のように「勝手な思い込みの妄想で嘘」と否定するだけだったり
>>774のように「正しいという根拠は?」とこれも同じパターン
全てに共通するのは対案を出さずに否定ばかりしている言動
793:デフォルトの名無しさん
22/02/07 23:11:42.66 gOCxugwW.net
>>775
今は複製分岐されるのが本当正しいと言えるのかどうかが論点です
論点をずらさずにそう考えた根拠を示して下さい
ありませんか?
794:デフォルトの名無しさん
22/02/07 23:15:03.65 Rl6UL3Q6.net
半ギレww
795:デフォルトの名無しさん
22/02/07 23:28:02.69 q/PrVpBp.net
>>777
仕様化されてるよ
エラーメッセージをアップデートすべき
URLリンク(doc.rust-lang.org)
その時代とはDrop周りの実装も大きく変わってる上に
CopyとDropが排他的である前提で書かれたコードも多々あるから
Copy+Dropな型をサポートするならエディション対応が必須
796:デフォルトの名無しさん
22/02/07 23:45:39.09 jZIVUuZq.net
>>779
Copyを実装している型は使われると複製され分岐すると自分も当たり前に思っているけど
異なる意見を持っているの?
否定ばかりしていて対案を出せない人はどこの世界でもダメな人扱いになっちゃうから対案を出すのがお勧め
797:デフォルトの名無しさん
22/02/07 23:54:38.63 MLiEvPiI.net
>>781
まじかよ反応して損した
この流れ何の意味もねえな
798:デフォルトの名無しさん
22/02/08 00:13:43.96 6pYzzNS7.net
Copyを実装する型の変数にはそもそも所有権が存在しないということかな。
799:デフォルトの名無しさん
22/02/08 00:58:18.89 v5+/0O15.net
ソケット、ファイルハンドラあたりがコピーされたらそら問題だろうからな。
>Copyを実装する型の変数にはそもそも所有権が存在しないということかな。
copyされたら所有権がないとかめちゃくちゃだな。int値だって共有されるかどうかはかなり問題だっての。
800:デフォルトの名無しさん
22/02/08 01:23:08.03 Ie+ZA5Wx.net
>>782 値が複製されることに異論は無いんだけど、彼は>>753などで所有権が複製されると言っていて、そこがおかしい。
801:デフォルトの名無しさん
22/02/08 02:46:17.65 TlrfCSTD.net
それ同一人物だぞ
複製オジは人格も複製分岐させる
802:デフォルトの名無しさん
22/02/08 09:41:57.74 SQntNedJ.net
たとえ話って逆に理解を妨げることも多いよね(´・ω・`)
803:デフォルトの名無しさん
22/02/08 10:46:53.27 VdD2swgy.net
複製おじさんにも唯一役に立つチャンスがあるよ
それはE0184の改善案を提案してRustの質向上に貢献することw
しかし複製おじさんは妄想だけで改善が見られないから害でしかない
804:デフォルトの名無しさん
22/02/08 17:39:21.77 L87aFEFb.net
複製おじさん大人気だな
個人的には「所有権が分岐する」のほうが衝撃的だった
805:デフォルトの名無しさん
22/02/08 18:04:38.67 wY99dkVo.net
Rustの学習してるのですが、モジュールがどう使われるものなのかいまいち想像がつきません
他の言語でいう、スタティッククラスのような使い方になるのですか?
クレート内部にはモジュールを通じてアクセスしてもらうような、アクセサーのような感覚でいいのでしょうか?
806:デフォルトの名無しさん
22/02/08 18:41:34.13 7ZuunrUW.net
なんで所有権が複製分岐なんていう言葉を発明しちゃうんだろな
実際に所有権をツリー構造みたいなものでイメージしてるのかな
807:デフォルトの名無しさん
22/02/08 18:50:29.41 Pp1mAPfQ.net
>>791
モジュールはコードのかたまりでnamespaceを構成するもの
Javaならパッケージ、C#ならnamespace
808:デフォルトの名無しさん
22/02/08 20:18:25.32 RxI0yA8a.net
複製は値と所有権のペアがまるごと複製されるというイメージでわからなくもないが分岐は本当によくわからない
809:デフォルトの名無しさん
22/02/08 20:23:01.17 SvZbCMDW.net
>>792
何事も正しく理解できないクセがついてて
同時に、そんな自分を客観的に理解できてないから
独自用語乱発になんの違和感もないんやろな
810:デフォルトの名無しさん
22/02/08 20:32:05.71 SvZbCMDW.net
複おじの悪いとこは反省が無いところ
811:デフォルトの名無しさん
22/02/08 20:41:11.90 l2NSRb44.net
複製おじさん自演認定連呼の人も大概だけどな
技術について語るスレなんだから個性を出すな与えるな
812:デフォルトの名無しさん
22/02/08 22:11:02.29 4v8i4qWv.net
変数毎のメタデータに所有権管理のためのフラグか状態変数があってその値も複製されるイメージだったんでしょ
それを匂わせることを確か書いてた気がする
仮にそういう実装だったとしてもそのメタデータ自体は所有権じゃないんだけどね
複オジは反省して分岐して欲しい
813:デフォルトの名無しさん
22/02/08 22:15:39.64 F0zgFFgG.net
>>784
Copyを実装する型の変数にも所有権は存在するぜ
使われるたびに複製されて別々の所有権になる
例えば借用ルールなどもそれぞれ個別に適用されるようになる
814:デフォルトの名無しさん
22/02/08 22:17:35.77 HAxbJIeP.net
複製おじさんホントに反省しないなぁ
815:デフォルトの名無しさん
22/02/08 22:36:36.51 SvZbCMDW.net
複おじはまずコテハンかトリップつけてほしい
名無しに紛れ込んでスレ荒らすのやめてほしい
816:デフォルトの名無しさん
22/02/08 22:47:22.11 NtAny2QZ.net
>>799で合ってると思う私も何か勘違いしてる?
もし違うならば正しい情報を知りたい
817:デフォルトの名無しさん
22/02/08 22:54:07.50 DXXwh4pM.net
>>802
複オジいい加減にして!
818:デフォルトの名無しさん
22/02/08 23:05:22.58 6pYzzNS7.net
>>803
指摘の中身が無いから何をどうすればいいか傍から見てさっぱりわからんのだが。
819:デフォルトの名無しさん
22/02/08 23:17:16.63 NtAny2QZ.net
>>804
それそれ
おじとかオジとか言ってる人の書き込�
820:ンを遡って見ても中身がないかコピペばかり おじとオジをNGにすればよいのかな
821:はちみつ餃子
22/02/08 23:24:36.35 d+fT+XiK.net
>>802
正しいよ。 >>799 で正しい。
値が複製されると同時にそれぞれが所有権を持つというのは根本的な原理そのもの。
822:デフォルトの名無しさん
22/02/08 23:33:11.39 50t+w5HT.net
おや
823:デフォルトの名無しさん
22/02/08 23:35:38.19 50t+w5HT.net
「所有権が複製される」のではなくて、「値が複製されるとき、複製された値には新しい所有権が生まれる」と表現すべき、ってこと?
824:デフォルトの名無しさん
22/02/08 23:37:06.33 NtAny2QZ.net
>>806
ありがとう
おじオジ連投の人はNGにします
825:デフォルトの名無しさん
22/02/08 23:45:07.26 Gazi17ea.net
単なる揚げ足取りでしょ
本人もよくわかってないと思われ
826:デフォルトの名無しさん
22/02/09 00:09:26.69 hQLH/4Iv.net
はちみつ複製オジは自演するのいい加減して!!
827:デフォルトの名無しさん
22/02/09 00:48:50.88 Th41z547.net
>>799,802,806
799は言葉足らずだと思う。
>>808 のがより合ってる。
828:デフォルトの名無しさん
22/02/09 01:28:22.38 G66vCctx.net
あちこちでrustおじさんが暴れてるんだけどこのスレでも暴れてんのな
829:デフォルトの名無しさん
22/02/09 07:46:27.70 MYXFjZ5a.net
>>808
その2つの解釈に何の違いがあるのってことだよな
830:デフォルトの名無しさん
22/02/09 08:16:52.91 RoPbijrN.net
論理性がない、客観性もない、実績もないのに上から目線の奴いるよね
素人相手にマウント取りたいアフィブロガーやアフィチューバーの類なんだろうけど
831:デフォルトの名無しさん
22/02/09 08:33:26.39 XHPTdDLm.net
>>812
「言葉足らず」だっだという事にしたいのねw
832:デフォルトの名無しさん
22/02/09 13:00:04.34 v0CQAsq5.net
所有権を実装の観点からだけ見た場合はCopy型に所有権は(設定されて)ないと考えるのは妥当
説明用の概念として見た場合はshared referenceを除くCopy実装型にも所有権があってコピーされた際にその値に対する新たな所有権が発生すると考える方が妥当
公式は基本的に後者
833:デフォルトの名無しさん
22/02/09 15:18:47.99 06jFMmW0.net
>>808
「所有権が複製される」という言い方は
単なる表現の問題として矮小化されるものではなく所有権という概念を根本的に誤って解釈してるのが大きな問題
それを吹聴するのはRust入門者の学びを妨害する行為なので叩かれてる
834:デフォルトの名無しさん
22/02/09 18:04:35.96 WRBpfbxt.net
>>818
所有権という概念はどう解釈すべきなの?
835:デフォルトの名無しさん
22/02/09 18:57:48.48 Th41z547.net
>>819
辞書で調べたら?
836:デフォルトの名無しさん
22/02/09 19:23:18.18 WRBpfbxt.net
URLリンク(doc.rust-lang.org)
Ownership is a set of rules that governs how a Rust program manages memory.
rust の定義では ownership はルールのことを指している?
URLリンク(dictionary.cambridge.org)
the fact that you own something
辞書的な定義ともまた違うようだ
837:デフォルトの名無しさん
22/02/09 19:30:35.55 WRBpfbxt.net
TRPLの説明では take ownership という表現も登場するし辞書的な意味で ownership が使われているのでルールのことを指すだけではないようだ
838:デフォルトの名無しさん
22/02/09 19:43:45.64 WRBpfbxt.net
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 の関係性をどう表現すべきか、というのが議論の対象という理解で良いかな?
839:デフォルトの名無しさん
22/02/09 20:01:24.42 WRBpfbxt.net
aという変数が持つ1という値とそのownershipがまとめて複製されてbに渡されると思えば、owenershipの複製という言葉も不自然ではないように思う
複製といいつつ own する値や owner となる変数が異なることに違和感を持つ人がいるのもわからんでもないが、
この構造は Box<T> の clone と同じなので、
clone を複製と呼ぶのであれば、 ownership も複製されるものとして間違いではないと思う
初学者向けの説明として適当かという議論は別途必要だとは思うけども
840:デフォルトの名無しさん
22/02/09 20:11:57.38 Sh3dorK1.net
それは単に値のコピーですやん
値が複製されてるだけですやん
bは複製された値のオーナーになってるだけですやん
aの所有権はどこにも複製されてないですやん
841:デフォルトの名無しさん
22/02/09 20:45:07.16 y0eUGeWz.net
>>824
> 値とそのownershipがまとめて複製されてbに渡されると思えば
その仮定が偽。
842:デフォルトの名無しさん
22/02/09 20:46:37.31 y0eUGeWz.net
ていうか仮定にすらなってない。論点先取。
URLリンク(ja.wikipedia.org)
843:デフォルトの名無しさん
22/02/09 20:47:07.42 bzZIRbp2.net
>>824
Box<T>のcloneと同じなら
どうしてownershipも複製されることになるの?
2つの繋がりがよく分からない
844:デフォルトの名無しさん
22/02/09 20:49:21.34 vm2ezt88.net
>>827
なるほど
こういうの論点先取と呼ぶのか
勉強になった
845:デフォルトの名無しさん
22/02/09 21:05:16.82 uQPdms8/.net
オーナーシップの説明にオーナーシップを使っているのか
なるほど論外だ
846:デフォルトの名無しさん
22/02/09 21:22:51.45 DXyGa46n.net
所有権をCopyするって書くのをやめて、値をCopyする、にしてくれればそれで済むのに、なぜ所有権の複製を正当化しようとするのか
847:デフォルトの名無しさん
22/02/09 21:42:23.99 MYXFjZ5a.net
べつに値をコピせずに所有権だけコピーするとか言っているわけでもなし、そんなに問題かね?
848:デフォルトの名無しさん
22/02/09 21:52:08.47 Sh3dorK1.net
>>832
正当性を訴えるのはやめたん?w
849:デフォルトの名無しさん
22/02/09 21:58:09.12 Th41z547.net
>>824
だからー、値が複製されて所有権が新規にできるんだってば
850:デフォルトの名無しさん
22/02/09 21:58:48.91 p5i5ajWp.net
let a = 1; は値1の所有権をaが持つということ
ここでその値1の所有権を複製してしまうと、同じ値の所有権を持つ人が複数存在してしまうことになる
let b = a; で実際に起きるのは、値1のコピーとして値1'を生成し、その所有権をbに割り当てている
値1と値1'は数値としては同じに見えるとしても違う値であって
それぞれ別々に所有権がある
1'の所有権が1の所有権の複製である、という理解は
権利書をコピーして記名欄だけ書き換えるみたいな
イメージなのかもね
実際にはその記名欄が所有権の全てであって、
複製する部分というのは存在しない
851:デフォルトの名無しさん
22/02/09 22:01:53.64 pUgNKLbu.net
Copy実装型にも所有権はあって借用ルールに従う
そして使われる時に値と所有権は複製されて別々の値と所有権になる
そのため借用中だと複製できない
let mut a = 123;
let a1 = &mut a;
let b = a;
*a1 = 345;
println!("a={a}");
println!("b={b}");
例えばこのコードは借用中のため複製できずコンパイルエラー
852:デフォルトの名無しさん
22/02/09 22:02:09.07 p5i5ajWp.net
複製するという言い方は、複数の権利者が
(一時的にでも)存在し得るという理解につながるので
単に言い方の問題ではなく避けたほうがいいと思う
853:デフォルトの名無しさん
22/02/09 22:06:52.22 f/eR1VAb.net
どうでもいいならそれでいいんだけどね
中身の無いどうでもいい話をしましたってことで
854:デフォルトの名無しさん
22/02/09 22:10:36.37 zSJbpp9s.net
>>836
そういうことか!
値だけなら複製できてもよいのに
値と所有権が複製されるために借用中だと複製できないわけか
855:デフォルトの名無しさん
22/02/09 22:23:03.85 pUgNKLbu.net
その通り
だから「(所有権と関係なく)値が複製されて、その値に新たな所有権が生じる」よりも
「値と所有権が複製されて、別々の値と所有権になる」の方がRustを正しく理解できる
856:デフォルトの名無しさん
22/02/09 22:24:43.45 HWZXFj3+.net
wwww
複製オジのエクストリーム解釈で自演してもモロバレやでwww
857:デフォルトの名無しさん
22/02/09 22:35:06.54 MYXFjZ5a.net
>>835
現実世界から借用した用語は多いけど、意味まで完全に同じとは限らないからその議論は無意味だね。
そもそも現実世界の「複製」は「同じものを新しく作ること」だしw
858:デフォルトの名無しさん
22/02/09 22:35:22.01 oiWhDOci.net
OwnershipのルールとReferenceのルールが整理できてないんだね
分かった気にならずに一からやり直したほうがよさげ
859:デフォルトの名無しさん
22/02/09 22:47:52.82 RvxtckJm.net
>>836
めちゃくちゃな解説でびっくり!!
複製おじさんはこのレベルだったか
860:デフォルトの名無しさん
22/02/09 22:55:19.94 zSJbpp9s.net
>>844
僕は>>836の説明で納得した
そして実際にコンパイラエラーも確認した
君がそれを違うと言うならば
どの部分がどういう理由でどのように違うのかを皆に示さなければならないと思う
861:デフォルトの名無しさん
22/02/09 22:56:27.31 qfxIxGcm.net
>>836
それはmut借用中の値は使用禁止(コピーのために値を読み取るのも当然禁止)ってRustの基本ルールに違反してるってだけで
所有権の複製なんて新たな概念を持ち出す必要はないと思うが
実際エラーメッセージもそう書いてあるし