非インタープリタード言語にガベージコレクターを持たせることは可能ですか? 解釈された言語では、インタープリターがプログラムを 1 行ずつ実行するため、インタープリターはランタイムに GC を提供することもできます。しかし、コード自体にGCを構築せずに、他の言語用のガベージコレクターを持つことは可能ですか?
8 に答える
ガベージ コレクションでは、ランタイムがそれらを識別してガベージ コレクションに使用できるように、ポインタ変数を特別な方法でマークする必要があるだけです。解釈/コンパイルとは関係ありませんが、代わりに特別なランタイムと、各変数に追加のデータを格納する必要があります。
まあ、.NET 言語 (IL に発行するもの - C#、VB.NET、MC++ など) は解釈されず (特に NGEN を使用する場合)、完全なガベージ コレクションがあります。
ジャバも同様。
コンパイルされた言語(この場合はCおよび/またはC ++)での実際の実装については、 http://www.hpl.hp.com/personal/Hans_Boehm/gc/のBoehmGCを参照してください。
Haskell には、ネイティブ コードにコンパイルされているか解釈されているかに関係なく、ガベージ コレクションがあります。
新しい C++0x には、ガベージ コレクションの実装を容易にする機能が含まれています。たとえば、このインタビューを参照してください。
はい。
スマート ポインターを実装した C++ は、スマート ポインターの参照カウントがゼロになるとガベージ コレクションを実行します。
ガベージ コレクションがあります。あなたはそれを自分で構築しませんでした。
現在、Objective-C 2 にはガベージ コレクションがあり、C++ で使用できるガベージ コレクション ライブラリもあります。
オブジェクトツリーをトラバースできるようにオブジェクトを検査できる言語があれば、それは可能だと思います。