マシンコードにコンパイルするマネージプログラミング言語はありますか?
-
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を使用する必要がある場合は、何もしないよりはましです。