連載

プロフェッショナルVB.NETプログラミング

第1回 さらなる進化を遂げたVisual Basic

(株)ピーデー
川俣 晶
2002/03/16

Page1 Page2 Page3 Page4 Page5 Page6

実行環境の変化

 コンピュータ言語は、主にインタプリタとコンパイラに分けられる。インタプリタは実行時にプログラムを解釈するが、コンパイラはコンパイルという処理でプログラムを解釈して、マイクロプロセッサが直接実行可能な機械語コードを生成する。コンパイラを使用すると、コンパイルという手順が増えるが、その代わり実行時の速度が速くなる。一方、インタプリタはコンパイルという手続きを経なくてもすぐに実行できて小回りが利くので、手軽に使うのに適している。そのため、初期のBASICは、インタプリタとして実装されることが多かったが、実用ソフトの作成に使われるようになると、コンパイラとして実装されたBASICも増えてきた。例えばVB 6は、コンパイラとしての機能も備えており、高速で実行できる機械語コードを生成することもできる。

 だが、機械語コードを生成することは、最終的なゴールではない。なぜなら、機械語コードにも弱点があるからだ。機械語とはマイクロプロセッサのアーキテクチャにべったり依存するものであるため、アーキテクチャの異なるマイクロプロセッサ上では実行できないか、エミュレーションで実行するしかなくなる。一般的にいえば、エミュレーションを行うと、速度はかえって遅くなる恐れがある。また、マイクロプロセッサに直接かかわるものであるため、セキュリティの懸念も出てくる。インターネット上には必ずしも出所が定かではないプログラムが多数存在するが、その中には便利で利用価値の高いものも少なくない。しかしそういうプログラムを生の機械語として実行したとき、万一悪意ある機能が隠されていると、監視や防衛手段がほとんどないままに、プログラム・コードが実行される恐れがある。生の機械語プログラムをそのまま配布して実行するシステムはあまりに危険である。

 このような問題を解決する方法として考えられているのが、仮想マシン(virtual machine)という方法である。仮想マシンは一種の空想上のマイクロプロセッサで、仮想的な固有の機械語を持っている。プログラム言語のコンパイラは、生の機械語ではなく、仮想の機械語を生成する。そして、仮想の機械語は、仮想マシンによって解釈され実行される。

 仮想マシンが仮想の機械語を解釈する方法は2種類ある。1つはインタプリタで、もう1つはコンパイラである。現在は、プログラムのロード時や実行時にコードをコンパイルしてから実行するという方法が主流である。もちろん、このコンパイラは生の機械語を生成するが、コンパイルする段階で厳密なセキュリティ・チェックが入るため、生の機械語を配布するよりもはるかに安全性が高い。また、仮想マシンを交換すれば、マイクロプロセッサのアーキテクチャの違いに対応することも容易である。このようなコンパイラは、JIT(Just In Time)コンパイラという。余談だが、VB.NETでは、インストール時や実行の直前などにこのようなコンパイルが行われる。

 仮想マシンとしては、Java用のJavaVMが有名である。Microsoftは新しい世代の実行環境として、.NET Frameworkを開発したが、この中にも仮想マシンが含まれている。VB.NETは、文字どおり、この.NET Frameworkの仮想マシンで実行するプログラムを開発するために使用されるプログラム言語である。そのため、Intel x86(IA32)アーキテクチャ向けの開発言語であるVB 6とは、まったく異質の存在になっている。

 VB.NETで開発したプログラムを配布する場合は、作成したプログラムだけでなく、.NET Frameworkランタイムも一緒に配布する必要がある。これは、一見VB 6で開発したプログラムを配布するときにランタイムDLLを一緒に配布する必要があることと同じように見えるかもしれない。しかし、VB 6のDLLはあくまでVB 6専用のDLLであるのに対して、.NET Frameworkランタイムはほかのプログラム言語と共通のものである。いま述べたように、当面は.NET Frameworkランタイムをプログラムとともに提供する必要があるが、将来的には、Windows OSに標準で含まれるようになる予定である。.NET Frameworkランタイムを配布しなければならないのは過渡期の状況で、これが標準としてどのパソコンにも入るようになれば、ランタイムの配布は不要になるだろう。

 なお余談だが、Windows XPにはVB 6のランタイムDLLが標準で含まれているようで、ランタイムDLLを明示的に追加しなくても、VB 6で作成したアプリケーション・ソフトが動作した。このような便利さは、これまではVBでのみ享受できたものだが、.NET Frameworkの時代になれば、VB以外の言語でも同じランタイムで動作するため、便利さを享受できる範囲が拡大するといえる。

 最後にもう一度まとめよう。VB 6で作成したプログラムを実行するにはVB 6のランタイムDLLが必要であったが、VB.NETで作成したプログラムを実行するには、.NET Frameworkランタイムが必要である。.NET Frameworkランタイムは、当面はプログラムとともに提供されなければならないが、将来的には、Windows OSに標準で組み込まれる見込みである。


 INDEX
  第1回 さらなる進化を遂げたVisual Basic
    1.これは大事件である(1)
    2.これは大事件である(2)
    3.開発環境の比較
  4.実行環境の変化
    5..NET Frameworkより得るもの(1)
    6..NET Frameworkより得るもの(2)
 
「プロフェッショナルVB.NETプログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間