Go language part 6 (70レス)
Go language part 6 http://mevius.5ch.net/test/read.cgi/tech/1747750228/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
37: デフォルトの名無しさん [sage] 2025/06/15(日) 01:14:15.92 ID:757F+le4 >>35 > 親→子→親の構造を表現するためにはRc/RefCell/WeakRefの組み合わせみたいなのが必須 それがarenaで簡単になるらしいぞ、詳しくは知らんが > これがAがResponseを参照している、BがResponseを参照しているの意味なら そうだが、 > AやBより先に他の誰かがResponseを生成して所有しているはずで これはその下のCの話になってる 問題が起きるケースは、 A->Response のオブジェクトAがあり、 オブジェクトBにもResponseの参照が欲しくなったので、B->Responseをつけようとするが、 この際に、元のAと追加するBのオブジェクトの寿命が別々に管理されており、どちらが長いか判断できない場合 だから上位なりで確実にAとBの寿命を内包する階層や > 他の誰か を作り、それで管理するという話 Rustのコードなんて書けんし、Goでも怪しいからJSで書いておくと、(この辺正確にしておかないと余計に混乱するだろうから) function add_ref(A,B){ B.Response = A.Response; return [A,B]; // 2値返し } とBにAのプロパティをコピーするだけのマヌケな関数で、AもBも所有権を渡された場合に、書きようがないだろ だからおそらく上位でこういうことがないように対応するはずだが ただ調べてたら Leakpocalypse が2015年に発見されて、それ以来「Rustではメモリリークは防げません」になってるようだな まあ俺はRustは死ぬと見てるし、ザマアとしか思えないが (Rustの方法でメモリ管理するのは無理だと思ってる) http://mevius.5ch.net/test/read.cgi/tech/1747750228/37
38: デフォルトの名無しさん [sage] 2025/06/15(日) 01:41:02.18 ID:757F+le4 >>37、例を修正、 (まあ俺がRustに詳しいわけではないからコンセプトだけだが、) function add_ref(Response, A, B){ // Response,A,Bはすべて所有権を与えられるとする A.Response = Response; // この辺が書けない B.Response = Response; // この辺が書けない return [A,B]; // 2値返し、A,Bのどちらが長寿命かはわからない } かな。Responseが与えられ、A,Bにそれぞれ参照を付加するだけだが、 Responseオブジェクトの寿命(所有権?)をどちらに与えればよいか分からない だからまるごと管理してしまえってのがCなりarenaなのだろうし、 無理やりでも個別に管理して1バイトも無駄にしない、というのがRc/RefCell/WeakRefで、 これを全自動でやってくれるのがGCなわけだが http://mevius.5ch.net/test/read.cgi/tech/1747750228/38
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.581s*