|
||||||||||||
| 前のページ 1 2 3 4 次のページ | ||||||||||||
| フレームワーク(実装基盤)としてみた「.NET」 | ||||||||||||
|
「.NETとは何か」その答えはもう1つ存在します。 .NETというものは、構想の段階を終えてCLIの仕様や、.NET Frameworkという具体的な実装系や技術が登場した時点から、前述のような観念的な意味以上に「狭義であるがより具体的な実装基盤の技術」としても捉えられるようになってきました。そして現在では、むしろ.NETというとこうした観点が定着しつつあります。 例えば、.NETに慣れ親しんだ開発者の方から、「今回開発したシステムは.NETで作られている」とか、「アプリケーションを.NET対応に作り直した」といった言葉の使い方がされているのをよく耳にすることがありますが、この場合には、これから説明するより狭義な意味での.NET(=CLI実装や.NET Frameworkという具体的な実装系を伴った技術体系)を指していることになります。 まず、単純に「C#やVB.NETで作ったもの=.NET」ではありません。例えば、ASP.NETという.NET上のWeb開発環境を使ってマークアップ言語で記述したスクリプト部分(aspxファイル)は.NETではないのかというとそうではありません。では、ここで説明する.NETの技術体系の本質とはいったい何でしょうか。その結論を述べる前に、具体例をいくつか示して、全体感を整理していきます。 |
||||||||||||
| フレームワークの動作の仕組み | ||||||||||||
|
もっとも重要なのは、まったく同じ手順の2つのプログラムを.NET Frameworkでコンパイルした場合と、.NET Framework以前の方法(例えば、従来のC++言語コンパイラ)でコンパイルした場合、この2つのモジュールは性質のまったく異なったモジュールになるという所です。 .NET以前の方法で構築(コンパイル)した場合には、そのマシンのCPUが読み込める機械語の形式に翻訳されたネイティブなモジュールになります。すなわち、CPUのアーキテクチャが異なる別のハードウェア上で動作させることは、一般的にはできません。OSが提供するAPIを使用している場合には、OSの種類やバージョンにも大きく影響を受けることになります。 一方、.NET Frameworkで動作するモジュールは、.NET Frameworkすべてに組み込まれているCLR(Common Language Runtime)と呼ばれるプログラムが読み込めるPEファイル(ポータブル実行ファイル)と呼ばれる形式のファイルで構成されるモジュールになっています(以降の記述では、この論理的なモジュールのことを「アセンブリ」と呼びます)。 このファイルは、上述のようなOSやデバイス(CPUなど)に固有な翻訳はされておらず、コンパイルしたPEファイルには、プログラマが記述したプログラムそのものに近い形のコードが独自のフォーマットで組み込まれており、CLRはこのコードを読み込んで実行するといったように動作します(注2)。
※注2:
実際には、IL(中間言語)に記述された処理は、インタプリタ方式で読み込んで動作するのではなく、パフォーマンスを考慮して、実行時にJIT(Just-In-Time)コンパイラと呼ばれるものを使用して、ネイティブモジュールをメモリ上に配置してから、動作しています。
ガベージコレクトや型チェックなどの仕組みなど、.NET Frameworkで開発されたプログラムのパフォーマンスは、C言語などを使ってネイティブ向けに作成されたものより劣りますが、このように可能な限り大きなパフォーマンスの差がでないよう設計されています。 すなわち、CLRを含む.NET Frameworkの実行環境が動作している環境であれば、OSに関係なく、またそれがパソコン以外のデバイスなどであろうとも同様に実行されることになります(注3)。
※注3:
正確には、パフォーマンスを向上させたい場合などに備え、PEファイルにネイティブコード生成用のコマンドを実行して、プラットフォームに依存したモジュールとして構築することもできます。ただしこの場合でも、IL(中間言語)で記述された部分は保持されており、別のプラットフォーム上に配置した場合には、このILを使って再コンパイルされます。
|
||||||||||||
|
前のページ 1 2 3 4 次のページ |
||||||||||||
|
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||
|
|
||||||||||||
|
||||||||||||


