21/08/24 15:09:04.48 KCG/N/Sb.net
rustってどうやって二重開放のリスク防いでるの?全然ピンとこない
1002:デフォルトの名無しさん
21/08/24 15:50:18.44 tu56M8w7.net
ownershipが1つしかない状態を維持しつつownershipが0になったら(確実に)解放する感じ
ownershipはどこかの変数が直接的or間接的に保有してて
同じリソースに複数のownershipが発生しないように
代入とか関数の受け渡しでmoveしたりborrowしたりする
少し逸れるけど解放処理を必要としないデータはCopy可能な場合が多い
ownershipは「所有権」て訳されるけど意味的には「解放権」とか「解放責任」に近いかも
1003:デフォルトの名無しさん
21/08/24 16:38:09.46 Cd1Pd2YU.net
>>977
公式の見解を個人の感想と一緒にするなよ
1004:デフォルトの名無しさん
21/08/24 17:46:18.00 uCQTu6bl.net
Rustで循環参照作るの簡単とか言ってるやつは100%エアプだからほっといてやれ
他言語での経験をあたかもRustで経験したかのように語りたかったんだろう
1005:デフォルトの名無しさん
21/08/24 18:15:27.00 otdRB8MX.net
>>985
メモリリークの原因になるかどうかを別にすれば、循環参照自体は普通に簡単に生じるだろう
1006:デフォルトの名無しさん
21/08/24 18:45:16.53 tu56M8w7.net
unsafeでポインタ使えば簡単だろうけどライフタイムのある参照の循環は大変そう
'a > 'bと 'b > 'aを両立は不可能に見えるけど何か抜け道あるのかな
1007:デフォルトの名無しさん
21/08/24 18:55:37.63 SZKxopPy.net
循環参照どころか連結リストも荷が重い
1008:デフォルトの名無しさん
21/08/24 19:43:21.83 KCG/N/Sb.net
>>983
なるほどサンクス
リージョン理論に線形論理を上手く組み合わせて、cycloneとかの欠点を克服したrustってすげーなあ
とはいってもそもそも二重開放してエラーになるというのがピンとこない
free(a);
free(a);
は二重解放しているように見えて合法だろ?
一度目のfreeでaにNULLが代入されて、二度目のfreeでは引数がNULLの場合はそのままreturnって処理されるんだから、理論上は何度free使ってもエラーにならないじゃないか
1009:デフォルトの名無しさん
21/08/24 19:58:14.02 Mn5s1DvN.net
何の話? C?
1010:デフォルトの名無しさん
21/08/24 20:39:00.27 972JwtmU.net
>>980
>Rustで循環参照が起きるにはRc利用が必須
RcだけじゃなくRcとInterior Mutabilityが必須
(どちらか片方はmutableじゃないと循環させられないので)
>Weak(弱参照)を適切に上手く用いて循環参照を避けるのが大変な場合もあるが
Rustの場合は循環参照で意図通り動くコードを書くのに比べれば
弱参照に変更するのはすごく簡単
循環参照を修正してる例
URLリンク(github.com)
URLリンク(github.com)
1011:デフォルトの名無しさん
21/08/24 20:58:14.10 joymTvc2.net
すまんが、複数のファイルにソースを分割する練習教材みたいなものがあったら教えてくれんか?
1012:デフォルトの名無しさん
21/08/24 22:56:02.07 972JwtmU.net
次スレ
スレリンク(tech板)
1013:デフォルトの名無しさん
21/08/24 23:03:55.04 PednkAUi.net
>>992
「book」にもモジュールの章がある。
1014:デフォルトの名無しさん
21/08/24 23:31:00.93 OsSSnb/8.net
>>987
RcとRefCell使えば数行
1015:デフォルトの名無しさん
21/08/24 23:45:46.97 MkJE9y3A.net
循環によって現れるメモリリークは Rust が提供する「メモリ安全」を損なわないと定義されている。
Rust は循環参照を防がないし、メモリリークに対処するのはプログラマの責任。
1016:デフォルトの名無しさん
21/08/25 00:57:06.67 3XgQgETH.net
>>992
もう見てるかもだが
URLリンク(www.sheshbabu.com)
1017:デフォルトの名無しさん
21/08/25 01:28:54.33 6n+Di1sM.net
>>990
c
1018:デフォルトの名無しさん
21/08/25 01:29:12.12 6n+Di1sM.net
うんこ
1019:デフォルトの名無しさん
21/08/25 01:29:33.60 6n+Di1sM.net
1000ならここにいるやつら全員失職
1020:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 69日 1時間 5分 21秒
1021:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています