このページの本文へ

.NET FrameworkとCommon Language Runtime

インサイドMicrosoft.NET(その2)

2000年10月25日 21時24分更新

文● Tetsuya Hara and Peter Hamilton

  • この記事をはてなブックマークに追加
  • 本文印刷
 

 複数の言語を扱い、安全にデータを配置し、堅牢にコードを実行するためにType Systemが導入された。Common Language Runtimeに実装されているType Systemは「Common Type System」と呼ばれ「オブジェクト指向の手続き型言語向け」に設計されている。

 複数のプログラミング言語間のクラスの継承が可能で、データをマーシャリングレイヤーなしに使えたり、またコンパイル時に、ほかの言語が作ったクラス、またはまったく別のクラスのタイプ情報を照合するといった作業や、コンパイル時(IL)と実行時(Nativeに変換するとき)の依存関係のチェックも、すべてこのCommon Type Systemと連携して行なっている。

 Common Type Systemは、Common Language Runtimeのなかの特定のブロックではなく、あらゆる場所で使われている。たとえば、複数言語から、データやクラスを継承させて派生させたり、それをインスタンス化するといったことが可能で、各言語はCommon Type Sysytemに問い合わせて、そのクラスやデータ、インスタンス化を行なうことになる。つまり、言語を超えてType Systemを通してタイプ情報を適合させる役目を担っているわけだ。

 Common Type Systemの特徴としては、「タイプセーフ」と「バージョニング」という概念がある。タイプセーフは、実際にメモリにアクセスしているデータから、メモリに配置されているインスタンスはいったい何か、インスタンス化するとき、コードがアクセスするとき、すべてタイプセーフを確認して実行する機構で、安全なメモリ管理と堅牢な実行管理に必須な仕組みである。

 もう1つのバージョニングという概念は同一のサービスやアプリケーションの複数のバージョンを正しく管理できる仕組みである。バージョニングによって、利用するサービスやアプリケーションが異なっていても不整合が起きずに動作させることができる。たとえば、実際にアプリケーションを配置するときに、配置したサービスAを、再利用しているアプリケーションまたはサービスBとCがあった場合、Bから利用しているAとCから利用しているAが同一サービスであっても、Aは異なるバージョンをおのおののアプリケーションのなかに導入することができるというものだ。つまりBとCのアプリケーションやサービスは、異なるサービスAのバージョンを、不整合なく利用できる。実際にDLLのバージョンや、DLLのバージョンの組み合わせによって不整合が起こって、ローディングされた時にうまく実行されない「DLL Hell」といった障害が発生する場合があるが、概念的にはこういう問題はいっさいなくなる。

 さらにCommon Type Systemでは、タイプ情報を含めた「配置」が可能である。アプリケーションのコードと実行コードとともに、タイプ情報がメタデータとして入っているので、クラスローダーは最初にクラスをロードする際に、いったい何をどこにロードするのかといったような情報を参照することになる。

 以上、「.NET Framework」を見てきたが、「.NET Framework」の最も重要な点は、サービスを構築するための機能を提供しているFramework群であるということ。そして、その構築したサービスやアプリケーションを、実際に実行し提供する場所であり、運用環境つまりインフラストラクチャでもあるということだ。そしてCommon Language Runtimeは、複数のプログラミング言語を統合し実行でき、多言語間でのソースコードの再利用性があって、それぞれのコードは堅牢なセキュリティシステムの上で、安全で効率的に運用される。

 最も重要な点は、インターネットを通してサービスとして提供されるので、十分なスケーラビリティをあらかじめ念頭において設計されているということだろう。そしてこの実行環境は、独立して動いているわけではなく、相互に今までのソフトウェア資産との乗り入れが可能となっているのである。

 

カテゴリートップへ

アスキー・ビジネスセレクション

ASCII.jp ビジネスヘッドライン

ピックアップ