● CLR(Common Language Runtime) CLRは,後述するCLS(Common Language Specification)に基づいて実装された言語のための中間言語ライブラリで,.NETにおけるプログラミングモデルの中心ともいうべきものです. CLRは,図4に示すように,基本実行クラスを各プログラミング言語に提供し,各プログラミング言語はCLSにしたがって基本実行ライブラリを呼び出すようにコンパイルされます.すなわち,中間言語に置き換えられたILコードを,CLRがJITでネイティブに変換して実行するわけです.
● CLRにおけるILコンパイラ,JITモデル JITはすでにWeb技術の一つとして有名ですが,ILではWebだけでなく,一般のアプリケーションにおいても.NETに基づいてILを使って汎用性を確保します. さて,ソースからILにコンパイルされ,そのILをさらにJITがネイティブにコンパイルするわけですが,その際にネイティブコードの生成効率を上げるために,三つのコンパイルモデルがあります(図5).
(1) Econo JIT Econo JITでは毎回ネイティブコードが生成され,時間更新が必要な用途に適しています.たとえば,Webのデータベース更新処理などに使います.現在の利用法では,Javaアプレットのようなコンパクトなプログラムに適していると思われます. (2) Standard JIT Standard JITでは,通常のアプリケーションのように実行時にスタートアップ処理が行われます.この場合,コード使用中にコードの再利用が起こったとしても再生成を行う必要がないので,比較的大きなアプリケーションなどに適しています. (3) Pre JIT Pre JITでは,インストール時もしくは呼び出し要求時にコンパイルされます.したがって,スタートアップ処理を行わない固定データを使ったプログラムなどに適しています. このように,JITの使用時期をプログラムコードに合わせて設定することでプログラム実行時の最適化のレベルを変え,より動的なプログラムの実行を実現します. また,動的なプログラムの実行が可能になったことによって,ASP+におけるサーバプログラムの動的な開始,停止(中断),アップデート処理などにおいて,Locked DLLのような問題を防ぎ,再起動しなくてもサーバプログラムの入れ換えができるようになります. ▲Locked DLL DLL形式で起動時に自動ローディングを行うようなとき,システム領域にDLLが読み込まれないようにするため,Windows2000などの新しいWindows Installerを使用して再起動をするときに,サービス開始前にDLLを読み込まないようにするといった対処が必要になってきます. Windows95/98でCOMやActiveXを開発している人の中には,デバッグの際に上書きができなくなって悩んだ経験をしている人も多いと思います.この場合,レジストリから外して再起動することによりDLLを読み込まずに起動し,その後DLLを入れ替えてデバッグを再開しなければなりませんでした. ● CTS(Common Type System) CTSはその名前が示すように,コードなどのタイプ情報をチェックする機構のことです.プログラム言語ではサポートされていないタイプ情報を提供することで,異なる言語間であってもクラス継承(C#とC++のクラスの継承)が可能になります. もちろん,クラスの継承がなされるということは,言語間のデータサイズの問題などもCTSによって管理が行われるということです.VBScriptやCOMなどでおなじみのVARIANT型のようなタイプ情報付き変数の概念をプログラムコードにまで拡張し,異種言語間のタイプの適合や依存性のチェック機構を提供するものです. CTSによる利点をまとめると,次のようになります. CLRを使用することで,言語仕様によるプログラミング制限は非常に少なくなり,目的とするソフトウェアによって言語を選択するのではなく,なじんでいる言語を使用してプログラミングを相互に行うことができるようになります. 7月末現在の予定では,Visual Basic,Visual C++,C#が対象にあげられていますが,表1に示す言語が.NETに対応する予定と発表されています.
Copyright 2000 広畑 由紀夫 |
Copyright 1997-2000 CQ Publishing Co.,Ltd.