Common Language Runtime (CLR) は、.NET Frameworkおよび.NET Core (.NET 6以降を含む) における実行環境であり、アプリケーションのメモリ管理、セキュリティ、例外処理、スレッド管理を提供します。本ハンドブックでは、CLRの仕組み、機能、使用方法を解説します。

CLRの特徴

編集
  • クロスランゲージ統合: 異なる言語で記述されたプログラムが統合的に動作。
  • 共通中間言語 (CIL): ソースコードは一旦CILにコンパイルされ、実行時にネイティブコードに変換。
  • 自動メモリ管理: ガベージコレクション (GC) を通じて効率的なメモリ管理を実現。
  • 例外処理の統一: 統一された例外処理機構を提供。
  • コードアクセスセキュリティ (CAS): アプリケーションのセキュリティ制御を実現。

CLRの仕組み

編集

実行プロセス

編集
  1. ソースコード: C#VB.NETなどで記述。
  2. コンパイル: CIL (Common Intermediate Language) に変換。
  3. アセンブリ: CILコードとメタデータを含む。
  4. JITコンパイル: 実行時にネイティブコードへ変換。

メモリ管理

編集

CLRでは、以下の手法を通じてメモリを管理します:

  • スタックとヒープ: ローカル変数はスタック、オブジェクトはヒープに格納。
  • ガベージコレクション: 不要になったオブジェクトを自動で回収。

ガベージコレクションの動作

編集
  • ジェネレーション: オブジェクトは3つの世代 (Gen 0, Gen 1, Gen 2) に分類される。
  • マーキングとスイープ: 到達可能なオブジェクトをマーキングし、不要なオブジェクトをスイープ。

主な機能

編集

クロスランゲージの互換性

編集

CLRは、複数の言語で記述されたコードの相互運用性をサポートします:

型システム

編集
  • 共通型システム (CTS) により、すべてのデータ型は統一された形式で表現される。

セキュリティ

編集

CLRは以下のセキュリティ機能を提供します:

  • コードアクセスセキュリティ (CAS): アセンブリの権限を制御。
  • 検証と型安全性: アセンブリの信頼性をチェック。

使用例

編集

C#での基本的なプログラム

編集

以下は、CLR上で動作する基本的なC#プログラムの例です:

using System;

class Program
{
    static void Main()
    {
        Console.WriteLine("Hello, CLR!");
    }
}

CILコードの例

編集

上記のC#コードをコンパイルすると、以下のようなCILコードが生成されます:

CIL_0000: ldstr "Hello, CLR!"
CIL_0005: call void [mscorlib]System.Console::WriteLine(string)
CIL_000a: ret

CLRの利点

編集
  • 効率的なパフォーマンス: JITコンパイラによる最適化。
  • 簡易なデバッグ: 一貫したエラーメッセージと例外処理。
  • 広範なライブラリ: .NET標準ライブラリとの連携。

注意点

編集
  • ガベージコレクションによるパフォーマンスオーバーヘッドに注意。
  • JITコンパイルの初回実行時に遅延が発生する場合あり。

まとめ

編集

CLRは、.NETプラットフォームの基盤として、効率的なアプリケーション開発を可能にします。その柔軟性と強力な機能を活かし、さまざまな用途で活用されています。