たしかに言語機能としてのGC(だいたいのオブジェクトを動的にメモリ管理)はなさそう。
で、「だからその分、実行時オーバーヘッドがない」とか「静的に振る舞いが定まって云々」というのが続きそうだけど、それはほんまか?
たとえば、Rc/Arc(参照カウンタ)使わずにRustでプログラム書くのって、そんな一般的にできるのかな?
他の言語で言えば、素朴なGCの作り方の筆頭格がRCなはずで、その実行時コストをRustでは誤差にしていいなら「だからその分、」とは言えないはずだし。
それ以外にも、ラッピング系はたくさんあるよね。分かっていない自分。
Conversation
Notices
-
斎藤ただし (tadd@best-friends.chat)'s status on Tuesday, 08-Aug-2023 13:39:11 JST 斎藤ただし -
ikeji (ikeji@ostatus.ikeji.ma)'s status on Tuesday, 08-Aug-2023 13:39:10 JST ikeji @tadd そもそも、RCはGCではない派閥がありそう。
ex. https://twitter.com/imos/status/817567227880669185?t=wknKVA3jWGLMH2z1u1_-Eg&s=19 -
ikeji (ikeji@ostatus.ikeji.ma)'s status on Tuesday, 08-Aug-2023 13:51:20 JST ikeji @tadd 今どきのC++はGCがある派も見たことはある。
チェッカが十分に賢くなったから。
論点は
- 自分の足が撃ち抜けるか
- オーバーヘッドの大きさ
- オーバーヘッドが予測可能か
あたり? -
斎藤ただし (tadd@best-friends.chat)'s status on Tuesday, 08-Aug-2023 13:51:21 JST 斎藤ただし @ikeji それはそうで、筆頭がMatz (当時のCPython disネタ)。
ただその話なら「GCの基盤として不完全で(がんばらないと)リークが起こる」というのが理由なので、自分の書いたの(実行時性能やら)とは別の話になりそう。 -
斎藤ただし (tadd@best-friends.chat)'s status on Tuesday, 08-Aug-2023 13:51:21 JST 斎藤ただし @ikeji と、C++にもGCがあるという話に……というその人の疑問点は、自分も一緒だな。
ただその人は否定的に取り上げてるぽくて、自分は何も分からんのでまだ中立、という気持ち。 -
ikeji (ikeji@ostatus.ikeji.ma)'s status on Tuesday, 08-Aug-2023 13:56:47 JST ikeji @tadd GCがないというのは違和感あるけど、RCはMSよりコストが低いとか、RCの時間は計算できるというのは、正しそう? -
斎藤ただし (tadd@best-friends.chat)'s status on Tuesday, 08-Aug-2023 14:51:46 JST 斎藤ただし @ikeji ふむふむ。自分の疑問は2番目と3番目くらいかな。
それで、現時点でも3がそれなりに間違ってるとは思う。動的に数えないと分からないんだから、静的には分かんないじゃん?がんばればできるのかな。なので煮詰めると、2・3の実際の影響の大きさ、かなぁ。影響があるかないかなら、あるだろうし。
とはいえ、Rc/Arcをがんばってカウントなしに(手動で?)書き換えられるとか、ぱっと分からない。あと1は、理屈でどうのこうのでそうできないのを保証してるはず、たぶん。(除unsafe)
-
ikeji (ikeji@ostatus.ikeji.ma)'s status on Tuesday, 08-Aug-2023 14:51:46 JST ikeji @tadd 3について、
一番基本的な形ではプログラムというのは入力と計算と出力があり、同じ入力に同じ計算をしたら、同じ事がおこって同じ出力があると思うんだけど、
副作用があるとこれがなりたたなくなって、
そうすると、デバッグが難しくなって困ったりして、
なるべく副作用がなくしたいと願うんだけど、
MSを使う言語だと、常に副作用が入るような状態になって困る、みたいなのはありそう。
例えば、JVM言語で、ファイナライザがメモリ破壊していって困った事とかあった。
-