● CLR(Common Language Runtime)
 CLRは,後述するCLS(Common Language Specification)に基づいて実装された言語のための中間言語ライブラリで,.NETにおけるプログラミングモデルの中心ともいうべきものです.

 CLRは,図4に示すように,基本実行クラスを各プログラミング言語に提供し,各プログラミング言語はCLSにしたがって基本実行ライブラリを呼び出すようにコンパイルされます.すなわち,中間言語に置き換えられたILコードを,CLRがJITでネイティブに変換して実行するわけです.

〔図4〕CLRの実行モデル

 

 (約14Kバイト)

● CLRにおけるILコンパイラ,JITモデル
 ILは中間言語ですから,プロセッサが実行するにはネイティブコードにコンパイルする必要性があります.これを行うのがJIT(Just In Time)コンパイラです.

 JITはすでにWeb技術の一つとして有名ですが,ILではWebだけでなく,一般のアプリケーションにおいても.NETに基づいてILを使って汎用性を確保します.

 さて,ソースからILにコンパイルされ,そのILをさらにJITがネイティブにコンパイルするわけですが,その際にネイティブコードの生成効率を上げるために,三つのコンパイルモデルがあります(図5).

〔図5〕CLRのILとJIT

 

 (約10Kバイト)

@ Econo JIT
b最適化されていないネイティブコードを生成
b毎回コードは破棄され,生成し直す

 Econo JITでは毎回ネイティブコードが生成され,時間更新が必要な用途に適しています.たとえば,Webのデータベース更新処理などに使います.現在の利用法では,Javaアプレットのようなコンパクトなプログラムに適していると思われます.

A Standard JIT
b最適化されたネイティブコードを生成
bILコードの整合性検証が含まれる

 Standard JITでは,通常のアプリケーションのように実行時にスタートアップ処理が行われます.この場合,コード使用中にコードの再利用が起こったとしても再生成を行う必要がないので,比較的大きなアプリケーションなどに適しています.

B Pre JIT
bインストール時または呼び出し要求時にコード生成
bスタートアップ作業の削減

 Pre JITでは,インストール時もしくは呼び出し要求時にコンパイルされます.したがって,スタートアップ処理を行わない固定データを使ったプログラムなどに適しています.

 このように,JITの使用時期をプログラムコードに合わせて設定することでプログラム実行時の最適化のレベルを変え,より動的なプログラムの実行を実現します.

 また,動的なプログラムの実行が可能になったことによって,ASP+におけるサーバプログラムの動的な開始,停止(中断),アップデート処理などにおいて,Locked DLLのような問題を防ぎ,再起動しなくてもサーバプログラムの入れ換えができるようになります.

▲Locked DLL
 Locked DLLとは,サービスなどでOSが使用しているプログラムの書き換えといった不正な処理を行わないようにするために書き込み禁止などを行うことですが,サーバプログラムでは,サービスがスタートすると停止させるまでプログラムがロックされた状態になります.

 DLL形式で起動時に自動ローディングを行うようなとき,システム領域にDLLが読み込まれないようにするため,Windows2000などの新しいWindows Installerを使用して再起動をするときに,サービス開始前にDLLを読み込まないようにするといった対処が必要になってきます.

 Windows95/98でCOMやActiveXを開発している人の中には,デバッグの際に上書きができなくなって悩んだ経験をしている人も多いと思います.この場合,レジストリから外して再起動することによりDLLを読み込まずに起動し,その後DLLを入れ替えてデバッグを再開しなければなりませんでした.

● CTS(Common Type System)
 CRLにより言語依存性が解消されることが理解できたと思いますが,次にプログラム間のタイプ依存性について,CTSを例にして解説します.

 CTSはその名前が示すように,コードなどのタイプ情報をチェックする機構のことです.プログラム言語ではサポートされていないタイプ情報を提供することで,異なる言語間であってもクラス継承(C#とC++のクラスの継承)が可能になります.

 もちろん,クラスの継承がなされるということは,言語間のデータサイズの問題などもCTSによって管理が行われるということです.VBScriptやCOMなどでおなじみのVARIANT型のようなタイプ情報付き変数の概念をプログラムコードにまで拡張し,異種言語間のタイプの適合や依存性のチェック機構を提供するものです.

 CTSによる利点をまとめると,次のようになります.
@ プログラミング言語間のクラスの継承
A ILコンパイル時,ネイティブ実行時の依存性チェック
B タイプセーフ機構(安全なメモリ管理機構と堅牢な実行管理)
C バージョニング(アプリケーション間の独立実効可能)
D タイプ情報の保存と配置

● サポートされる予定の言語
 CLRを使用することで,言語仕様によるプログラミング制限は非常に少なくなり,目的とするソフトウェアによって言語を選択するのではなく,なじんでいる言語を使用してプログラミングを相互に行うことができるようになります.

 7月末現在の予定では,Visual Basic,Visual C++,C#が対象にあげられていますが,表1に示す言語が.NETに対応する予定と発表されています. 

〔表1〕発表されている.NET対応言語

COBOL Eiffel Mercury ML(Machine Language) Oberon
Perl Python Profiling Small Talk Scheme

http://www.microsoft.com/presspass/press/2000/Jul00/PDCGroundswellPR.asp



トップページへ戻る 

プロローグ
次のVisual Studio
.NETの実行モデル
.NET IL(Intermeditate Language)
C#について
C#の概要


Copyright 2000 広畑 由紀夫