━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
■第15回 .NETになって変わったこと(前編)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
前回、VisualBasic6.0から.NET化することで、過去の資産を活かそうという
お話をしました。
しかし、VisualBasic4.0~6.0は長い間使われてきたため、いきなり開発手
法を変えろと言われても抵抗がある人もいると思います。
そこで、今回はもう少し突っ込んで、.NETになると何が変わるのかを説明し
ようと思います。
読者の皆さんの中には、.NETに関係の無い仕事をされている方も多いと思い
ますが、軽く読んでいただいて「へえ~、.NETってこういう風になってるん
だ」と感じていただければと思います。
●MSILとJITコンパイラ
.NETでコーディングされたプログラムをコンパイルすると、MSIL(Mirosoft
Intermediate Language)という中間コードに変換されます。
中間コードにコンパイルされるという仕組みはVisualBasic6.0でも同じなの
ですが、.NETでは実行時にコードが必要になったとき、さらにマシン語に変
換して実行します。
この中間コードをマシン語に変換するものが、JITコンパイラです。
変換処理は実行時に行われるので、当然のことながら変換処理が行われてい
る際は遅くなりますが、2回目からはコンパイルは不要で実行のみとなるた
め、全体を通して考えると驚くほど高速で動作します。
●アセンブリ
.NETアプリケーションの構成単位であり、配置やバージョン管理もアセンブ
リ単位で行います。
アセンブリは1つ以上のファイル(DLL、EXE、リソース)で構成されます。
さらに、DLLやEXEは、MSILとメタデータから構成されています。
メタデータには、アプリケーションに関する情報が含まれています。
.NET以前は、アプリケーションに関する情報を管理するためにレジストリを
使用していましたが、.NETではレジストリが不要になります。
レジストリが不要になったことで、VisualBasic4.0~6.0で作成されたアプ
リケーションにありがちだった、DLLをバージョンアップしたら動かなくな
ったという現象が起こらなくなりました。
●マネージコード
共通ランタイム(Common Language Runtime:CLR)上で実行されるコードを
マネージコードと言います。
共通言語仕様により、様々な.NET言語間でメソッドを相互的に利用すること
ができるようになりました。
CLS準拠の言語は、20種類以上あるそうです。
一方で、CLSに関係なく作成されたコードを、アンマネージコードと言いま
す。
VisualBasic6.0や、VisualC++6.0で作成されたコードは、アンマネージコー
ドです。他にも、Win32APIもアンマネージです。
基本的に、全てをマネージコードにするのが望ましいのですが、旧資産を活
かすとなると、そう簡単にはいきません。
例えば、昔作成したCOMを使いたいということがあると思います。
そのような場合のために、CCW(COM Callable Wrapper)や、RCW(Runtime
Callable Wrapper)という仕組みが用意されており、.NET上からCOMを呼び
出すことができるのですが、動作コストが高いので検討が必要でしょう。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━