マシンコードにコンパイルするマネージプログラミング言語はありますか?

StackOverflow https://stackoverflow.com/questions/1213043

  •  06-07-2019
  •  | 
  •  

質問

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

編集ガベージコレクションの話ではありません。私はメモリを自動的に free()し、それでもマシンコードにコンパイルする言語について知りたいと思っていました。

役に立ちましたか?

解決

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

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

実際には、管理されていない言語のガベージコレクションを使用できます(たとえば、 C ++ )、およびその逆はガベージコレクションなしで言語を管理しています(編集:探していましたが、目的のC がカウントされますが、ガベージコレクションを行わずにマネージ言語を作成するのが非常に理にかなっているとは思いません)

実際には、JavaとC#の両方をマシンコードに直接コンパイルできるため、仮想マシンを使用せずに直接実行されます..Netコードの場合、これはNGENを使用して実行されます(実際、CLRは.Netアセンブリをマシンにコンパイルします実行中のコード、いわゆる「ジャストインタイム」コンパイル)

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

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

他のヒント

ロット:

LISP(およびその亜種)、Erlang、C#(Monoの下)、Haskell、Java(gcjを使用)

確かにあります。たとえば、Java。 (gcj)

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

もう少し、「管理」という広い意味で安全(ランタイム型チェックまたは徹底的な静的分析による)および/またはガベージコレクトを意味します:

  • OCaml
  • D
  • Ada
  • プロローグ
  • クリーン
  • エッフェル

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

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

Gilbは参照カウントを使用してオブジェクトの寿命を管理します。参照カウントが0に達すると、オブジェクトがクリーンアップされます。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top