インタプリタを実装する際には、ホスト言語のガベージコレクタをオフに便乗するのは良いか悪いですか?
-
24-09-2019 - |
質問
あなたはGCedある言語でGCed言語のインタプリタを実装しているましょうと言います。 あなたが長い間、あなたのデザインについて合理的に注意を払っているように自由のためのガベージコレクションを取得したい私には思える。
これがどのように行われています、これは一般的にされていますか?これを行うにはないが良い理由がありますか?
解決
言語とランタイムは、二つの異なるものです。彼らは本当に関連私見ではありません。
あなたは既にランタイムの提供にGCを既存の場合は、そのため、他のGCでのランタイムを拡張するための十分な理由がなければなりません。 OSのメモリ割り当てが遅いと高価だった古き良き時代では、アプリケーションは、データの小さな塊に対処する上でどこより効率的に、独自のヒープ管理をもたらしました。すなわち、既存のランタイム(またはOS)に別のメモリ管理を追加するための1つreadonました。しかし、あなたは、Java、.NETまたはそうに話している場合 - 。それらは手でほとんどのタスクのために良いと効率的な十分なはずです。
しかし、あなたはとてもあなたの言語(「ゲスト」)ランタイムは、後に別のホストランタイムのに上に実装することができること。、メモリおよびオブジェクト管理タスク(およびその他)のための適切なインタフェース/ APIを作成することもできますP>
他のヒント
はインタプリタは、特に最初に、ホストGC、私見を使用しても問題があってはなりません。いつものように、彼らは目標速くそれを作る、その後、それは正しく動作させる、その後、作業何かを得るためにする必要があります。これは、目標は、小さな言語であるドメイン特化言語(DSL)のために特に当てはまります。これらの場合、フルGCを実装することはやり過ぎでしょう。