ガベージコレクタ
ついにCrystalはオペレーティングシステムにメモリを返すことができるようになります!本日、Boehm-Demers-Weiser保守的ガベージコレクタを言語に組み込むことに成功しました。
将来的には、より適切でカスタムなガベージコレクタを実装する予定ですが、言語をより堅牢で使いやすくするための、非常に良い出発点です。
このコレクタをCrystalで動作させるためには、割り当てられたすべてのブロックポインタがメモリ内で適切にアラインメントされていることを確認する必要がありました。ユニオンと型階層はパックされた構造体を使用しており、そのため一部のポインタがGCにとって「不可視」になっていました。そのため、使用中の多くのブロックが解放され、結果としてすべてが非常に簡単にクラッシュしていました。
いくつかの簡単なテストでは、メモリを解放することの明白なメリットが反映されています。たとえば、samples/mandelbrot2.cr
は実行に約13MBのメモリを必要としていました。GCが有効になると、1MB弱しか使用しません。
まだ長い道のりがありますが、動作するメモリマネージャがあれば、日常業務で非本番または重要でないツールにCrystalをドッグフーディングすることを検討できるかもしれません。