Gauche > Archives > 2020/05/30

2020/05/30 03:23:36 UTCnkoguro
#
限定継続とエラーハンドラで質問があるのですが、このプログラムを実行すると
https://gist.github.com/nkoguro/7fd58e919c0ae0050280e874ab22ddf2
#
ヒープサイズがどんどん大きくなっていくのですが、
#
% gosh pcdemo3.scm
((:total-heap-size 117395456) (:free-bytes 3465216) (:bytes-since-gc 46190000) (:total-bytes 146680720))
((:total-heap-size 222253056) (:free-bytes 3059712) (:bytes-since-gc 70168000) (:total-bytes 290683632))
((:total-heap-size 331304960) (:free-bytes 2510848) (:bytes-since-gc 107559712) (:total-bytes 434692432))
((:total-heap-size 431968256) (:free-bytes 8978432) (:bytes-since-gc 91367568) (:total-bytes 578684176))
((:total-heap-size 566185984) (:free-bytes 12029952) (:bytes-since-gc 15838880) (:total-bytes 722686784))
((:total-heap-size 650072064) (:free-bytes 12234752) (:bytes-since-gc 159849232) (:total-bytes 866697136))
((:total-heap-size 784289792) (:free-bytes 1978368) (:bytes-since-gc 303849168) (:total-bytes 1010697072))
#
継続とguardの使い方がおかしいでしょうか?
#
guardを取り除いたバージョンだとリークしていないようです
#
https://gist.github.com/nkoguro/0ca865b06c1a06d33f32f93e5861a980
#
% gosh pcdemo2.scm
((:total-heap-size 5939200) (:free-bytes 1232896) (:bytes-since-gc 2748544) (:total-bytes 101875088))
((:total-heap-size 5939200) (:free-bytes 356352) (:bytes-since-gc 3619312) (:total-bytes 201081360))
((:total-heap-size 5939200) (:free-bytes 3358720) (:bytes-since-gc 583632) (:total-bytes 300281632))
((:total-heap-size 5939200) (:free-bytes 2519040) (:bytes-since-gc 1468432) (:total-bytes 399486528))
((:total-heap-size 5939200) (:free-bytes 1638400) (:bytes-since-gc 2343664) (:total-bytes 498685520))
((:total-heap-size 5939200) (:free-bytes 761856) (:bytes-since-gc 3217280) (:total-bytes 597893440))
((:total-heap-size 5939200) (:free-bytes 3551232) (:bytes-since-gc 166752) (:total-bytes 697092688))
((:total-heap-size 5939200) (:free-bytes 2945024) (:bytes-since-gc 1036096) (:total-bytes 796297808))
((:total-heap-size 5939200) (:free-bytes 2043904) (:bytes-since-gc 1937552) (:total-bytes 895505792))
((:total-heap-size 5939200) (:free-bytes 1159168) (:bytes-since-gc 2822688) (:total-bytes 994707472))
#
もともと、thread-poolと継続を組み合わせてこんな感じのコードを書いていたのですが、
#
https://gist.github.com/nkoguro/fee9551e6cfee0a633eb7991dd16df95
#
% gosh pcdemo4.scm
((:total-heap-size 219541504) (:free-bytes 1392640) (:bytes-since-gc 7212480) (:total-bytes 275654784))
((:total-heap-size 446033920) (:free-bytes 9023488) (:bytes-since-gc 949696) (:total-bytes 544955920))
((:total-heap-size 613806080) (:free-bytes 3022848) (:bytes-since-gc 87934304) (:total-bytes 816354896))
((:total-heap-size 882241536) (:free-bytes 13840384) (:bytes-since-gc 10913488) (:total-bytes 1083561648))
((:total-heap-size 1033236480) (:free-bytes 10448896) (:bytes-since-gc 195600592) (:total-bytes 1350762512))
((:total-heap-size 1234563072) (:free-bytes 16257024) (:bytes-since-gc 210704224) (:total-bytes 1626359840))
((:total-heap-size 1502998528) (:free-bytes 16359424) (:bytes-since-gc 477907408) (:total-bytes 1893563024))
#
ヒープサイズがどんどん大きくなっていったので、調べてみたらguardの有無で挙動が変わるようでした
2020/05/30 03:32:55 UTCshiro
#
ハンドラチェインあたりがresetで切り取られずに残っててwrapの度にどんどん深くなってる予感
2020/05/30 11:16:10 UTChamayama
#
0.9.8 まではリークしないですね。。。プルリク529でresetChainを追加したのが関係あるかも。
#
ただ、resetChain自体はSEGV回避のために必要性があって入れたはずですが。。。
2020/05/30 21:46:58 UTCshiro
#
じっくり見てみないとわかりませんが、guard(というかwith-error-handler)の実装自体が完全に理想的ではなく、その制限回避のために部分継続のセマンティクスをきちんと再現できてない可能性はあります。