2009-05-06 17 views
5

非解釈言語でガベージコレクタを使用することは可能ですか?解釈された言語では、インタープリターはプログラムを1行ずつ実行するため、インタープリターはGCをランタイムに提供することもできます。しかし、コード自体にGCを構築しなくても、他の言語のガベージコレクタを使用することは可能ですか?未翻訳言語にガベージコレクタがありますか?

+5

「解釈済み」と「ネイティブ」の間に間違った二分法を仮定しているのだろうかと思います。たとえば、JavaやC#は、 "解釈"も "ネイティブ"でもなく、本質的にはVM内で実行されますが、ILから実行されます。 –

+0

あなたはもっと説明できますか? – Geek

+0

その会話については、私の返信のコメントを見てください。 –

答えて

0

はい。

スマートポインタを実装したC++では、スマートポインタの参照カウントがゼロになるため、ガベージコレクトされます。

ガベージコレクションがあります。あなたはそれを自分で構築しませんでした。

+1

質問はガベージコレクションのトレースに関するものだと思うし、refcountは代用ではありません。 –

+1

これはガベージコレクションではありません。サイクルを持つようにいくつかのオブジェクトを接続し、サイクルを手動で中断しない限り破壊されることはありません。 – sharptooth

+0

@sharptooth:世界ではなく、他の世界と一緒に取ってください。http://www.codeproject.com/KB/cpp/automatic_gc_using_sp.aspx –

11

ガベージコレクションでは、ランタイムがそれらを識別してガベージコレクションに使用できるように、ポインタ変数に特別な方法でマークする必要があります。解釈/コンパイルとは関係ありませんが、特別なランタイムが必要で、各変数に追加のデータを格納する必要があります。

+0

よく解釈された言語はあなたにランタイムを与えます。 Interpretorがランタイムとして動作し、ガベージコレクタを実行することは、少なくとも簡単です。どのネイティブ言語でも、実行時にOSが使用されますか?したがってGCはありませんか? – Geek

+1

GCと解釈はお互いに無関係です。はい、インタプリタ言語でガベージコレクションを行うほうが簡単ですが、解釈されない言語でもこれを行うことができます。 OSは通常、ガベージコレクションの埋め込みサポートを持っていませんが、多くの言語ランタイムにはあります。 – sharptooth

+2

ポインタ変数を特別な方法でマーキングしなくても、すべてのメモリ内容を潜在的なポインタとして扱う、いわゆる保守的GCを持つことができます。他の答えでBoehmのGCを参照してください。 –

6

.NET言語(IL-C#、VB.NET、MC++など)は解釈されません(特にNGENを使用している場合)。ガベージコレクションが完全に行われています。

同様に、Java。

+0

Javaは私の友人に解釈されます。たとえそれがHotSpotであっても。 – Geek

+0

いいえ - "ネイティブ"ではないかもしれませんが、それは "解釈され"ません。少なくとも、通常の定義ではありません。 –

+0

私はあなたの答えを「少なくとも、通常の定義ではない」と思っていますか? それは解釈されます。 ?? – Geek

0

Objective-C 2には現在ガベージコレクションがあり、C++でも利用できるガベージコレクションライブラリがあります。

オブジェクトツリーを走査できるようにオブジェクトを検査することができる言語があれば、それが可能だと思います。

+1

どのように動作するか説明してください。これはあなたのプログラムと一緒にGCスレッドを添付するようなものですか? – Geek

+1

独立したスレッドは、GCとは無関係です。ちょうどJavaのやり方と同じです。ほとんどのC++(およびObjective-C)は、refカウントがゼロになると削除時にそれを処理します。 –

+1

Objective-C 2には実際のガベージコレクションがあります。ランタイムはオブジェクトツリーを横断します。ガベージコレクションが有効になっていると、参照カウントは無視されます。私はイベントループの一部だと信じていますが、わかりません。 –

2

新しいC++ 0xには、ガベージコレクションの実装を容易にする機能が含まれています。たとえばinterviewを参照してください。

3

、この場合には、Cおよび/またはC++は、Haskellのは、それがネイティブコードにコンパイルされていますか、ガベージコレクションを持っているhttp://www.hpl.hp.com/personal/Hans_Boehm/gc/

3

でベームGCを見ますまたは解釈される。

関連する問題