1 名前:デフォルトの名無しさん mailto:sage [2021/11/07(日) 10:04:59.35 ID:pJhT3MIE.net] 公式 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/
705 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 07:35:21.99 ID:qlFEomu1.net] >>691 Rustではconst fnな関数を使ってconstな定数を作ることができる つまりコンパイラがその定数を算出するためコンパイル時点で判明する
706 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 10:25:13.89 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 11:02:40.38 ID:qlFEomu1.net] エラーを捕捉したいことをデストラクタに任せない つまりそのような終端処理はdropされる前に終える 例えばBufWriter利用時も終える時は明示的にflushを呼ぶ そしてflushはResultを返しエラーが判明する
708 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 11:32:28.54 ID:LhFaS6j7.net] finishの呼び忘れを静的に捕捉したいということだからflushの例では不十分かな add_entryの戻り値型の暗黙のdropを防げばいいけど、そういった機能はまだない(RFCにはあるけど進んではない) https://users.rust-lang.org/t/prevent-drop-at-compile-time/20508 このスレッドではdropの実装に存在しないC FFI呼び出しを書いておいて、リンクエラーとして捕捉する方法が提案されているね
709 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 11:35:46.57 ID:y6tOo2ii.net] >>694 それを制約として表現できるか (終端処理をしていないときにエラーになるように制約を書けるか) という質問をしてる。 つまり出来ないってこと?
710 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 11:53:47.47 ID:y6tOo2ii.net] >>695 それは残念。 言語の機能として用意されてないまわりくどい方法を使うと エラーメッセージがよくわからん (本来の問題とは違う内容が出てくる) ことになりがちだし、 使うときに unsafe や forget をいちいち書いてもらわなきゃならないのは ライブラリとして提供するときにはちょっと汚すぎるなぁ。
711 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:37:43.75 ID:pXNCEmdM.net] PhantomType的な?
712 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:39:21.72 ID:pXNCEmdM.net] エラーメッセージがよくわからん事になりがちだからNGか
713 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:47:03.61 ID:qlFEomu1.net] >>696 なるほど コンパイラは解析してdropさせるべき位置を把握しているから そこへ至る全ての経路上で例えばFinalize trait実装型はそのメソッドfinalize()を呼んでいないとコンパイルエラーとなる というような制約をするFinalize trait が存在していれば要望を満たす?
714 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 13:15:16.14 ID:wgfsi16C.net] >>692 非const fnについての話なんだけど
715 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 18:21:42.44 ID:EUosKgIx.net] amazon primeの記事経由でegui見てみたが結構いいな ネイティブで試してみたが充分実用レベル
716 名前:デフォルトの名無しさん [2022/02/01(火) 21:04:57.74 ID:YxH4csZd.net] GCは標準からは消えたけどライブラリでやればいいってかつてこのスレで言われたことがあるのだが、GCライブラリのデファクトスタンダードってどれだ
717 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 21:52:48.48 ID:noSg7Gj9.net] >>703 デファクトなんてあるわけないじゃん マークスイープGCするならRust使う意味ないんだから
718 名前:デフォルトの名無しさん [2022/02/01(火) 22:04:01.37 ID:YxH4csZd.net] >>704 いや一部だけGC欲しい時は普通にあるからそれは言い過ぎ
719 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 22:51:54.30 ID:l+/c7OlD.net] クッソ身につまされる記事があったので共有する https://dystroy.org/blog/how-not-to-learn-rust
720 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 23:11:34.83 ID:rVnoodM/.net] >>706 これはいい記事だな 次からテンプレ入り希望
721 名前:デフォルトの名無しさん [2022/02/01(火) 23:23:08.93 ID:rLXhSAw+.net] >>702 eguiは毎回60fpsで全画面を描き直すことで差分描き直しを避けて簡単にしてるようだけど 省力化したい方針と合わないや ゲーム向き? >>705 GC使ってもRustのRAIIを無くせるわけじゃないから そういう時はVecに入れて使って あとは任意のタイミングで未使用の要素の区画を再利用という感じにしてる >>706 Rustは各種bookを読んであとはstd docとreference見ながら コンパイルエラーの通り直すだけで何とかなるから書かれている通りだね 付け加えると基本要素については覚えていないメソッドのために回り道しがちなので Option Result slice str Iteratorあたりの全メソッドは一通り認識しておくといいかな
722 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 10:20:38.88 ID:OC/eznuR.net] 複製おじは自分では何とかなってると思ってるのか
723 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 11:48:12.13 ID:yXsdGz3O.net] 🐜蟻型蜂🐝はポジティブシンギング🤯だから
724 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 18:24:25.46 ID:LUGaOk8s.net] >>706 >Mistake 3 : Start by implementing a graph based algorithm その通りだとは思うけどRustと相性の良いアルゴリズム集的なのは欲しいとも思う
725 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 19:18:50.51 ID:aYiI+nmg.net] >>711 汎用データ構造の大部分を使うな、という話になりそうだからなぁ。 スタックとキューくらいは楽に使えるのかね。
726 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 20:06:31.96 ID:9W9+AwqU.net] dynや lifetime heavyは失敗しながら学ぶのでいいと思う 普通の人はしばらくやってれば気づくから
727 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 20:34:19.12 ID:ljjcfSf9.net] deny(rust_2018_idioms)はガチのマジでオススメです
728 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 22:05:12.51 ID:cdYzXGt/.net] データ構造が大事なんだって言われながら育ってきた身としちゃあ辛い話じゃねえか 自分で作らなけりゃいいんだな!ってslab_tree使って 「ある条件に合致した子ノードから、ルートまでの値をリストで取り出す」 みたいな処理を書こうとしたら怒られるんだよな。 node_ref.parent() : &Self<T> -> Option<NodeRef<T> っていう型なもんだから、次々に親をたどるために while Some(parent) = node.parent() { node = parent; ...} みたいな処理書くと、当然怒られる。 何とか抜け道無いかって探したら、node自身じゃなくてそのIDを使えばよかったんだけど、 いつも抜け道があるとは思えない。辛い。
729 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 22:39:17.87 ID:O+j3A95O.net] Rustで普通にやってるとスレッドセーフを強いられるから制約がキツくなるんだよね
730 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 22:41:53.47 ID:J71gX0gE.net] 大昔からの単純なポインタ相互参照だと ダングリングポインタ・多重解放・解放忘れなどが全く存在しないことを検証すべき範囲が一般的には広くなりすぎる もし狭い範囲に閉じ込められるケースならば閉じ込めた中でunsafeを用いたとしても効率的な型を提供すればよい 標準ライブラリにあるヒープを用いる型は全てそのようにして作られている
731 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 23:00:23.96 ID:KgH5nhZs.net] >>684 今それ読んでる 出版物だけあって日本語の質はずっといい
732 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 23:17:16.89 ID:VxNIdQ9k.net] Craterについて教えてください
733 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 00:50:00.86 ID:Ueb60Gjp.net] >>718 もしかしてThe Bookの勝手訳の質と比べてる?
734 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:15:13.65 ID:fCF+Tqbd.net] >>720 勝手訳というのがなにを指すのか不明だけどオリジナルのThe Bookからリンクされている日本語訳のことであればそれと比べている
735 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:21:32.40 ID:b3SZZj/4.net] そんなのを見るのは極初期だけで些細な話 その後はdoc.rust-lang.orgとdocs.rsしか見ないのだから
736 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 13:22:14.88 ID:XET6D0Ck.net] その極初期の人が見る和訳の質の話をしてるんだろ
737 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 14:41:30.63 ID:e42LAXmg.net] あれは害悪レベルの訳だから初期でも見ない方がいいよ ここでよくおかしなレスしてる人もあれの影響なんじゃないか?
738 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 15:12:20.92 ID:WBcMnxrA.net] どうせ>>722 のドキュメント見ないと先へ進めないしほとんどは中学生でもわかる平易な英語 日本語訳の質にこだわるような低レベルのやつはほっとけばいい
739 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 15:52:33.91 ID:2hiBx8fY.net] Mistake 2 : Dive in without looking at the book
740 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 15:59:05.92 ID:WBcMnxrA.net] >>726 まさにそれで最初は日本語訳でもいいがその後にthe bookを直接見るべき そしてどの英単語でどう表現されているかを掴めば日本語訳がどうかに関わらず先へ進める
741 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 16:02:12.98 ID:2hiBx8fY.net] >>727 言ってること変わってますけど
742 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 16:03:52.79 ID:WBcMnxrA.net] 一貫してるぞ 日本語訳の質にこだわるような低レベルのやつはほっとけばいい これしか主張していない
743 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 16:09:07.88 ID:2hiBx8fY.net] そこ以外の文章はポエムか何かだったの?
744 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 16:22:12.93 ID:XET6D0Ck.net] じゃあ和訳の質を話題にしている低レベルの人同士の会話はほっとけばいいのにw
745 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 17:02:52.76 ID:VkrSTqtm.net] 日本語イラネ言っている人は技術資料が英語でも 日本語でも生産性が変わらない人なんだよね? アメリカの仕事でもした方が稼げるんじゃない?
746 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 17:05:29.47 ID:nog/R4+C.net] 和訳の質にこだわってる人たちも唯一役に立つチャンスがあるよ それは和訳の改善案を提案して質の向上に貢献すること しかし和訳の質にこだわってるここの人たちは批判だけで提案がないから残念な人たち
747 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 17:15:34.64 ID:9gZgvarh.net] 和訳の質にこだわっている人たちの質にこだわっている人は何の役にたつの?
748 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 17:36:04.99 ID:XET6D0Ck.net] どこの食堂が美味いか話しているところに割り込んで、 不味い方を立て直してこいと言うくらいナンセンス。
749 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 17:36:55.75 ID:Z82/7dFa.net] >>725 その結果、所有権を複製しちゃったんでしょw
750 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 17:58:18.58 ID:oHTbhGZf.net] とはいえ元の話は 無料の炊き出しがレストランより不味い みたいな話なのでそりゃそうだろうとしか 誰もがオライリーを気軽に買えるわけでもないし それぞれ意味はあるだろう
751 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 18:14:45.46 ID:9gZgvarh.net] ざんねんながら悪文どころか誤訳だらけで無料の炊き出しよりひどいのがままあるのが技術書の世界
752 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 18:19:44.18 ID:nog/R4+C.net] >>738 誤訳だと言うなら改善案を提案して質の向上に貢献するのがいいよ それができないなら単なるイチャモン付けるだけの残念な人
753 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 18:40:50.96 ID:SfaxLljQ.net] クソ不味い飯屋にわざわざ改善案を提案するやつww 「批判するなら対案出せ」と同じアホ理論www
754 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 18:44:43.09 ID:NEwj3nV7.net] 両立するよ。 改善に取り組みつつ現時点では良くないところもある (信頼しすぎるな) と初心者に警告するのは何も矛盾しない。
755 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 18:55:08.74 ID:RA3mCqKO.net] >>741 >両立するよ。 何と何が両立するの?
756 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 19:15:32.20 ID:9gZgvarh.net] >>739 ではイチャモン付けるだけの残念じゃない君が俺の代わりに改善案を提案しておいてくれ
757 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 19:38:56.71 ID:nog/R4+C.net] >>743 自分は現状の和訳で問題ない派 そんな些細なことよりも和訳だけでなく原文も併用した方がよく その後は原文だけの世界なのだから
758 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 19:43:44.48 ID:9gZgvarh.net] なんだ、日本語が読めない人だったか
759 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 19:50:42.02 ID:WBcMnxrA.net] 日本語訳の質にこだわるような低レベルのやつはその先へ行けないため日本語訳にこだわる
760 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 21:53:27.09 ID:tUU0u0u/.net] 複製おじさんが言っても説得力ゼロ
761 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 22:32:09.49 ID:nog/R4+C.net] 和訳にイチャモン付けるだけの残念な人は「複製おじさん」を連呼する人でしたか
762 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 10:19:03.76 ID:rpYaxfPG.net] >>543 からの流れを見ると確かに複製おじさんは英語読めないっぽいが Copyを「所有権の複製」と思い込むのは日本語訳の質が原因ではない気がする
763 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 21:49:38.13 ID:iA9Wv++J.net] そんな超初心者入門のところでもめてるのかね trait Copyを実装している型は複製されて、実装していなかったら移動となるだけだぞ 所有権は難しくない
764 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 21:58:58.41 ID:nXnmaz3p.net] >>750 何が複製されて 何が移動するのかな?
765 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 22:11:28.10 ID:BkoYcqr9.net] >>489 の文章が間違ってる、いやおかしくない、って揉めてただけだよ まあ気付けば普通はおかしいと思うんだけど
766 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 22:13:32.98 ID:iA9Wv++J.net] >>751 所有権 Copy実装型は常に所有権が分岐する
767 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 22:39:23.39 ID:JXWBQEX4.net] >>753 複製(copy)と分岐(branching)
768 名前:は全く違う意味だけどCopy実装型だと所有権が複製されつつ常に分岐する?? どういう意味? [] [ここ壊れてます]
769 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 22:43:41.39 ID:iA9Wv++J.net] >>754 初期状態は全く同じ つまり複製されて分岐する それ以降は異なりうる
770 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 22:57:43.95 ID:VdsOdvUM.net] Rustの所有権というのは権利というよりも所有しているリソースの解放義務を指している 複製できたら所有権管理の意味がない 分岐はもっと意味不明
771 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 22:59:53.55 ID:9tkt2bmo.net] 489から始まった議論をまたやり直すの?
772 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 23:01:30.97 ID:s1W7Zv37.net] 複製おじさんが分岐して所有権分岐おじさんにw
773 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 23:04:45.50 ID:iA9Wv++J.net] >>756 複製され分岐するため リソース解放義務はそれぞれに生じる
774 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 23:09:58.47 ID:Woj/yg4T.net] >>759 複製おじさん、嘘ついちゃダメだよ 詳しくはdoc.rust-lang.orgとdocs.rs見てねw
775 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 23:26:57.07 ID:kRmD/jh4.net] 複製おじさん連呼する人は、もちっと具体的に指摘してくれるとありがたいんだが。
776 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 23:31:49.27 ID:iA9Wv++J.net] 嘘ではない もちろんCopy実装型の時点でヒープは使われないので解放といってもスタッフ上のみだから実質何も行われない そのためデストラクタも容認されていない その観点からCopy実装型は所有権がないと主張する人もいるくらいだ
777 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 23:59:50.68 ID:fxuI+J0l.net] >>761 おじさんを連呼してる人はスレを荒らしているだけのクズ 説明や代案や根拠などを語れない
778 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 00:00:24.28 ID:eBqtDcmM.net] >>762 何も行われないのに複製されて分岐してそれ以降は異なりうるってどういうことだよ 矛盾だらけ
779 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 00:09:06.68 ID:sOY0eIf2.net] >>761 ,763 複製おじさん得意の自演乙www 嘘つきは分岐の始まり
780 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 00:19:43.65 ID:+QREW3s6.net] > そんな超初心者入門のところでもめてるのかね > 所有権は難しくない 【超初心者向け所有権の説明】 Copy実装型は所有権が複製されて分岐してそれ以降は異なりうる 難しくないw
781 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 00:23:15.30 ID:A0JQeUWh.net] >>764 この件は有名な話でRustコンパイラのサボり。 Copy型は複製分岐されて各々がdropされるのが正しいけど、スタック変数のみだからそれをサボっている。 つまり現在のコンパイラ実装は正しくなくて、dropしちゃうとサボりのせいでメモリunsafetyを引き起こす可能性がある。 だからCopy型はDropを現状では許していないという話。 rustc --explain E0184 を見てね。
782 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 01:29:41.70 ID:6Fl/+EdH.net] >>767 なんか仕様と実装を混ぜて話してるけどなんで? 普通、仕様にそって実装がされるはずだけど、(この部分に関しては)実装に仕様が引きずられてるってこと? それとも仕様通りではないってこと?
783 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 08:04:57.91 ID:cIffYd5J.net] >>725 順調に滅びの道を歩んでいるな。
784 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 12:36:41.09 ID:E3rdzbcC.net] 将来実現されるであろうあるべき仕様が実装の都合で実現できていないから、それと矛盾しない範囲に仕様の範囲を制限した、という理解で良い?
785 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 13:38:44.35 ID:ZeQEvlq1.net] >Copy型は複製分岐されて各々がdropされるのが正しいけど、スタック変数のみだからそれをサボっている。 まーた勝手な思い込みの妄想で嘘垂れ流してる いい加減にしろ
786 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 18:29:28.92 ID:lRQrpp2a.net] >>767 それ1.0以前の話で今とは実装も前提も全く違うからエラーメッセージ修正したほうがいいやつ もし仮にDropかつCopyな型が実装できるようになったとしても所有権は複製されないから
787 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 21:58:52.41 ID:pvg7UzFi.net] >>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
788 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 22:27:06.61 ID:zI1SZbAO.net] >>773 >理論的にはCopy型は複製分岐されて各々がdropされる形が正しくて 複製分岐されるのが正しいという根拠は?
789 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 22:38:57.39 ID:pvg7UzFi.net] >>774 Copyなので複製分岐されるのは当たり前。 今はそこが論点ではなくて、複製分岐の後に各々に解放処理が生じるけど、現在は正しく実装されていないので仕様に制限があるとコンパイラのメッセージでも出る話。
790 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 22:50:06.68 ID:3WtW5B3R.net] >>774 複製分岐おじさんは日本語通じないからまともに相手しても時間の無駄だよ
791 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 22:52:45.27 ID:MLiEvPiI.net] 「最新のエラーメッセージ」は1.0直前に書かれたものだしもう仕様化してもいいんじゃね https://github.com/rust-lang/rust/pull/25272
792 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 23:03:21.13 ID:jZIVUuZq.net] いつも傍から見ていてパターンがわかってきた 普通は「○○○は間違っている、×××が正しい」となるんだけど なぜか「○○○は間違っている」だけで終わって代わりとなる対案が出てこない >>771 のように「勝手な思い込みの妄想で嘘」と否定するだけだったり >>774 のように「正しいという根拠は?」とこれも同じパターン 全てに共通するのは対案を出さずに否定ばかりしている言動
793 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 23:11:42.66 ID:gOCxugwW.net] >>775 今は複製分岐されるのが本当正しいと言えるのかどうかが論点です 論点をずらさずにそう考えた根拠を示して下さい ありませんか?
794 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 23:15:03.65 ID:Rl6UL3Q6.net] 半ギレww
795 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 23:28:02.69 ID:q/PrVpBp.net] >>777 仕様化されてるよ エラーメッセージをアップデートすべき https://doc.rust-lang.org/reference/special-types-and-traits.html#copy その時代とはDrop周りの実装も大きく変わってる上に CopyとDropが排他的である前提で書かれたコードも多々あるから Copy+Dropな型をサポートするならエディション対応が必須
796 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 23:45:39.09 ID:jZIVUuZq.net] >>779 Copyを実装している型は使われると複製され分岐すると自分も当たり前に思っているけど 異なる意見を持っているの? 否定ばかりしていて対案を出せない人はどこの世界でもダメな人扱いになっちゃうから対案を出すのがお勧め
797 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 23:54:38.63 ID:MLiEvPiI.net] >>781 まじかよ反応して損した この流れ何の意味もねえな
798 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 00:13:43.96 ID:6pYzzNS7.net] Copyを実装する型の変数にはそもそも所有権が存在しないということかな。
799 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 00:58:18.89 ID:v5+/0O15.net] ソケット、ファイルハンドラあたりがコピーされたらそら問題だろうからな。 >Copyを実装する型の変数にはそもそも所有権が存在しないということかな。 copyされたら所有権がないとかめちゃくちゃだな。int値だって共有されるかどうかはかなり問題だっての。
800 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 01:23:08.03 ID:Ie+ZA5Wx.net] >>782 値が複製されることに異論は無いんだけど、彼は>>753 などで所有権が複製されると言っていて、そこがおかしい。
801 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 02:46:17.65 ID:TlrfCSTD.net] それ同一人物だぞ 複製オジは人格も複製分岐させる
802 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 09:41:57.74 ID:SQntNedJ.net] たとえ話って逆に理解を妨げることも多いよね(´・ω・`)
803 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 10:46:53.27 ID:VdD2swgy.net] 複製おじさんにも唯一役に立つチャンスがあるよ それはE0184の改善案を提案してRustの質向上に貢献することw しかし複製おじさんは妄想だけで改善が見られないから害でしかない
804 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 17:39:21.77 ID:L87aFEFb.net] 複製おじさん大人気だな 個人的には「所有権が分岐する」のほうが衝撃的だった
805 名前:デフォルトの名無しさん [2022/02/08(火) 18:04:38.67 ID:wY99dkVo.net] Rustの学習してるのですが、モジュールがどう使われるものなのかいまいち想像がつきません 他の言語でいう、スタティッククラスのような使い方になるのですか? クレート内部にはモジュールを通じてアクセスしてもらうような、アクセサーのような感覚でいいのでしょうか?
806 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 18:41:34.13 ID:7ZuunrUW.net] なんで所有権が複製分岐なんていう言葉を発明しちゃうんだろな 実際に所有権をツリー構造みたいなものでイメージしてるのかな
807 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 18:50:29.41 ID:Pp1mAPfQ.net] >>791 モジュールはコードのかたまりでnamespaceを構成するもの Javaならパッケージ、C#ならnamespace
808 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 20:18:25.32 ID:RxI0yA8a.net] 複製は値と所有権のペアがまるごと複製されるというイメージでわからなくもないが分岐は本当によくわからない
809 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 20:23:01.17 ID:SvZbCMDW.net] >>792 何事も正しく理解できないクセがついてて 同時に、そんな自分を客観的に理解できてないから 独自用語乱発になんの違和感もないんやろな
810 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 20:32:05.71 ID:SvZbCMDW.net] 複おじの悪いとこは反省が無いところ
811 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 20:41:11.90 ID:l2NSRb44.net] 複製おじさん自演認定連呼の人も大概だけどな 技術について語るスレなんだから個性を出すな与えるな
812 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:11:02.29 ID:4v8i4qWv.net] 変数毎のメタデータに所有権管理のためのフラグか状態変数があってその値も複製されるイメージだったんでしょ それを匂わせることを確か書いてた気がする 仮にそういう実装だったとしてもそのメタデータ自体は所有権じゃないんだけどね 複オジは反省して分岐して欲しい
813 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:15:39.64 ID:F0zgFFgG.net] >>784 Copyを実装する型の変数にも所有権は存在するぜ 使われるたびに複製されて別々の所有権になる 例えば借用ルールなどもそれぞれ個別に適用されるようになる
814 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:17:35.77 ID:HAxbJIeP.net] 複製おじさんホントに反省しないなぁ
815 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:36:36.51 ID:SvZbCMDW.net] 複おじはまずコテハンかトリップつけてほしい 名無しに紛れ込んでスレ荒らすのやめてほしい
816 名前:デフォルトの名無しさん [2022/02/08(火) 22:47:22.11 ID:NtAny2QZ.net] >>799 で合ってると思う私も何か勘違いしてる? もし違うならば正しい情報を知りたい
817 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:54:07.50 ID:DXXwh4pM.net] >>802 複オジいい加減にして!
818 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:05:22.58 ID:6pYzzNS7.net] >>803 指摘の中身が無いから何をどうすればいいか傍から見てさっぱりわからんのだが。
819 名前:デフォルトの名無しさん [2022/02/08(火) 23:17:16.63 ID:NtAny2QZ.net] >>804 それそれ おじとかオジとか言ってる人の書き込
820 名前:ンを遡って見ても中身がないかコピペばかり おじとオジをNGにすればよいのかな [] [ここ壊れてます]
821 名前:はちみつ餃子 mailto:sage [2022/02/08(火) 23:24:36.35 ID:d+fT+XiK.net] >>802 正しいよ。 >>799 で正しい。 値が複製されると同時にそれぞれが所有権を持つというのは根本的な原理そのもの。
822 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:33:11.39 ID:50t+w5HT.net] おや
823 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:35:38.19 ID:50t+w5HT.net] 「所有権が複製される」のではなくて、「値が複製されるとき、複製された値には新しい所有権が生まれる」と表現すべき、ってこと?
824 名前:デフォルトの名無しさん [2022/02/08(火) 23:37:06.33 ID:NtAny2QZ.net] >>806 ありがとう おじオジ連投の人はNGにします
825 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:45:07.26 ID:Gazi17ea.net] 単なる揚げ足取りでしょ 本人もよくわかってないと思われ
826 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 00:09:26.69 ID:hQLH/4Iv.net] はちみつ複製オジは自演するのいい加減して!!
827 名前:デフォルトの名無しさん [2022/02/09(水) 00:48:50.88 ID:Th41z547.net] >>799 ,802,806 799は言葉足らずだと思う。 >>808 のがより合ってる。
828 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 01:28:22.38 ID:G66vCctx.net] あちこちでrustおじさんが暴れてるんだけどこのスレでも暴れてんのな
829 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 07:46:27.70 ID:MYXFjZ5a.net] >>808 その2つの解釈に何の違いがあるのってことだよな
830 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 08:16:52.91 ID:RoPbijrN.net] 論理性がない、客観性もない、実績もないのに上から目線の奴いるよね 素人相手にマウント取りたいアフィブロガーやアフィチューバーの類なんだろうけど
831 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 08:33:26.39 ID:XHPTdDLm.net] >>812 「言葉足らず」だっだという事にしたいのねw
832 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:00:04.34 ID:v0CQAsq5.net] 所有権を実装の観点からだけ見た場合はCopy型に所有権は(設定されて)ないと考えるのは妥当 説明用の概念として見た場合はshared referenceを除くCopy実装型にも所有権があってコピーされた際にその値に対する新たな所有権が発生すると考える方が妥当 公式は基本的に後者
833 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 15:18:47.99 ID:06jFMmW0.net] >>808 「所有権が複製される」という言い方は 単なる表現の問題として矮小化されるものではなく所有権という概念を根本的に誤って解釈してるのが大きな問題 それを吹聴するのはRust入門者の学びを妨害する行為なので叩かれてる
834 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 18:04:35.96 ID:WRBpfbxt.net] >>818 所有権という概念はどう解釈すべきなの?
835 名前:デフォルトの名無しさん [2022/02/09(水) 18:57:48.48 ID:Th41z547.net] >>819 辞書で調べたら?
836 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 19:23:18.18 ID:WRBpfbxt.net] 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 辞書的な定義ともまた違うようだ
837 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 19:30:35.55 ID:WRBpfbxt.net] TRPLの説明では take ownership という表現も登場するし辞書的な意味で ownership が使われているのでルールのことを指すだけではないようだ
838 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 19:43:45.64 ID: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 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 20:01:24.42 ID:WRBpfbxt.net] aという変数が持つ1という値とそのownershipがまとめて複製されてbに渡されると思えば、owenershipの複製という言葉も不自然ではないように思う 複製といいつつ own する値や owner となる変数が異なることに違和感を持つ人がいるのもわからんでもないが、 この構造は Box<T> の clone と同じなので、 clone を複製と呼ぶのであれば、 ownership も複製されるものとして間違いではないと思う 初学者向けの説明として適当かという議論は別途必要だとは思うけども
840 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 20:11:57.38 ID:Sh3dorK1.net] それは単に値のコピーですやん 値が複製されてるだけですやん bは複製された値のオーナーになってるだけですやん aの所有権はどこにも複製されてないですやん
841 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 20:45:07.16 ID:y0eUGeWz.net] >>824 > 値とそのownershipがまとめて複製されてbに渡されると思えば その仮定が偽。
842 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 20:46:37.31 ID:y0eUGeWz.net] ていうか仮定にすらなってない。論点先取。 https://ja.wikipedia.org/wiki/%E8%AB%96%E7%82%B9%E5%85%88%E5%8F%96
843 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 20:47:07.42 ID:bzZIRbp2.net] >>824 Box<T>のcloneと同じなら どうしてownershipも複製されることになるの? 2つの繋がりがよく分からない
844 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 20:49:21.34 ID:vm2ezt88.net] >>827 なるほど こういうの論点先取と呼ぶのか 勉強になった
845 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:05:16.82 ID:uQPdms8/.net] オーナーシップの説明にオーナーシップを使っているのか なるほど論外だ
846 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:22:51.45 ID:DXyGa46n.net] 所有権をCopyするって書くのをやめて、値をCopyする、にしてくれればそれで済むのに、なぜ所有権の複製を正当化しようとするのか
847 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:42:23.99 ID:MYXFjZ5a.net] べつに値をコピせずに所有権だけコピーするとか言っているわけでもなし、そんなに問題かね?
848 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:52:08.47 ID:Sh3dorK1.net] >>832 正当性を訴えるのはやめたん?w
849 名前:デフォルトの名無しさん [2022/02/09(水) 21:58:09.12 ID:Th41z547.net] >>824 だからー、値が複製されて所有権が新規にできるんだってば
850 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:58:48.91 ID:p5i5ajWp.net] let a = 1; は値1の所有権をaが持つということ ここでその値1の所有権を複製してしまうと、同じ値の所有権を持つ人が複数存在してしまうことになる let b = a; で実際に起きるのは、値1のコピーとして値1'を生成し、その所有権をbに割り当てている 値1と値1'は数値としては同じに見えるとしても違う値であって それぞれ別々に所有権がある 1'の所有権が1の所有権の複製である、という理解は 権利書をコピーして記名欄だけ書き換えるみたいな イメージなのかもね 実際にはその記名欄が所有権の全てであって、 複製する部分というのは存在しない
851 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:01:53.64 ID:pUgNKLbu.net] Copy実装型にも所有権はあって借用ルールに従う そして使われる時に値と所有権は複製されて別々の値と所有権になる そのため借用中だと複製できない let mut a = 123; let a1 = &mut a; let b = a; *a1 = 345; println!("a={a}"); println!("b={b}"); 例えばこのコードは借用中のため複製できずコンパイルエラー
852 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:02:09.07 ID:p5i5ajWp.net] 複製するという言い方は、複数の権利者が (一時的にでも)存在し得るという理解につながるので 単に言い方の問題ではなく避けたほうがいいと思う
853 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:06:52.22 ID:f/eR1VAb.net] どうでもいいならそれでいいんだけどね 中身の無いどうでもいい話をしましたってことで
854 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:10:36.37 ID:zSJbpp9s.net] >>836 そういうことか! 値だけなら複製できてもよいのに 値と所有権が複製されるために借用中だと複製できないわけか
855 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:23:03.85 ID:pUgNKLbu.net] その通り だから「(所有権と関係なく)値が複製されて、その値に新たな所有権が生じる」よりも 「値と所有権が複製されて、別々の値と所有権になる」の方がRustを正しく理解できる
856 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:24:43.45 ID:HWZXFj3+.net] wwww 複製オジのエクストリーム解釈で自演してもモロバレやでwww
857 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:35:06.54 ID:MYXFjZ5a.net] >>835 現実世界から借用した用語は多いけど、意味まで完全に同じとは限らないからその議論は無意味だね。 そもそも現実世界の「複製」は「同じものを新しく作ること」だしw
858 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:35:22.01 ID:oiWhDOci.net] OwnershipのルールとReferenceのルールが整理できてないんだね 分かった気にならずに一からやり直したほうがよさげ
859 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:47:52.82 ID:RvxtckJm.net] >>836 めちゃくちゃな解説でびっくり!! 複製おじさんはこのレベルだったか
860 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:55:19.94 ID:zSJbpp9s.net] >>844 僕は>>836 の説明で納得した そして実際にコンパイラエラーも確認した 君がそれを違うと言うならば どの部分がどういう理由でどのように違うのかを皆に示さなければならないと思う
861 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:56:27.31 ID:qfxIxGcm.net] >>836 それはmut借用中の値は使用禁止(コピーのために値を読み取るのも当然禁止)ってRustの基本ルールに違反してるってだけで 所有権の複製なんて新たな概念を持ち出す必要はないと思うが 実際エラーメッセージもそう書いてあるし
862 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:03:08.10 ID:pUgNKLbu.net] >>846 借用中の値が使用禁止は所有権が伴っているからこそ生じるルール だから「(所有権と関係なく)値が複製されて、その値に新たな所有権が生じる」よりも 「値と所有権が複製されて、別々の値と所有権になる」の方がRustを正しく理解できる
863 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:11:40.68 ID:qfxIxGcm.net] 複製派の人って複製元の所有権と複製先の所有権の 共通部分はなんだと考えているの? 流石に共通部分が全くなければ複製とは言わないよね?
864 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:20:26.95 ID:pUgNKLbu.net] >>848 同じ型で複製の直後の値が同じものに対する所有権 全く異なるものに対する所有権が新たに生じるわけではない 所有権も複製されている ちなみに現実のものに例える話はナンセンス なぜなら現実世界では土地の所有権だけでなく土地自体も複製できないのだから
865 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:23:34.30 ID:DXyGa46n.net] じゃあ「所有権」って言葉を使うのもやめることを提案してみたら?
866 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:30:03.48 ID:kQ1Azr/o.net] >>849 土地は複製できないけどそれの何が問題なの? 値として見るならCloneじゃない型と同じじゃないの?
867 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:33:43.18 ID:Av5orTrB.net] >>848 これ知りたいね 単に引っ込みがつかなくなってるのではなく 真剣に複製されると思っているのであれば 何らか共通部分があるんだろうから
868 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:36:33.39 ID:qfxIxGcm.net] >>849 そうすると所有権という情報には、型と値が含まれてるってこと? その場合、値の変更は所有権の変更を伴うと考えている? また、型と値が同じものはたくさんありうるけど、それらの所有権を区別するものはなに?
869 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:36:49.81 ID:zSJbpp9s.net] リアルな世界では土地もその所有権も複製できないけど こちらの世界では値も所有権も複製できる と考えるだけで矛盾なくRustを理解できると思います そこに矛盾はありません
870 名前:デフォルトの名無しさん [2022/02/09(水) 23:38:50.10 ID:IW3Xziq4.net] こまけえこたあ良いんだよ!! コンパイラ黙らせた奴の勝ち!!
871 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:41:48.23 ID:MYXFjZ5a.net] >>852 それぞれ固有の値を持たないのであれば全部同じ「所有権」
872 名前:ナは? [] [ここ壊れてます]
873 名前:デフォルトの名無しさん [2022/02/09(水) 23:48:17.20 ID:Th41z547.net] >>847 >「値と所有権が複製されて、別々の値と所有権になる」 別々のものになってて複製? 言ってて変だと思わんの?
874 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:49:17.89 ID:DXyGa46n.net] そもそも発端は入門者向けドキュメント >>486 にて、「所有権の複製(コピー)」とかいう言葉が出てきてこれではダメだ、っていうのが発端だからね 入門者向けドキュメントなんだから、正しい言葉で、正しく伝わる表現をしてほしいのよ
875 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:50:31.60 ID:MsecEarl.net] 結局のところ元の記事にあったように 「所有権とは、文字通り変数が値を所有できる権利のことです。」と間違って捉えてるってことだろうな
876 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:56:24.02 ID:pUgNKLbu.net] >>858 それは正しいだろ 少なくともその解釈でRustの仕様と矛盾する点は何もない
877 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:57:32.97 ID:wC50dlGN.net] >>856 ん、これどういう意味?
878 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:59:13.88 ID:MYXFjZ5a.net] >>861 Unit型みたいな。
879 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 00:04:56.40 ID:ERwpat+E.net] 土地は複製できないって主張もよくわからなくて 例えばコピー機は別に原子レベルで複製しているわけでもなく 人間が見て同じに見える程度に見た目を再現してるだけなわけで 同様に土地だって同じ形状に造成できるわけじゃん だから複製というときにはオリジナルのどこを再現したかが重要で 何が共通部分で何が差異なのかをはっきりしてほしい
880 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 00:06:24.62 ID:TkQE8lES.net] >>857 複製ってのがそもそも別のものを作ることなんだが
881 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 00:39:11.50 ID:lkU+MWHi.net] 所有権っていう"もの"がある訳じゃないよ?
882 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 01:01:15.29 ID:ZN2u8Rs1.net] リソースの所有者はリソースを解放する責務がある 主としては値が変数に束縛されることで所有の関係が作られる このへんをいろいろひっくるめて所有権の概念になるわけで、こういった概念である「所有権」そのものを複製したり作成するというのは、やはり言葉としておかしい 束縛関係を複製とか言われても意味わからん
883 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 01:05:28.97 ID:TkQE8lES.net] ここで"もの"かそうでないかを区別する意味ってある?その場合の"もの"ってなに?
884 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 02:44:56.84 ID:rtSKPHyc.net] 所有権とは所有にまつわるルールのことというのはTRPLに書いてある通りだと思うんだが take ownership など、所有権という物をやりとりしているように読める文言はどう解釈すれば良いんだ?
885 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 03:18:42.60 ID:748mZL+w.net] 所有権の話はもう禁止してくれ、唾飛ばしながら「ワイが一番所有権分かってるぞ!」とかほんまどうでもいいわ コンピューターサイエンス学科出でもないのに、もう駄コードを書く仕事に戻れ
886 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 04:10:06.01 ID:ZV1iYxPB.net] >>868 が言ってる通り公式ドキュメントと矛盾がないように書くべきでしょ そうすると、copyするのはvalueであって、ownershipはcopyしない ownershipはtakeしたりtransferするもの >>866 の最初に書かれてることは良いけど、そのあとは意味不明
887 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 05:39:51.83 ID:LZ4lXgTU.net] この自演おじさん、そこらじゅうで同じ芸風で荒らし回ってるから本当にタチ悪い。
888 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 07:56:52.23 ID:B7Nnq//K.net] 結論: 「所有権の複製」は根拠の無いオレオレ用語であり rust公式による定義は今回も一切示されなかった でオシマイの話
889 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 08:16:17.16 ID:lkU+MWHi.net] このおじさん普通に統失だと思う
890 名前:デフォルトの名無しさん [2022/02/10(木) 09:03:54.77 ID:o2ECnsWv.net] >>870 これが正しい
891 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 10:20:54.50 ID:E3cwpb32.net] >>868 take ownershipのownershipは”もの”じゃないよ もうちょっと英語勉強したほうがいいんでは?
892 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 12:39:37.06 ID:JVrcL5p7.net] >>875 理由を言わず間違ってるとだけ指摘して勉強した方が良いとマウントとってくるいつもの人だ 反論できないから空っぽの指摘しかできないのかな
893 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 12:43:51.26 ID:tTxcUdMu.net] unixのファイルシステムの権限周りの継承とかその辺とごっちゃになってんのかね? どうして所有権をコピーみたいな話が出てきたのかわりと謎
894 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 14:41:33.57 ID:3wQKSQe5.net] 謎だよな C++から来てるわけでもないし どこから来た発想なんだろう?
895 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 16:06:58.32 ID:mDz1Cqyx.net] >>876 説明してもらっても聞く耳持たないから もう理由は教えないみたいなことを言われてなかったか?
896 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 16:38:55.18 ID:rtSKPHyc.net] >>879 その説明へのレス番号貼るだけでもいいよ
897 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 17:36:51.53 ID:jQfqixkL.net] 所有権ルールと参照ルールを混同してたり 所有権が複製される構造はBox<T>のcloneと同じと言ってるところに 勘違いのヒントがありそうだか皆目検討がつかない 誰か解読してくれ
898 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 18:29:19.19 ID:1jbJS/Bn.net] 人格複製ニキの目的って何なんだろな
899 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 21:15:53.35 ID:HYxEyueN.net] 所有権の複製wwwww
900 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 21:16:13.39 ID:lQNRE6Xh.net] はちみつさんに直接聞いてみたら?
901 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 21:17:20.02 ID:lQNRE6Xh.net] >>882 >>884
902 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 23:25:06.23 ID:3aizDYBf.net] ここまで見てる限りどっちでもOKな話だな 値と所有権が「!Copy型は移動」「Copy型は複製」との説明でもRustの理解に支障がないのも事実 一方で現世界にない「所有権の複製」という表現に違和感を持つ人が存在することも理解できる ただし後者はあくまでも心の内なる話だから前者を崩せない限り不利っぽい
903 名前:デフォルトの名無しさん [2022/02/10(木) 23:34:31.44 ID:o2ECnsWv.net] >>886 いや、>>870 で正しいの書いてくれてるのに、公式でもそうなってるのに何故に頑なに所有権の複製を広めようとしてるのよ笑食べて
904 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 00:20:49.53 ID:05KWrNRV
] [ここ壊れてます]
905 名前:.net mailto: 語感には個人差があるからな 個人的には「複製」といえばCopyじゃなくCloneだし、Cloneなら「所有権の複製」もぎりぎり許せる Copyを無理やり日本語にするなら「複写」かな Copyの何たるかは https://doc.rust-lang.org/std/marker/trait.Copy.html で十分説明されてると思う >>881 「ファイルの所有権がある⇒ファイルにアクセスできる」 の類推で 「変数(値)の所有権がある⇒変数(値)にアクセスできる」 と誤解されるケースはたまにみかける これは用語(訳語)の問題でもあるから多少は仕方ない [] [ここ壊れてます]
906 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 00:26:11.55 ID:jgApYu5Z.net] Rustの公式ドキュメントを調べると "copy of the value" という表現はたくさん出てくるが、 "copy of the ownership" のような表現は見つけられない おそらく公式ドキュメントでも "copy of the ownership" みたいな言葉が使われそうになったときは意図的に排除されてるんだろう もし "copy of the ownership" みたいに変更しても問題ないと思うなら、公式ドキュメントのリポジトリでそういうふうに提案してみてくれよ Contributionのガイドを参考にコミュニティに書いたり、GithubでPull Requestするだけだからさ https://rustc-dev-guide.rust-lang.org/contributing.html
907 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 01:40:58.50 ID:3Ka4+NQm.net] ownership の take や transfer という言葉が出てくるのは !Copy な値についての説明で、 Copy な値については ownership 絡めて説明されてないよね ownership rule 自体は全ての値に適用されるから本来は Copy な値の ownership についてとうルールが適用されるかという説明はあった方が良いかもね 元々の初学者向け記事ではTRPL英語版にない部分の説明をするにあたって所有権の複製という用語を発明したわけだけど どう説明するとわかりやすいんだろうか
908 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 01:48:31.89 ID:+uMSd1hh.net] >>886 >Rustの理解に支障がないのも事実 めちゃくちゃ支障が出てますやんw 所有権が複製されると思ってるからRustの基本ルールが理解できない >>836 所有権が複製されると思ってるからThe Bookの意味が取れない >>868
909 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 01:57:15.41 ID:Bozzm6u4.net] >>888 Rust的には「変数(値)の所有権がある」という表現が既におかしいぞ
910 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 08:08:57.43 ID:pt0GtJjK.net] >>890 > 元々の初学者向け記事では(中略)所有権の複製という用語を発明したわけだけど オレオレ用語を初学者に平気で刷り込んで平気ならば > どう説明するとわかりやすいんだろうか 今後一切あらゆる場所で説明などしないでほしい
911 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 08:18:36.04 ID:pt0GtJjK.net] 平気すぎた(ノ∀`)アチャー
912 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 08:49:57.52 ID:IHS0l4KB.net] 個人が複製を分かりやすいと思うのは自由だけど 初心者に広めるのはダメだと思うがな もっと明らかに初心者向けの例え話とわかるような用語ならともかく いかにも公式の技術用語っぽい見た目をしてるわけで これを知った初心者がもっと深く知りたいと思ったときに ググっても全く情報は出てこないし、誰かに質問しても「なにそれ?」ってなる 少なくとも公式の説明に沿った言い方なら、それで理解してる人が 大勢いるから、そういった問題は生じない
913 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 08:58:58.08 ID:WRuOVQdn.net] 自分の理解不足を何で公式の落ち度みたいにすり替えてるんだ。間違いを認めたら死んじゃう病なの?
914 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 10:27:57.19 ID:2FzZhGyg.net] >>881 Box<T>が出てくるあたり所有権を値へのポインタ的なものとして考えてるのかもな まあそれでも複製はされないからイミフには変わりないんだが
915 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 11:14:45.52 ID:zZVxGVeC.net] 勘違い勘違い言うけど>>808 以上の話じゃないように思うんだが。
916 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 11:24:34.62 ID:3Ka4+NQm.net] 自分も>>808 で良いと思うけど公式の説明と表現が同じになってるかは気になる
917 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 11:38:14.49 ID:MSfgatap.net] >>808 >>「値が複製されるとき、複製された値には新しい所有権が生まれる」と表現すべき だからそれが間違っている 値には所有権は無い 入れ物に対して所有権がある 例えば&mutはその入れ物に対する書き換え可能な参照つまり所有権の借用 >>808 を肯定する連中はRustをわかっていない
918 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 11:42:56.32 ID:UuEYjDqs.net] 複製オジが遂に撤退戦をはじめたかw なんで所有権が複製可能だと思い込んだのか説明してくれれば 他の人の役に立つのにな
919 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 12:01:57.67 ID:3Ka4+NQm.net] >>900 「入れ物に対して所有権がある」も微妙な表現で 「入れ物となる変数が複製された値の所有権を持つ」の方が適当だと思うけど、どう思う?
920 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 12:06:36.51 ID:IlhJUkFw.net] 流れぶった切ってすまんけど質問 「借用」と「参照」の違いってなんなん?
921 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 12:07:10.38 ID:MSfgatap.net] >>902 値は書き換わる物 だから値に所有権はない 入れ物に対して所有権がある 解放する対象も入れ物であってその値ではない
922 名前:デフォルトの名無しさん [2022/02/11(金) 12:14:00.85 ID:6AYXkq/G.net] >>904 c言語のfreeって明らかに値を解放してるように思えるんだが freeした値はその後使えないがその値を入れていた変数はその後も使える
923 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 12:21:34.19 ID:zZVxGVeC.net] ownerに対する所有権があるような話になってよくわからんね。
924 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 12:25:48.71 ID:vAEawTbN.net] >>903 参照は変数の種類で、借用は参照の使い方とか参照同士の関係とか状態のこと。 明
925 名前:mに書かれていないけど、そのへんを意識してThe Bookのreferences and borrowingあたりを見ると良いよ。 [] [ここ壊れてます]
926 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 12:44:48.12 ID:MSfgatap.net] >>905 C言語のfreeでも入れ物を解放している 入れ物の中にある値を解放しているわけではない そしてmalloc/freeで対象となる変数は入れ物を指している つまりその変数自体は一つ階層が異なりポインタである そのポインタ変数を書き換えても別の入れ物を指すようになるだけ 入れ物の中身が書き換わるわけではない
927 名前:デフォルトの名無しさん [2022/02/11(金) 13:17:26.35 ID:6AYXkq/G.net] >>908 いいえfreeは入れ物にある値を解放しています 入れ物を解放しているわけではありません そもそもfreeに限らずc言語の関数はすべて値渡しなのでfree(入れ物)と書いたらfreeには入れ物にある値が複製されたのが引数として渡されて入れ物に関する情報は一切渡されません c言語の関数が操作できるのはこの複製された値です もし入れ物を関数funcで操作したい場合はfunc(&入れ物)と書きます この場合も&入れ物という値が操作されます 繰り返しになりますがc言語はすべて値渡しなので決して関数に入れ物を渡して解放するなどと言った操作をすることはできません 解放されるのは値です 入れ物の参照を関数に渡すには&入れ物という表記を使いますが&入れ物も値です これは参照呼びと言われますがただの値渡しです あなたは明らかにプログラミング初心者なのでこのレスが理解できるようになるまでこのスレには書き込まないでください
928 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 13:27:03.79 ID:MSfgatap.net] >>909 それは君が抽象的なセマンティクスとポインタ等を介するコードの区別が出来ていない初心者だから理解できないのだろう Rustではこの違いが特に大きいのでその区別を付けることが非常に重要
929 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 13:43:08.13 ID:UrRCo2Y3.net] >>900 これは同意 何が何を所有してるのかという主語目的語を意識せずに フワッと分かったつもりになってるからなんだろうね
930 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 13:45:34.76 ID:HZ9j/fjC.net] 次スレはワッチョイ付けたほうが良さそうですね
931 名前:デフォルトの名無しさん [2022/02/11(金) 14:02:29.28 ID:m8Gesa51.net] 俺は初心者なのでフワッとすら分かっておらず、このスレでは一体何が議論になっているのかよく分からない。
932 名前:デフォルトの名無しさん [2022/02/11(金) 14:04:16.80 ID:6AYXkq/G.net] >>910 別に抽象的なセマンティクスでもないよ 君が言っている「入れ物」でさえ操作的意味論的にはアドレスを表す単なる「値」として表現されていることを知るべきだね ちゃんと理論的にはどのように定式化されているのかを知らないで入れ物だとか言った自分の無知を埋め合わすために勝手に導入したオレオレキーワード使って他の人を困らせてる辺り一向に君は初心者から脱却できないと思うよ 「入れ物」(笑)なんかじゃなくて実際に使われているテクニカルタームを使うことから始めれば? 知らないの?
933 名前:デフォルトの名無しさん [2022/02/11(金) 14:05:22.34 ID:6AYXkq/G.net] 学術的に使われた用語だからテクニカルタームではないな
934 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 14:28:40.44 ID:m8Gesa51.net] 私は何も知らない。
935 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 14:35:23.81 ID:05KWrNRV.net] freeに渡すアドレス値を「入れ物」と呼ぶか「値」と呼ぶかでもめているように見える
936 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 14:44:41.81 ID:6Qn4bKwU.net] >>914 その理解はおかしいよ 例えば struct S(i32); struct SS(i32, i32); let i = 100; let s = S(200); let ss = SS(300, 400); let a = [500, 600, 700]; この時にあなたの理解だと各変数に入っている「値」はアドレスなの? もちろん生成コードにおいてスタック上のアドレスが用いられるのは事実だけど Rustというプログラミング言語のレベルではそのアドレスは出てこずに抽象的に捉えるべき話でしょう
937 名前:デフォルトの名無しさん [2022/02/11(金) 15:04:06.88 ID:6AYXkq/G.net] >>918 それらの変数にはすべてそれぞれの実体が入っています アドレスではありません 全ての「アドレス」は「値」ですがだからといって全ての「値」も「アドレス」であるとは言っていません まずは読解力を身に着けましょう もっと正しく理解をしましょう
938 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 15:18:23.74 ID:6Qn4bKwU.net] >>919 では、あなたの主張するアドレスはどこに出てくるの? let a = [1,2,3]; let v = vec![1,2,3]; どちらもアドレスではないですよね
939 名前:デフォルトの名無しさん [2022/02/11(金) 15:28:24.64 ID:6AYXkq/G.net] >>920 失礼しました 配列は先頭要素のアドレスが変数に格納されるでしょう これだけで済む話です 抽象化なぞそもそも必要とされる余地はありません
940 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 15:36:10.19 ID:H8NApfSl.net] 所有権を持つのは値じゃなく変数 これはいいよね オライリー本とかは少し違うけど 少なくとも公式は値が別の値を所有するとか 値が別の値の所有権を持つという考え方は採用していない で解放のほうだけど 解放する対象はメモリ領域であって値でも変数でも無いよね 便宜的に「変数(の指してるメモリ領域)を解放する」とか 「値(が格納されてるメモリ領域)を解放する」という言い方をすることがあるだけ
941 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 15:46:50.29 ID:MSfgatap.net] >>921 それも違う 配列の先頭要素のアドレスが変数に格納されているわけではない Rustではもっと抽象的なセマンティクスでプログラミングをするし配列の長さも持つ
942 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 15:47:39.62 ID:zZVxGVeC.net] 値に対する所有権を変数が持つってことなら>>808 は特におかしいとは思わないが? 逆に「入れ物」(変数?)に対する所有権とか言っている>>900 の方が理解しにくい。
943 名前:デフォルトの名無しさん [2022/02/11(金) 15:47:44.62 ID:6AYXkq/G.net] >>922 私は操作的意味論のモデルに乗っかって表現したまでです 操作的意味論ではメモリ領域を示すアドレスは値として表現されています ある特殊な操作的意味論で定義された理論をベースにしているRustでメモリ領域のことを値だと表現するのは間違っていないでしょう 逆に入れ物や変数だといった表現をこの文脈で使うのは言語道断かと思われます
944 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 15:51:44.74 ID:6Qn4bKwU.net] >>921 それは違いますよ そこでアドレスという考え方はしませんし、実装で見ても間違っています 例えばあなたの考えでは以下の4つの変数のうちアドレスとなるのはどれですか? struct S(i32); struct SSS(i32, i32, i32); let i = 100; let s = S(200); let sss = SSS(300, 400, 500); let a = [600, 700, 800];
945 名前:デフォルトの名無しさん [2022/02/11(金) 15:54:42.31 ID:6AYXkq/G.net] >>923 すいません さらに配列の長さも保持しているのならなおさら抽象化のレベルは下がりますよね? 自分が何を言ってるのかわかっておいでですか? もしかしてRustの抽象化レベルってCよりも下なんじゃないんですか?(笑)
946 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 16:01:23.79 ID:VlXZAIWT.net] なんでこのスレでは操作的意味論とC言語とRustをちゃんぽんして語ってるの? みんな器用だね?
947 名前:デフォルトの名無しさん [2022/02/11(金) 16:02:15.20 ID:6AYXkq/G.net] >>926 変数という用語も正しくはありません まず第一にRustでは束縛と呼ばれます 正しく理解してください それができないならばあなたはこれ以上スレに書き込まないでください ちなみに私がアドレスだと言っているものはあなたが変数だと言っている物です そもそもアドレスという表現も不適切なものですが悪しからず
948 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 16:21:36.51 ID:MSfgatap.net] >>929 ついに馬脚を現したな Rustでも変数(variable)と呼ぶことすら知らないのか もちろん束縛(binding)も狭義の代入(assignment)と区別するために用いるが そこでも束縛や代入の対象は変数である
949 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 16:32:43.51 ID:6Qn4bKwU.net] >>929 変数という用語で合っていますよ 早く>>926 の質問に答えてください Rustでアドレスという考え方をするあなたが間違っていると明白になりますから
950 名前:デフォルトの名無しさん [2022/02/11(金) 16:36:33.29 ID:6AYXkq/G.net] >>930 Rustの用語では束縛の対象は名前です 変数ではありません Rustが便宜的に変数と使っているのは説明のためにユーザーにRustなりに歩み寄っているからです あなたが「入れ物」だといったよくわからないキーワードを導入したのと基本的には理由は同じです 操作的意味論では束縛の対象は変数ですが代入の対象は変数ではありません メモリ上のある位置です 便宜的に言えばアドレスです 再三の忠告になりますが正しい理解が出来ないのであればスレに書き込まないようおすすめします
951 名前:デフォルトの名無しさん [2022/02/11(金) 16:45:09.37 ID:6AYXkq/G.net] >>931 i,s,sss,aがアドレスです まずは>>929 を理解する読解力を身に着けてください > Rustでアドレスという考え方をするあなたが間違っていると明白になりますから 逆にアドレスという考え方をしないのですか?(笑) 手続き型言語の重要な機能ですよ? ocamlなどと言った非純粋な関数型言語にすらありますが(笑) アドレスという考え方を他の言語利用者が使うのを許せないのであればこの機能がないHaskellなどをご利用してくださいとしか・・・(笑)(笑)(笑) Rustには触れないでくださいね😂
952 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 16:50:42.53 ID:6Qn4bKwU.net] >>933 残念ながら>>926 の変数i,s,sss,aに入っているのはアドレスではありません あなたが完全に間違っています
953 名前:デフォルトの名無しさん [2022/02/11(金) 16:56:53.29 ID:6AYXkq/G.net] >>934 変数i,s,sss,aにアドレスが入っているなどと言ってません 読解力も理解力もないんですね i,s,sss,aは変数ではなくてアドレスという名の値だって言うことを理解できないとあなたはいつまで立っても初心者のままですよ??(笑)
954 名前:デフォルトの名無しさん [2022/02/11(金) 16:59:09.28 ID:6AYXkq/G.net] >>934 間違っているのはあなたです これで明白になりました
955 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:02:29.35 ID:79iMdFI4.net] なんなんだよこのスレはw
956 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:03:16.70 ID:WRuOVQdn.net] 間違いを認めたくないおじさんが延々と言い訳するスレ
957 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:07:13.91 ID:6Qn4bKwU.net] ID:6AYXkq/G氏は >>919 で「それらの変数にはすべてそれぞれの実体が入っています アドレスではありません」 >>921 で「失礼しました 配列は先頭要素のアドレスが変数に格納されるでしょう」 これで全く理解できていないことが露呈してからさらに暴走中ですね >>935 Rustにおいてそれらの変数i,s,sss,aはアドレスではありません 抽象的な考えが苦手ですか?
958 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:13:25.21 ID:4QDnJV3g.net] 即値とか知らなさそう
959 名前:デフォルトの名無しさん [2022/02/11(金) 17:19:13.64 ID:6AYXkq/G.net] >>939 Rustを含めアドレスという言語機能を持っている手続き型言語で変数と呼ばれているものはただのアドレスです Rustでいう値が束縛された名前は操作的意味論における変数に対応していてあなた方がいう変数とは操作的意味論におけるアドレスを表現するものの対応物です 本来変数とアドレスは同義のものでc言語の規格で完全にポインタとアドレスが同じものとして扱われ区別されないのと同様に区別する必要性がないものです 現にポインタもアドレスも変数も操作的意味論では区別されていません このあたりを理解できない限りID:6Qn4bKwUは永遠に初心者のままのようだ🤣
960 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:26:17.96 ID:7ybYem6W.net] cのfreeは値「で」解放してるだけなんだけどなw int *p = malloc(sizeof(int)); // 仮に p = 0x5617ae143260とする free((int *)0x5617ae143260); // 値でfreeできる 値をfreeしてるわけでもなく 入れ物を解放してるわけでもなく 値をfreeに与えてやってあとはむこうでうまくヒープを解放してくれる ヒープ解放のきっかけを値で指定してるだけ
961 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:40:06.20 ID:WRuOVQdn.net] 内部的には構造体なんだっけか
962 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:42:17.21 ID:VlXZAIWT.net] >>941 横レスだけど 仮にこの世にコンパイラも実行するマシンもなくて、Rustのコードだけが紙に書かれてたとして それでもi,s,sss,aは変数ではなく、アドレスという名の値だって言い張るの? 具体的にはどういう値なの?
963 名前:デフォルトの名無しさん [2022/02/11(金) 17:45:23.35 ID:6AYXkq/G.net] >>944 さあ? 実行するマシンが決まっているなら値はなんでもいいんじゃないんですか? それこそ文字でも記号でもなんでもいい その辺りの議論は操作的意味論の教科書で論じられていますよ
964 名前:デフォルトの名無しさん [2022/02/11(金) 17:45:40.46 ID:6AYXkq/G.net] 決まっていないなら
965 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 17:56:17.41 ID:VlXZAIWT.net] >>945 なんでもいいの? 書かれているコードが>>926 だとして、 iの値が0x5617ae143260で aの値が0x5617ae143260でもあなた的には問題ないってこと?
966 名前:デフォルトの名無しさん [2022/02/11(金) 18:02:50.44 ID:6AYXkq/G.net] >>947 新しいアドレスにはすでに使われているアドレスの値を使ってはいけないという制約は操作的意味論でも目にするでしょう あなたが熱心に勉強するタイプの人であったなら私のレスを待たずにして自分で調べて自分で疑問を解決していただろうに残念ながらあなたは受動的にしか学習せず一生初心者のままに留まる人間なんでしょうね
967 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 18:14:14.82 ID:6Qn4bKwU.net] >>942 その通りで、単なる識別子としての「値」で解放しているだけだね そしてアロケーションライブラリによってはその「値」がアドレス自体でないかもしれない、と C言語では抽象レベルと具体化レベルがほぼ一致のためアドレスが使われアドレスで考えてもいいけど 多くのプログラミング言語ではその部分は実装レベルに隠蔽されているからアドレスで考えてはよくないね で、話を戻すと、大元の話ではその「『値で』解放している」かどうかではなくて 「『値を』解放している」のか、「なんらか抽象的な『空間を』解放しているのか」の話だったと認識してる
968 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 18:27:09.56 ID:VlXZAIWT.net] >>948 ごめん、プログラミング歴20年超えてるんだわ まあ>>947 は意地悪だったけど、何が言いたいかっていうと、 有効なアドレスってのは実行時するかコンパイルしないことには定まらないでしょって話 でも言語仕様っていうのは、コンパイラが存在しなかったとしても存在し得るんだわ で、他の人は言語仕様の話をしてるけど、一人だけ変数じゃなくてアドレスという値だって言い張るから、 マシンが存在しない状態だとどういう値なのよ?って思ったのね 意地悪なこと書いてごめんよ
969 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 18:35:25.52 ID:7ybYem6W.net] おまえらって基本マジメなんやろな何か 意見の違いはあれどそんなに嫌いじゃないわ (ただし複製おじは除く)
970 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 18:36:53.23 ID:Y4IhV391.net] 最適化で消えるようなもんが言語仕様なわけ無いですもんなー
971 名前:デフォルトの名無しさん [2022/02/11(金) 18:39:18.92 ID:6AYXkq/G.net] >>949 closeシステムコールはfile descriptorをcloseする file descriptorでcloseするとは誰も言わない file descriptorはファイルを参照する値であるがファイル自体ではない それと同様freeはアドレスという値を解放しているのであってアドレスという値で解放してるとは誰も言わない 「値で解放するの表現が正しい」(笑)って言う意見に耳を傾けるのはまだあなたが初心者を脱することができていない証拠 https://linuxjm.osdn.jp/html/LDP_man-pages/man2/close.2.html こういうサイトにも「close() は、ファイルディスクリプターをクローズする。」 とある
972 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 18:51:10.18 ID:XGwZjA15.net] >>951 真面目すぎてひねくれたパターンだろうな 出世もしないで片隅でコード書いてる人よくいるし
973 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 18:51:59.28 ID:6Qn4bKwU.net] >>952 その最適化で消えるようなもんが言語仕様 例えばRustでは言語仕様で通常の参照ポインタはnullにならない nullを言語仕様として扱わずNone値を持つOptionを導入にしている そしてヌルポの先へアクセスすることを完全に封じている、というのが言語仕様 ところがその抽象レベルを離れて実装レベルになると話が違う 愚直にOptionを実装すると参照ポインタ以外にメモリを余分に使う そこで最適化によってNone時は参照ポインタの実体アドレスを0すなわちnullポインタとしている これでOption分の余分なメモリを使わずに済ませている つまり言語仕様としての抽象化されたレベルと 実際にアドレスがどうなるかという具体化されたレベルは常に区別しないといけない Rustプログラマーとしては実装でどうなるかは知らなくてもプログラミングできる そしてまずはその抽象的なレベルのみ意識して学習すべき
974 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 18:58:14.24 ID:GB4mq7wX.net] >>955 こりゃ失敬。なるほど確かにそうだわ。適当な事言いましたわ
975 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 21:48:20.48 ID:Q/4j6JIT.net] >>925 まーたオジさんいい加減なこと書いてるねw 操作的意味論ではvariableとlocationとvalueを明確に区別するのが一般的 メモリ領域のことを値だと表現するのはRust的にも操作意味論的にも間違い
976 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金)
] [ここ壊れてます]
977 名前:21:52:44.45 ID:38j0NNSx.net mailto: >>941 >Rustを含めアドレスという言語機能を持っている手続き型言語で変数と呼ばれているものはただのアドレスです 全く違うんですけどwww 都合悪くなってスレ流したいのかもしれないが とりあえず嘘八百でスレ埋め立てるの辞めてくれ [] [ここ壊れてます]
978 名前:デフォルトの名無しさん [2022/02/11(金) 22:35:25.65 ID:6AYXkq/G.net] >>957 操作的意味論ではそれ以上簡約できない項を値と呼びます varもlocもどちらもそれ以上簡約できないので値です 試しにTaPLで値ががどのようにBNFで帰納的定義されている集合なのか確認してみたら? あなたが理解していないだけでは?
979 名前:デフォルトの名無しさん [2022/02/11(金) 22:39:32.55 ID:6AYXkq/G.net] >>958 スレ埋めてるのはどちらかというとこのような無意味なレスをするあなたでは? 私は自分のレスが正しいと知っておりますのでどうぞ余計なレスを書き込まないでこのスレを延命してくださいませ
980 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 22:48:24.70 ID:6Qn4bKwU.net] 6AYXkq/Gを相手にしても無駄だから元の話に戻りましょう >>808 について自分の意見は ○「型のインスタンスに所有権がある」 ×「値に所有権がある」 ←値は途中で完全に置き変わっても構わないため× ×「変数に所有権がある」 ←変数はどんどん移動できて一時的な束縛にすぎないため× ×「アドレスに所有権がある」 ←アドレスは関数へ渡したり返したり途中で変わるため×
981 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:10:21.43 ID:g7TOVgtJ.net] >>961 「所有権がある」という意味が「所有権を持つ」という意味であれば 「値の所有者は変数」だから「所有権を持つのは変数」だよ スコープを抜ける時に所有リソースを解放する責任というのかownershipを持つということ 型のインスタンス? 説明してもらわないと意味分からないな
982 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:19:43.49 ID:rRV0mw3H.net] >>961 > 値は途中で完全に置き変わっても構わないため 所有権というのは「後始末する責任」のこと。 内容が書き換えられることを許すのは所有権を手放しているわけではない。
983 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:22:41.86 ID:jgApYu5Z.net] >>961 > 「変数に所有権がある」 ←変数はどんどん移動できて一時的な束縛にすぎないため× 変数は移動できなくない? 何か別のことを言いたかったんかな? 変数が所有権を持つ、で良いんじゃないかな 値を変数に束縛するときに、変数が値を所有することになる そして変数が値を所有したままスコープアウトすると、値をdrop(解放)する
984 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:25:49.74 ID:jgApYu5Z.net] 「変数が所有権を持つ」よりも、「変数が値を所有する」のほうがいいか
985 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:27:09.03 ID:6Qn4bKwU.net] 主語と目的語を逆に違う意味に誤解されるとわかったので補足します ○「型のインスタンスに対して所有権があるor生じる」 ×「値に対して所有権があるor生じる」 ←値は途中で完全に置き変わっても構わないため× ×「変数に対して所有権があるor生じる」 ←変数はどんどん移動できて一時的な束縛にすぎないため× ×「アドレスに対して所有権があるor生じる」 ←アドレスは関数へ渡したり返したり途中で変わるため× >>962 プログラミング言語の分野で一般的に用いられるインスタンスです 型とインスタンスは一般的に1対多の関係になります (シングルトンでは1対1ですが) 言語によっては型をクラスと表現する場合もあるようですがRustではそんな狭い範囲ではなく全ての型が対象です >>963 そのように値は変わっていくものだから 値に対して所有権といっても曖昧さが残るでしょう だから不変でない値に対して所有権があるとの考えはよろしくない まだ>>964 の言う変数を持ち出したほうがマシ しかし変数との関係は一時的にすぎず所有権は別の変数へ移動していきます 所有権と常に1対1の関係にあるのは(型の)インスタンスです
986 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:32:51.77 ID:rRV0mw3H.net] >>964 変数が所有権を持つというのは変な解釈。 結果的にはそういう挙動ではあるんだが 値が変数に捉えられている間は寿命が継続されるというルールによって 変数のスコープと連動してるだけ。 所有権を持っているのはあくまで値。
987 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:37:03.65 ID:6Qn4bKwU.net] >>967 所有権を持っているのはインスタンスであって 値はそのときどきで変化するだけにすぎない存在だと思います
988 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:39:32.68 ID:rRV0mw3H.net] >>968 いいえ。 そんな定義はないです。
989 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:45:01.94 ID:MSfgatap.net] 俺が入れ物に対して所有権があると>>900 で書いたのも実質その型のインスタンスだ インスタンスという言葉を使うと面倒になりそうなので抽象的に型の入れ物とした いず
990 名前:黷ノせよ所有権の対象は値ではなく値が収容される入れ物orインスタンスだ [] [ここ壊れてます]
991 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:45:21.67 ID:rRV0mw3H.net] 実際のところ「値」と「インスタンス」の間にそんなに意味の差はないです。 特的の型を元に作られたということを強調するときにインスタンスと言うことはありますが、 どの値も型を持つのでインスタンスではない値などありはしません。
992 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:47:31.44 ID:6Qn4bKwU.net] >>971 インスタンスはその型の形をした器(うつわ)であり解放されるまで不変 値はその器(うつわ)に入った内容にすぎず可変
993 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:48:11.08 ID:rRV0mw3H.net] >>972 いいえ。 繰り返しますがそんな定義はないです。
994 名前:デフォルトの名無しさん [2022/02/11(金) 23:49:47.15 ID:3qua/k5E.net] >>967 >所有権を持っているのはあくまで値。 で、その値は何の所有権を持ってるのさ?
995 名前:964 mailto:sage [2022/02/11(金) 23:51:18.52 ID:jgApYu5Z.net] そもそも「所有権を持つ」ってのが苦しい 英訳すると "own the ownership" になってしまうが、そんな表現は公式ドキュメントでも避けられてるように思う 値が変数に束縛されるとき、その値を変数が所有することになる 変数をreturnしたり、変数を他の変数に代入するときには、所有権がtransferされることになる ここまでは良いでしょ 例えば、公式ドキュメントにもこう書かれてる https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html > Returning values can also transfer ownership. なので、強いて >>961 の中から選ぶなら変数が所有権を持つだけど、最初に書いたようにそもそも「所有権を持つ」が苦しいので、 「変数が値を所有する」とすれば良いと思う
996 名前:デフォルトの名無しさん [2022/02/11(金) 23:51:21.22 ID:3qua/k5E.net] >>965 >「変数が値を所有する」 これが正解。
997 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:51:57.38 ID:MSfgatap.net] >>973 皆がその点については定義がはっきりしないからこれだけ揉めてるんだろ 「そんな定義はないです」は反論にすらなっていない
998 名前:964 mailto:sage [2022/02/11(金) 23:53:29.17 ID:jgApYu5Z.net] ああ、別に「持つ」を必ずしも "own" で訳す必要もないね さっきから変なことばかり書いててすまんね、今日は冷静になっていったんもう寝る
999 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:54:02.65 ID:rRV0mw3H.net] >>974 値自身を後始末する責任をもってる。 所有権という訳語がよくないというのはよく指摘されることだが、 何者かが値を所有しているという誤解のもとになるからだ。 変数が所有権を持っていることにしたら 一時オブジェクトの所有権はどうなってんだって話になるだろ。
1000 名前:デフォルトの名無しさん mailto:sage [2022/02/11(金) 23:57:48.33 ID:6Qn4bKwU.net] >>975 >>976 そんな話は誰もしていないと思う 所有権は何に対して付随するのか生じているのかが論点 そして所有権が消滅するのは型のインスタンスが最後に解放される時 だから所有権と1対1の関係にあるのは(型の)インスタンスだと主張しています
1001 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 00:03:26.33 ID:mURtvSsP.net] >>972 > インスタンスはその型の形をした器(うつわ)であり解放されるまで不変 いいえ。 代入で内容が書き換えられる場合もあり、 そのときに drop が呼ばれます。 寿命の管理は値に付随します。
1002 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 00:19:59.58 ID:kNBFVDwU.net] とりあえずbookの 4.1. What is ownership? (ttps://doc.rust-lang.org/book/ch04-01-what-is-ownership.html) からOwnership Rulesの節を丸ごと抜いてきた(訳は適当) Ownership Rules First, let’s take a look at the ownership rules. Keep these rules in mind as we work through the examples that illustrate them: * Each value in Rust has a variable that’s called its owner. * There can only be one owner at a time. * When the owner goes out of scope, the value will be dropped. まずは所有権(ownership)に関するルールを見てみよう このルールを記憶に留めて以下の例示を読み進めてほしい ・Rustの各々の値(value)は所有者(owner)と呼ばれる1つの変数(variable)をもつ ・所有者は同時に1つしか存在しない ・その所有者がスコープからいなくなる時、その値は破棄される
1003 名前:デフォルトの名無しさん [2022/02/12(土) 00:26:03.97 ID:lHDa3hl7.net] >>982 これが正解
1004 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 00:26:42.42 ID:/iL1/Dd6.net] >>981 内容が書き換えられてdropすることはない 所有権と値は関係ない 値に付随するものではない >>982 に明記されているように所有権を持つ所有者は変数 所有者である変数がスコープから外れるとdrop
1005 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 00:31:23.69 ID:FSqSWy2H.net] >>982 だよなぁ。「入れ物」とか妙ちきりんな説明する人はなんなんだろう?
1006 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 00:37:10.88 ID:/iL1/Dd6.net] インスタンスというのも一理ある その型のインスタンスが作られてから解放されるまで一貫して一つの存在なのに対して 変数は次々と移り変わって行く乗り物と捉えることができる そしてインスタンスがたまたま束縛されている変数がスコープから消えると乗っていたインスタンスも巻き添えで消えると考えられないこともない
1007 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 01:06:37.82 ID:Q5zckJeE.net] >>980 スレ立てヨロ
1008 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 01:26:58.40 ID:aHobc4uM.net] 次スレ https://mevius.5ch.net/test/read.cgi/tech/1644596656/
1009 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 01:32:16.48 ID:/iL1/Dd6.net] >>988 GJ
1010 名前:デフォルトの名無しさん [2022/02/12(土) 01:58:18.50 ID:eWE5dZha.net] 横からすまんが、実際のメモリ上だと所有権ってどうなってるもんなの? >>982 にある仕組みからしたら・・・・メモリが確保されるのと同時に、併せて所有権情報(スタックへの参照か何か?)がメモリのどっか確保されるわけ? 俺、てっきりコンパイラへのただの指示だとばっか思ってたぜ
1011 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 02:19:56.25 ID:dWh4TlR2.net] 横からキターーー コンパイラの課すルールの話なので 所有権情報が実行時にメモリに確保されたりしないよ
1012 名前:デフォルトの名無しさん [2022/02/12(土) 04:01:34.21 ID:tNCVqmWf.net] まじか、そうなんだ
1013 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 06:46:04.75 ID:zeKxBusw.net] ワッチョイ無しか、次スレも荒れそう
1014 名前:デフォルトの名無しさん mailto:sage [2022/02/12(土) 07:47:32.16 ID:XghCcbPA.net] struct S; impl Drop for S { fn drop(&mut self) { println!("drop"); } } fn main() { S; } ↑じゃあこれは何が所有権をもってて何がdropさせてんの? インスタンス説のほうがまだシックリくる? 変数も所有権を持てるしスコープ終了で手放せる?
1015 名前:デフォルトの名無しさん [2022/02/12(土) 08:42:47.12 ID:4ZF6L5uh.net] >>961 お前が突っかかって来たんだろうが ガイジwwww
1016 名前:デフォルトの名無しさん [2022/02/12(土) 08:42:55.77 ID:4ZF6L5uh.net] うんこ
1017 名前:デフォルトの名無しさん [2022/02/12(土) 08:43:01.75 ID:4ZF6L5uh.net] まんげ
1018 名前:デフォルトの名無しさん [2022/02/12(土) 08:43:06.69 ID:4ZF6L5uh.net] ちんげ
1019 名前:デフォルトの名無しさん [2022/02/12(土) 08:43:39.79 ID:4ZF6L5uh.net] >>957 お前の負けやでwwwwwwww
1020 名前:デフォルトの名無しさん [2022/02/12(土) 08:44:18.55 ID:4ZF6L5uh.net] 無教養のガイジども阿鼻叫喚していて草wっwr ンゴwwwwwww
1021 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 96日 22時間 39分 19秒
1022 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています