TOP
>
システム開発
> 開発効率を考慮した仕組み
.NETが目指したものは何か
第1回:あらためて「.NET」を考える
著者:
マイクロソフト 松崎 剛
2007/2/20
前のページ
1
2
3
4
次のページ
開発効率を考慮した仕組み
CLRはコンパイル以外にも他にも重要な仕事をしていて、使わなくなったメモリを見つけると自動的に解放を行います。メモリ管理の大変さというのは、苦労された経験のある方は納得されると思いますが、非常に煩わしく「怖い」ものです。
メモリリークの多い下手なコードを作ったら最後、メモリリークしている箇所で落ちてくれることは少なく、まったく関係ない関数の出口などでメモリエラーとなり、地獄のようなデバッグやリソース(メモリなど)のトレース作業に悩まされることになります。つまり.NET Frameworkの開発者は、このリソースに関する面倒な手続きを気にする必要がないのです。
また、アセンブリと呼ばれる.NET Frameworkで動作するモジュールには、「キーペア」と呼ばれる公開キー/秘密キーのペアを使って署名を添付することができます。しかも他のアセンブリがこの署名付きのアセンブリを参照して使う場合には、この署名の中の公開キーも含めて同一のアセンブリであるか識別を行います。万一、公開キーの内容がコンパイル時と変わってしまった場合には参照できない(動作しない)ような仕組みになっています。
この署名付きのアセンブリと同じ署名を持つアセンブリを構築/変更できるのは、該当のキーペア(公開キー/秘密キーのペア)を持っている開発者だけということになります。
この仕組みは非常に重要です。例えば、.NET Frameworkインストール時に標準で提供されている共通ライブラリ(Base Class Library)のアセンブリを上書きして悪意のある動作を埋め込もうとしても、ファイルの上書きはできても、参照している周りのアセンブリが単に動作しなくなるだけで、動きを変えるといったことはできません。
.NET Frameworkがインストール時に提供している共通ライブラリのアセンブリの「キーペア」は、世界で唯一Microsoftの.NET Frameworkの開発者しか持っていないからです。Microsoft社が提供しているアセンブリを例に記述しましたが、この安全性は、同様に、皆さんが開発されたアセンブリについても同じ恩恵を受けることができます。
また、あるアセンブリが別のアセンブリを参照して使う場合には、上述した公開キーの情報以外に、モジュールのバージョン番号も含めて同一のアセンブリであるか識別を行っています。そして、異なるバージョンで同一のアセンブリを同一マシン上に配置する(つまり、複数の異なるバージョンのアセンブリを同一マシン上に配置する)といったことが可能になっています。
この仕組みにより、例えばアセンブリBがアセンブリXのバージョン1.0.0.0を参照している状態で、アセンブリAの都合によってアセンブリXのバージョン1.0.0.1をインストールしたとしても、アセンブリBはその影響を受けず、アセンブリXの元のバージョン(バージョン1.0.0.0)を参照したまま動作させるといったことが可能になっています。
.NET以前の場合は、例えば、開発環境で動いていたモジュールが本番環境で動かなかったり、あるプログラムをインストールしたことにより関係のない別のプログラムが停止してしまったりといった状況におちいることがありました。リンクしているDLL(ライブラリ)をすべて調査し、環境間でどのような相違があるか調べまわるといった、いわゆる「DLL地獄」と呼ばれる状況に悩まされた開発者の方もおられたと思いますが(何を隠そう、筆者もその経験者です)、.NETではそうした地獄から開発者を解放しています。
図3:アセンブリのサイドバイサイドとDLL地獄からの解放
これら.NET Frameworkの動作上の仕様はすべて公開されていて、例えばこの公開された仕組みで動くフレームワークのエンジンを独自に構築することもできるでしょうし、あるいは、C#やVisual Basic以外の独自の言語のコンパイラを作成して.NETのアセンブリ(物理的にはPEファイル)を構築するということも理論上可能です。
事実、CLIを実装したMicrosoft以外の団体や企業による実装系もいくつか存在します。.NET Frameworkをサポートしている言語は、C#やVisual Basic .NET以外に、COBOL、Pascalなどがあり、さらに、他のサードパーティが提供しているコンパイラなども含めれば20種類以上におよんでいます。
前のページ
1
2
3
4
次のページ
著者プロフィール
マイクロソフト株式会社 松崎 剛
1969年生まれ。慶応義塾大学院数理科学専攻修士(博士前期)課程修了。1994年より、情報システム系技術者としてのシステム構築、ソフトウェアプロダクト開発、技術系コンサルティング(アドバイザー業務)などを複数企業で経験。マイクロソフトでは、デベロッパーエバンジェリストとして、開発者向けのセミナーなどを主体とした活動を実施。
INDEX
第1回:あらためて「.NET」を考える
「.NET」がそもそも目指したもの
フレームワーク(実装基盤)としてみた「.NET」
開発効率を考慮した仕組み
あらためて、「.NET」を考える