thumb|CLRの動作イメージ。バイトコードを機械語に変換、実行する。 共通言語ランタイム () は、Microsoft が開発した .NET プラットフォームにおいてマネージドコードを実行するための実行環境であり、異なるプログラミング言語で作成されたプログラムを共通の基盤上で動作させるために設計された。CLR は共通言語基盤(CLI)仕様に基づく実装であり、複数言語間の相互運用を前提とした点を特徴とする。

CLR 上で実行されるプログラムは、各言語のソースコードから言語に依存しない共通中間言語(CIL)へコンパイルされ、実行時に Just-In-Timeコンパイラによって各環境の機械語へ変換され実行される。また CLR は、メモリ管理(ガベージコレクション)、型安全性の検証、例外処理、スレッド管理、セキュリティ検証、アセンブリ管理などを担い、開発者がこれらの基盤処理を個別に実装する負担を軽減する。

CLR は当初 Windows 上の .NET Framework の実行基盤として提供されたが、その後の .NET の発展に伴い、オープンソース実装を含むクロスプラットフォーム対応の実行環境へと展開され、複数のオペレーティングシステムおよびデバイス上で .NET アプリケーションを実行する基盤となっている。

実行環境の変遷と実行方式 .NET Framework 1.x - 4.x で使用されている CLR は Windows 上のみで動作する。.NET CoreはMITライセンスのオープンソースになり、CoreCLRはWindows、macOS、Linux、FreeBSD で動作するdotnet/coreclr - GitHub。.NET 5以降は.NET RuntimeGitHub - dotnet/runtime: .NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.と呼ばれるようになり、.NET 6では実行環境としてAndroidやiOSのサポートも加わったcore/os-lifecycle-policy.md at main · dotnet/core · GitHub。

CLRは、共通中間言語 (CIL) と呼ばれる、プログラミング言語や環境に依存しない中間言語(中間表現)を解釈する。CILは実行時にJITコンパイラによって機械語に変換され、実行される。.NET Framework 4.6 では64ビット版は RyuJIT という名称のJITコンパイラが搭載されたRyuJIT and .NET 4.6 - JIT, NGen, and other Managed Code Generation Stuff - Site Home - MSDN Blogs。ただし.NET 4.6時点のRyuJITには多数の不具合があり、.NET 4.6.2にアップグレードするか、RyuJITを無効化する回避策が紹介されていたRetargeting changes for migration to .NET Framework 4.6.x - .NET Framework | Microsoft Learn。RyuJITは.NET Coreでも利用されているPerformance Improvements in RyuJIT in .NET Core and .NET Framework - .NET Blog。

脚注 出典

関連項目 Java仮想マシン