Rust part13at TECH
Rust part13 - 暇つぶし2ch635:デフォルトの名無しさん
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の基本ルールに違反してるってだけで
所有権の複製なんて新たな概念を持ち出す必要はないと思うが
実際エラーメッセージもそう書いてあるし

862:デフォルトの名無しさん
22/02/09 23:03:08.10 pUgNKLbu.net
>>846
借用中の値が使用禁止は所有権が伴っているからこそ生じるルール
だから「(所有権と関係なく)値が複製されて、その値に新たな所有権が生じる」よりも
「値と所有権が複製されて、別々の値と所有権になる」の方がRustを正しく理解できる

863:デフォルトの名無しさん
22/02/09 23:11:40.68 qfxIxGcm.net
複製派の人って複製元の所有権と複製先の所有権の
共通部分はなんだと考えているの?
流石に共通部分が全くなければ複製とは言わないよね?

864:デフォルトの名無しさん
22/02/09 23:20:26.95 pUgNKLbu.net
>>848
同じ型で複製の直後の値が同じものに対する所有権
全く異なるものに対する所有権が新たに生じるわけではない
所有権も複製されている
ちなみに現実のものに例える話はナンセンス
なぜなら現実世界では土地の所有権だけでなく土地自体も複製できないのだから

865:デフォルトの名無しさん
22/02/09 23:23:34.30 DXyGa46n.net
じゃあ「所有権」って言葉を使うのもやめることを提案してみたら?

866:デフォルトの名無しさん
22/02/09 23:30:03.48 kQ1Azr/o.net
>>849
土地は複製できないけどそれの何が問題なの?
値として見るならCloneじゃない型と同じじゃないの?

867:デフォルトの名無しさん
22/02/09 23:33:43.18 Av5orTrB.net
>>848
これ知りたいね
単に引っ込みがつかなくなってるのではなく
真剣に複製されると思っているのであれば
何らか共通部分があるんだろうから

868:デフォルトの名無しさん
22/02/09 23:36:33.39 qfxIxGcm.net
>>849
そうすると所有権という情報には、型と値が含まれてるってこと?
その場合、値の変更は所有権の変更を伴うと考えている?
また、型と値が同じものはたくさんありうるけど、それらの所有権を区別するものはなに?

869:デフォルトの名無しさん
22/02/09 23:36:49.81 zSJbpp9s.net
リアルな世界では土地もその所有権も複製できないけど
こちらの世界では値も所有権も複製できる
と考えるだけで矛盾なくRustを理解できると思います
そこに矛盾はありません

870:デフォルトの名無しさん
22/02/09 23:38:50.10 IW3Xziq4.net
こまけえこたあ良いんだよ!! コンパイラ黙らせた奴の勝ち!!

871:デフォルトの名無しさん
22/02/09 23:41:48.23 MYXFjZ5a.net
>>852
それぞれ固有の値を持たないのであれば全部同じ「所有権」�


872:ナは?



873:デフォルトの名無しさん
22/02/09 23:48:17.20 Th41z547.net
>>847
>「値と所有権が複製されて、別々の値と所有権になる」
別々のものになってて複製?
言ってて変だと思わんの?

874:デフォルトの名無しさん
22/02/09 23:49:17.89 DXyGa46n.net
そもそも発端は入門者向けドキュメント >>486 にて、「所有権の複製(コピー)」とかいう言葉が出てきてこれではダメだ、っていうのが発端だからね
入門者向けドキュメントなんだから、正しい言葉で、正しく伝わる表現をしてほしいのよ

875:デフォルトの名無しさん
22/02/09 23:50:31.60 MsecEarl.net
結局のところ元の記事にあったように
「所有権とは、文字通り変数が値を所有できる権利のことです。」と間違って捉えてるってことだろうな

876:デフォルトの名無しさん
22/02/09 23:56:24.02 pUgNKLbu.net
>>858
それは正しいだろ
少なくともその解釈でRustの仕様と矛盾する点は何もない

877:デフォルトの名無しさん
22/02/09 23:57:32.97 wC50dlGN.net
>>856
ん、これどういう意味?

878:デフォルトの名無しさん
22/02/09 23:59:13.88 MYXFjZ5a.net
>>861
Unit型みたいな。

879:デフォルトの名無しさん
22/02/10 00:04:56.40 ERwpat+E.net
土地は複製できないって主張もよくわからなくて
例えばコピー機は別に原子レベルで複製しているわけでもなく
人間が見て同じに見える程度に見た目を再現してるだけなわけで
同様に土地だって同じ形状に造成できるわけじゃん
だから複製というときにはオリジナルのどこを再現したかが重要で
何が共通部分で何が差異なのかをはっきりしてほしい

880:デフォルトの名無しさん
22/02/10 00:06:24.62 TkQE8lES.net
>>857
複製ってのがそもそも別のものを作ることなんだが

881:デフォルトの名無しさん
22/02/10 00:39:11.50 lkU+MWHi.net
所有権っていう"もの"がある訳じゃないよ?

882:デフォルトの名無しさん
22/02/10 01:01:15.29 ZN2u8Rs1.net
リソースの所有者はリソースを解放する責務がある
主としては値が変数に束縛されることで所有の関係が作られる
このへんをいろいろひっくるめて所有権の概念になるわけで、こういった概念である「所有権」そのものを複製したり作成するというのは、やはり言葉としておかしい
束縛関係を複製とか言われても意味わからん

883:デフォルトの名無しさん
22/02/10 01:05:28.97 TkQE8lES.net
ここで"もの"かそうでないかを区別する意味ってある?その場合の"もの"ってなに?

884:デフォルトの名無しさん
22/02/10 02:44:56.84 rtSKPHyc.net
所有権とは所有にまつわるルールのことというのはTRPLに書いてある通りだと思うんだが
take ownership など、所有権という物をやりとりしているように読める文言はどう解釈すれば良いんだ?

885:デフォルトの名無しさん
22/02/10 03:18:42.60 748mZL+w.net
所有権の話はもう禁止してくれ、唾飛ばしながら「ワイが一番所有権分かってるぞ!」とかほんまどうでもいいわ
コンピューターサイエンス学科出でもないのに、もう駄コードを書く仕事に戻れ

886:デフォルトの名無しさん
22/02/10 04:10:06.01 ZV1iYxPB.net
>>868 が言ってる通り公式ドキュメントと矛盾がないように書くべきでしょ
そうすると、copyするのはvalueであって、ownershipはcopyしない
ownershipはtakeしたりtransferするもの
>>866 の最初に書かれてることは良いけど、そのあとは意味不明

887:デフォルトの名無しさん
22/02/10 05:39:51.83 LZ4lXgTU.net
この自演おじさん、そこらじゅうで同じ芸風で荒らし回ってるから本当にタチ悪い。

888:デフォルトの名無しさん
22/02/10 07:56:52.23 B7Nnq//K.net
結論:
「所有権の複製」は根拠の無いオレオレ用語であり
rust公式による定義は今回も一切示されなかった
でオシマイの話

889:デフォルトの名無しさん
22/02/10 08:16:17.16 lkU+MWHi.net
このおじさん普通に統失だと思う

890:デフォルトの名無しさん
22/02/10 09:03:54.77 o2ECnsWv.net
>>870
これが正しい

891:デフォルトの名無しさん
22/02/10 10:20:54.50 E3cwpb32.net
>>868
take ownershipのownershipは”もの”じゃないよ
もうちょっと英語勉強したほうがいいんでは?

892:デフォルトの名無しさん
22/02/10 12:39:37.06 JVrcL5p7.net
>>875
理由を言わず間違ってるとだけ指摘して勉強した方が良いとマウントとってくるいつもの人だ
反論できないから空っぽの指摘しかできないのかな

893:デフォルトの名無しさん
22/02/10 12:43:51.26 tTxcUdMu.net
unixのファイルシステムの権限周りの継承とかその辺とごっちゃになってんのかね?
どうして所有権をコピーみたいな話が出てきたのかわりと謎

894:デフォルトの名無しさん
22/02/10 14:41:33.57 3wQKSQe5.net
謎だよな
C++から来てるわけでもないし
どこから来た発想なんだろう?

895:デフォルトの名無しさん
22/02/10 16:06:58.32 mDz1Cqyx.net
>>876
説明してもらっても聞く耳持たないから
もう理由は教えないみたいなことを言われてなかったか?

896:デフォルトの名無しさん
22/02/10 16:38:55.18 rtSKPHyc.net
>>879
その説明へのレス番号貼るだけでもいいよ

897:デフォルトの名無しさん
22/02/10 17:36:51.53 jQfqixkL.net
所有権ルールと参照ルールを混同してたり
所有権が複製される構造はBox<T>のcloneと同じと言ってるところに
勘違いのヒントがありそうだか皆目検討がつかない
誰か解読してくれ

898:デフォルトの名無しさん
22/02/10 18:29:19.19 1jbJS/Bn.net
人格複製ニキの目的って何なんだろな

899:デフォルトの名無しさん
22/02/10 21:15:53.35 HYxEyueN.net
所有権の複製wwwww

900:デフォルトの名無しさん
22/02/10 21:16:13.39 lQNRE6Xh.net
はちみつさんに直接聞いてみたら?

901:デフォルトの名無しさん
22/02/10 21:17:20.02 lQNRE6Xh.net
>>882
>>884

902:デフォルトの名無しさん
22/02/10 23:25:06.23 3aizDYBf.net
ここまで見てる限りどっちでもOKな話だな
値と所有権が「!Copy型は移動」「Copy型は複製」との説明でもRustの理解に支障がないのも事実
一方で現世界にない「所有権の複製」という表現に違和感を持つ人が存在することも理解できる
ただし後者はあくまでも心の内なる話だから前者を崩せない限り不利っぽい

903:デフォルトの名無しさん
22/02/10 23:34:31.44 o2ECnsWv.net
>>886
いや、>>870 で正しいの書いてくれてるのに、公式でもそうなってるのに何故に頑なに所有権の複製を広めようとしてるのよ笑食べて

904:デフォルトの名無しさん
22/02/11 00:20:49.53 05KWrNRV


905:.net



906:デフォルトの名無しさん
22/02/11 00:26:11.55 jgApYu5Z.net
Rustの公式ドキュメントを調べると "copy of the value" という表現はたくさん出てくるが、 "copy of the ownership" のような表現は見つけられない
おそらく公式ドキュメントでも "copy of the ownership" みたいな言葉が使われそうになったときは意図的に排除されてるんだろう
もし "copy of the ownership" みたいに変更しても問題ないと思うなら、公式ドキュメントのリポジトリでそういうふうに提案してみてくれよ
Contributionのガイドを参考にコミュニティに書いたり、GithubでPull Requestするだけだからさ
URLリンク(rustc-dev-guide.rust-lang.org)

907:デフォルトの名無しさん
22/02/11 01:40:58.50 3Ka4+NQm.net
ownership の take や transfer という言葉が出てくるのは !Copy な値についての説明で、
Copy な値については ownership 絡めて説明されてないよね
ownership rule 自体は全ての値に適用されるから本来は Copy な値の ownership についてとうルールが適用されるかという説明はあった方が良いかもね
元々の初学者向け記事ではTRPL英語版にない部分の説明をするにあたって所有権の複製という用語を発明したわけだけど
どう説明するとわかりやすいんだろうか

908:デフォルトの名無しさん
22/02/11 01:48:31.89 +uMSd1hh.net
>>886
>Rustの理解に支障がないのも事実
めちゃくちゃ支障が出てますやんw
所有権が複製されると思ってるからRustの基本ルールが理解できない >>836
所有権が複製されると思ってるからThe Bookの意味が取れない >>868

909:デフォルトの名無しさん
22/02/11 01:57:15.41 Bozzm6u4.net
>>888
Rust的には「変数(値)の所有権がある」という表現が既におかしいぞ

910:デフォルトの名無しさん
22/02/11 08:08:57.43 pt0GtJjK.net
>>890
> 元々の初学者向け記事では(中略)所有権の複製という用語を発明したわけだけど
オレオレ用語を初学者に平気で刷り込んで平気ならば
> どう説明するとわかりやすいんだろうか
今後一切あらゆる場所で説明などしないでほしい

911:デフォルトの名無しさん
22/02/11 08:18:36.04 pt0GtJjK.net
平気すぎた(ノ∀`)アチャー

912:デフォルトの名無しさん
22/02/11 08:49:57.52 IHS0l4KB.net
個人が複製を分かりやすいと思うのは自由だけど
初心者に広めるのはダメだと思うがな
もっと明らかに初心者向けの例え話とわかるような用語ならともかく
いかにも公式の技術用語っぽい見た目をしてるわけで
これを知った初心者がもっと深く知りたいと思ったときに
ググっても全く情報は出てこないし、誰かに質問しても「なにそれ?」ってなる
少なくとも公式の説明に沿った言い方なら、それで理解してる人が
大勢いるから、そういった問題は生じない

913:デフォルトの名無しさん
22/02/11 08:58:58.08 WRuOVQdn.net
自分の理解不足を何で公式の落ち度みたいにすり替えてるんだ。間違いを認めたら死んじゃう病なの?

914:デフォルトの名無しさん
22/02/11 10:27:57.19 2FzZhGyg.net
>>881
Box<T>が出てくるあたり所有権を値へのポインタ的なものとして考えてるのかもな
まあそれでも複製はされないからイミフには変わりないんだが

915:デフォルトの名無しさん
22/02/11 11:14:45.52 zZVxGVeC.net
勘違い勘違い言うけど>>808以上の話じゃないように思うんだが。

916:デフォルトの名無しさん
22/02/11 11:24:34.62 3Ka4+NQm.net
自分も>>808で良いと思うけど公式の説明と表現が同じになってるかは気になる

917:デフォルトの名無しさん
22/02/11 11:38:14.49 MSfgatap.net
>>808
>>「値が複製されるとき、複製された値には新しい所有権が生まれる」と表現すべき
だからそれが間違っている
値には所有権は無い
入れ物に対して所有権がある
例えば&mutはその入れ物に対する書き換え可能な参照つまり所有権の借用
>>808を肯定する連中はRustをわかっていない

918:デフォルトの名無しさん
22/02/11 11:42:56.32 UuEYjDqs.net
複製オジが遂に撤退戦をはじめたかw
なんで所有権が複製可能だと思い込んだのか説明してくれれば
他の人の役に立つのにな

919:デフォルトの名無しさん
22/02/11 12:01:57.67 3Ka4+NQm.net
>>900
「入れ物に対して所有権がある」も微妙な表現で
「入れ物となる変数が複製された値の所有権を持つ」の方が適当だと思うけど、どう思う?

920:デフォルトの名無しさん
22/02/11 12:06:36.51 IlhJUkFw.net
流れぶった切ってすまんけど質問
「借用」と「参照」の違いってなんなん?

921:デフォルトの名無しさん
22/02/11 12:07:10.38 MSfgatap.net
>>902
値は書き換わる物
だから値に所有権はない
入れ物に対して所有権がある
解放する対象も入れ物であってその値ではない

922:デフォルトの名無しさん
22/02/11 12:14:00.85 6AYXkq/G.net
>>904
c言語のfreeって明らかに値を解放してるように思えるんだが
freeした値はその後使えないがその値を入れていた変数はその後も使える

923:デフォルトの名無しさん
22/02/11 12:21:34.19 zZVxGVeC.net
ownerに対する所有権があるような話になってよくわからんね。

924:デフォルトの名無しさん
22/02/11 12:25:48.71 vAEawTbN.net
>>903
参照は変数の種類で、借用は参照の使い方とか参照同士の関係とか状態のこと。
明�


925:mに書かれていないけど、そのへんを意識してThe Bookのreferences and borrowingあたりを見ると良いよ。



926:デフォルトの名無しさん
22/02/11 12:44:48.12 MSfgatap.net
>>905
C言語のfreeでも入れ物を解放している
入れ物の中にある値を解放しているわけではない
そしてmalloc/freeで対象となる変数は入れ物を指している
つまりその変数自体は一つ階層が異なりポインタである
そのポインタ変数を書き換えても別の入れ物を指すようになるだけ
入れ物の中身が書き換わるわけではない

927:デフォルトの名無しさん
22/02/11 13:17:26.35 6AYXkq/G.net
>>908
いいえfreeは入れ物にある値を解放しています
入れ物を解放しているわけではありません
そもそもfreeに限らずc言語の関数はすべて値渡しなのでfree(入れ物)と書いたらfreeには入れ物にある値が複製されたのが引数として渡されて入れ物に関する情報は一切渡されません
c言語の関数が操作できるのはこの複製された値です
もし入れ物を関数funcで操作したい場合はfunc(&入れ物)と書きます
この場合も&入れ物という値が操作されます
繰り返しになりますがc言語はすべて値渡しなので決して関数に入れ物を渡して解放するなどと言った操作をすることはできません 解放されるのは値です
入れ物の参照を関数に渡すには&入れ物という表記を使いますが&入れ物も値です これは参照呼びと言われますがただの値渡しです
あなたは明らかにプログラミング初心者なのでこのレスが理解できるようになるまでこのスレには書き込まないでください

928:デフォルトの名無しさん
22/02/11 13:27:03.79 MSfgatap.net
>>909
それは君が抽象的なセマンティクスとポインタ等を介するコードの区別が出来ていない初心者だから理解できないのだろう
Rustではこの違いが特に大きいのでその区別を付けることが非常に重要

929:デフォルトの名無しさん
22/02/11 13:43:08.13 UrRCo2Y3.net
>>900
これは同意
何が何を所有してるのかという主語目的語を意識せずに
フワッと分かったつもりになってるからなんだろうね

930:デフォルトの名無しさん
22/02/11 13:45:34.76 HZ9j/fjC.net
次スレはワッチョイ付けたほうが良さそうですね

931:デフォルトの名無しさん
22/02/11 14:02:29.28 m8Gesa51.net
俺は初心者なのでフワッとすら分かっておらず、このスレでは一体何が議論になっているのかよく分からない。

932:デフォルトの名無しさん
22/02/11 14:04:16.80 6AYXkq/G.net
>>910
別に抽象的なセマンティクスでもないよ
君が言っている「入れ物」でさえ操作的意味論的にはアドレスを表す単なる「値」として表現されていることを知るべきだね
ちゃんと理論的にはどのように定式化されているのかを知らないで入れ物だとか言った自分の無知を埋め合わすために勝手に導入したオレオレキーワード使って他の人を困らせてる辺り一向に君は初心者から脱却できないと思うよ
「入れ物」(笑)なんかじゃなくて実際に使われているテクニカルタームを使うことから始めれば?
知らないの?

933:デフォルトの名無しさん
22/02/11 14:05:22.34 6AYXkq/G.net
学術的に使われた用語だからテクニカルタームではないな

934:デフォルトの名無しさん
22/02/11 14:28:40.44 m8Gesa51.net
私は何も知らない。

935:デフォルトの名無しさん
22/02/11 14:35:23.81 05KWrNRV.net
freeに渡すアドレス値を「入れ物」と呼ぶか「値」と呼ぶかでもめているように見える

936:デフォルトの名無しさん
22/02/11 14:44:41.81 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:デフォルトの名無しさん
22/02/11 15:04:06.88 6AYXkq/G.net
>>918
それらの変数にはすべてそれぞれの実体が入っています
アドレスではありません
全ての「アドレス」は「値」ですがだからといって全ての「値」も「アドレス」であるとは言っていません
まずは読解力を身に着けましょう
もっと正しく理解をしましょう

938:デフォルトの名無しさん
22/02/11 15:18:23.74 6Qn4bKwU.net
>>919
では、あなたの主張するアドレスはどこに出てくるの?
let a = [1,2,3];
let v = vec![1,2,3];
どちらもアドレスではないですよね

939:デフォルトの名無しさん
22/02/11 15:28:24.64 6AYXkq/G.net
>>920
失礼しました
配列は先頭要素のアドレスが変数に格納されるでしょう
これだけで済む話です
抽象化なぞそもそも必要とされる余地はありません

940:デフォルトの名無しさん
22/02/11 15:36:10.19 H8NApfSl.net
所有権を持つのは値じゃなく変数
これはいいよね
オライリー本とかは少し違うけど
少なくとも公式は値が別の値を所有するとか
値が別の値の所有権を持つという考え方は採用していない
で解放のほうだけど
解放する対象はメモリ領域であって値でも変数でも無いよね
便宜的に「変数(の指してるメモリ領域)を解放する」とか
「値(が格納されてるメモリ領域)を解放する」という言い方をすることがあるだけ

941:デフォルトの名無しさん
22/02/11 15:46:50.29 MSfgatap.net
>>921
それも違う
配列の先頭要素のアドレスが変数に格納されているわけではない
Rustではもっと抽象的なセマンティクスでプログラミングをするし配列の長さも持つ

942:デフォルトの名無しさん
22/02/11 15:47:39.62 zZVxGVeC.net
値に対する所有権を変数が持つってことなら>>808は特におかしいとは思わないが?
逆に「入れ物」(変数?)に対する所有権とか言っている>>900の方が理解しにくい。

943:デフォルトの名無しさん
22/02/11 15:47:44.62 6AYXkq/G.net
>>922
私は操作的意味論のモデルに乗っかって表現したまでです
操作的意味論ではメモリ領域を示すアドレスは値として表現されています
ある特殊な操作的意味論で定義された理論をベースにしているRustでメモリ領域のことを値だと表現するのは間違っていないでしょう
逆に入れ物や変数だといった表現をこの文脈で使うのは言語道断かと思われます

944:デフォルトの名無しさん
22/02/11 15:51:44.74 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:デフォルトの名無しさん
22/02/11 15:54:42.31 6AYXkq/G.net
>>923
すいません
さらに配列の長さも保持しているのならなおさら抽象化のレベルは下がりますよね?
自分が何を言ってるのかわかっておいでですか?
もしかしてRustの抽象化レベルってCよりも下なんじゃないんですか?(笑)

946:デフォルトの名無しさん
22/02/11 16:01:23.79 VlXZAIWT.net
なんでこのスレでは操作的意味論とC言語とRustをちゃんぽんして語ってるの?
みんな器用だね?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch