マネージドコードとは、共通言語インフラストラクチャ(CLI)、仮想実行システム(VES)、仮想マシン(例:.NET、CoreFX、.NET Framework ) 、共通言語ランタイム(CLR)、またはMonoの管理下でのみ実行されるコンピュータプログラムコードのことです。この用語はマイクロソフトによって造られました。
マネージドコードとは、 C#、J#、Visual Basic .NETなど、20種類以上の高水準プログラミング言語で記述されたソースコードのコンパイラ出力のことです。
マネージドコードとアンマネージドコードの真の区別は、CLR実装と連携するアプリケーションを開発する場合にのみ重要であり、広く普及しています。多くの古いプログラミング言語(リスト参照)がCLRに移植されているため、特に混在環境では、マネージドコードを識別するためにこの区別が必要となります。この文脈では、CLRに依存しないコードは「アンマネージド」と呼ばれます。
Microsoft が .NET Framework とC++を連携させ始めたとき、混乱が生じました。また、 C++ のマネージド拡張機能の命名方法についても議論がありました。最初は Managed C++ と呼ばれていましたが、後にC++/CLIに改名されました。C++ プログラミング言語の作成者であり、C++ 標準化委員会のメンバーでもあるBjarne Stroustrup氏もこの問題について次のように述べています。「 C++ への CLI バインディング/拡張機能を何と呼ぶべきかという難しく議論の多い問題について、私は「ISO C++ への CLI 拡張機能」の略称として C++/CLI を好みます。名前に C++ を残しておくことで、基本言語が何であるかを人々に思い出させ、C++/CLI 拡張機能を備えた C++ の適切なサブセットとして C++ を維持するのに役立ちます。」[ 1 ]
Microsoft Visual C++コンパイラは、CLR 上で実行されるマネージド コードと、Windows 上で直接実行されるアンマネージド バイナリの両方を生成できます。[ 2 ]
マネージドコードを使用する利点としては、プログラマの利便性(抽象化レベルの向上、より小さなモデルの作成など)や、プラットフォーム(VMの実装を含む)によってはセキュリティ保証の強化などが挙げられます。仮想マシン上でコードが実行される歴史的な例は数多くあり、例えば、pコードを使用するUCSD Pascal言語や、 Dis仮想マシンを使用するベル研究所のオペレーティングシステムInfernoなどがあります。Javaは、Java仮想マシンで実行されるバイトコードによって、このアプローチを普及させました。
Google はAndroid NDK JNIドキュメントの中で、 JavaとKotlin はマネージド コードであるとも述べています。[ 3 ] [ 4 ]