0

マネージ言語は、メモリのクリーンアップを処理する言語です。

編集ガベージコレクションについて話しているのではありません。free()私は、自動的に記憶し、機械語にコンパイルできる言語について知りたいと思っていました。

4

6 に答える 6

9

「マネージド」と「ガベージ コレクション」を混同しているようですが、多くの場合、マネージド言語 (C# や Java など) にはガベージ コレクションが自動化されていますが、「マネージド」は実際には、コードを実行する「仮想マシン」があるという事実を指します。 ( http://en.wikipedia.org/wiki/Managed_codeを参照)。

たとえば、CLR (共通言語ランタイム) は .Net コードを実行する仮想マシンであり、JVM (Java 仮想マシン) は Java コードを実行する仮想マシンです。

実際には、管理されていない言語 (たとえばC++ ) のガベージ コレクションを使用できます。逆に、ガベージ コレクションのない管理言語を使用することもできます (編集: いくつか探していましたが、 Objective Cがカウントされない限り、何も見つからないようです。いずれにせよ、ガベージ コレクションなしでマネージ言語を作成することに大きな意味があるかどうかはわかりません)。

実際、Java と C# はどちらもマシン コードに直接コンパイルできるため、仮想マシンを使用せずに直接実行されます。いわゆる「ジャストインタイム」コンパイル)

編集:あなたの質問の更新の更新として、実際には、完全な手動メモリ管理とガベージ コレクションの極端な範囲で、ガベージ コレクションの代替手段が多数あります。マシン コードにコンパイルする多くの言語には、さまざまな機能が組み込まれています。明示的にメモリを解放する必要のない形式のメモリ管理。

質問してもいいですか - これは「興味がない」質問ですか、それともプロジェクトの言語を選択しようとしていますか - 後者の場合、なぜ言語を機械語にコンパイルすることにそんなに興味があるのですか? 確かに、コードを JIT コンパイルした .Net の場合、多くのパフォーマンス上の利点が得られます (ほとんどの場合)。また、コードを NGEN 化しても、.Net フレームワークへの依存は削除されません。

于 2009-07-31T15:14:59.870 に答える
8

たくさん:

LISP(およびバリアント)、Erlang、C#(Monoの下)、Haskell、Java(gcj付き)

于 2009-07-31T15:07:07.747 に答える
4

確かにあります。たとえばジャバ。(GCJ)

ただし、マネージドという用語自体は、ランタイムを持ち歩く必要があることを意味します。

于 2009-07-31T15:03:56.393 に答える
3

さらにいくつか、より広い意味での「管理された」という意味では、(実行時の型チェックまたは徹底的な静的分析による) 安全性および/またはガベージ コレクション:

  • OCaml
  • D
  • エイダ
  • プロローグ
  • 掃除
  • エッフェル
于 2009-07-31T15:15:15.500 に答える
1

Efraimsの回答と同様に、.NETプログラムも通常2ステップ(JIT)でマシンコードにコンパイルされますが、MSILをネイティブにプリコンパイルするためのNGENツールがあります。

于 2009-07-31T15:07:19.930 に答える
1

セミGCの選択肢があります:GLIB。

Gilb は参照カウントを使用してオブジェクトの寿命を管理します。参照カウントが 0 になると、オブジェクトが消去されます。

.NET や Java や Python よりもはるかに不便ですが、C を使用する必要がある場合は、何も使用しないよりはましです。

于 2009-07-31T15:24:44.987 に答える