すずひろドットコム       アクセス数(2003.05〜)
本日:26
昨日:86
累計:109695
すずひろパソコン道場
 
        ホーム > パソコン道場 > 上級編 > 1.プログラミングを始めるにあたって > 1−4.プログラムの実行形式    
 
パソコン教室 パソコン道場 創造工房 メールマガジン ショッピングモール
プロフィール 著書 お問い合わせ リンク サイトマップ
 
     
1−4.プログラムの実行形式
     
プログラムは、人間が記述したソフトウェアの設計図にあたるソースコードが、コンピュータ上で実行可能なオブジェクトコードという形式に変換され実行されます。

プログラミング言語の種類は多数ありますが、それらのプログラミング言語は文法が異なるだけであって、ソースコードは人間が目で見て理解できるものです(でないと、人間がプログラミングすることができなくなってしまいます)。

多くのソースコードは、英単語のステートメント(命令)が使われているので、中学や高校で習う程度の英単語の意味を知っていれば、そのステートメントが何をやっているかおおよその見当がつきます。

プログラムの実行形式の話をするとき、そのプログラムのソースコードがどうやってオブジェクトコードに変換されるのかを知っていなければなりません。

そこで、まずプログラムのソースコードオブジェクトコードに変換される方式を見てみましょう。

プログラムのソースコードオブジェクトコードに変換する方式は、一括して行う方式と、実行時にそのつど行う方式に大別することができます。

プログラムのソースコードオブジェクトコード一括して変換する方式の言語コンパイル型言語実行時にそのつど行う方式の言語インタープリタ型言語と呼んでいます。

そして、インタープリタ型言語の中に、スクリプト言語が含まれます。

これらの関係を、「1−1.押さえておきたいプログラミング言語」で取り上げたプログラミング言語に当てはめると次のようになります。

このように、C++コンパイル型言語JavaScriptVBScriptスクリプト言語
JavaSQLはその中間ということになります。

それでは、コンパイル型言語インタープリタ型言語について見てみましょう。

■コンパイル型言語(Compile Language
プログラムのソースコードをオブジェクトコードに変換する言語で、変換するためのソフトウェアをコンパイラ(Compiler)と呼んでいます。
コンパイル型言語は一括して変換を行い、実行可能なオブジェクトコードをファイルとして生成します。

■インタープリタ型言語(Interpreter Language
プログラムのソースコードをオブジェクトコードに変換しながら実行する言語です(実行可能なオブジェクトコードをファイルとして生成しません)。インタープリタ型の言語はコンパイル型言語とは違いプログラムの実行時に変換を行うため、実行速度はコンパイラ型言語よりも遅くなります。

■スクリプト言語(Script Language
映画や舞台のセリフが台本(Script)に記述されているのと同じように、アプリケーションの動作内容を記述したものをスクリプトと呼び、そのスクリプトを記述するための言語です(ワープロソフトや表計算ソフトなどのマクロもスクリプト言語の一種ということになります)。
また、記述方法がほかのプログラミング言語と比べて簡単であることから、簡易プログラミング言語と呼ばれることもあります。
ほかのプログラミング言語と比べると、機能は少ないものの覚えるのが比較的簡単であるため、人気が高くなってきています。
最近では、動的なWebページ(ホームページ)を作成するために、HTML(HyperText Markup Language)に付加する形で使用されることが多くなってきました(JavaScriptとVBScript以外にもPHPやPerlなどが有名です)。
スクリプト言語もインタープリタ型言語と同様、オブジェクトコードに変換しながら実行するため、実行速度はコンパイラ型言語よりも遅くなります。

このように、プログラムのソースコードオブジェクトコードに変換される方式を分類すると、コンパイル型言語インタープリタ型言語スクリプト言語に分類することができます(厳密にいえばスクリプト言語インタープリタ型言語の一種ということになりますが、スクリプトという用語自体が有名になったため、スクリプト言語プログラミング言語のひとつとして扱われるようになってきました)。

続いて、本題であるプログラムの実行形式を見てみましょう。

プログラムの実行形式は、今まで見てきたプログラムのソースコードオブジェクトコードに変換される方式に依存しています。

インタープリタ型言語スクリプト言語は、実行時にソースコードが自動的にオブジェクトコードに変換されるため、オブジェクトコードはファイルとしては生成されません。

それに対し、コンパイル型言語は、ソースコードオブジェクトコードのファイルとして生成されます。

つまり、実行可能なオブジェクトコードがファイルとして生成されるのは、コンパイル型言語ということになります。

Windowsの場合、実行するプログラムのオブジェクトコードの多くはEXE(エグゼ)形式になっています(EXE形式のプログラムは、ファイルの拡張子が「.EXE」になっているため、EXEファイルとも呼ばれています)。

このEXE形式は、MS-DOSやWindows環境において、EXEモデルでプログラミングされた実行ファイルを格納しておくためのファイル形式です。

それに対し、MS-DOS環境ではCOM(コム)モデルでプログラミングされた実行ファイルを格納しておくためのCOM形式というファイル形式が存在します(COM形式のプログラムは、ファイルの拡張子が「.COM」になっているため、COMファイルとも呼ばれています)。

EXEモデルCOMモデルを比較すると次のようになります。

■EXEモデル
ファイルの拡張子が「.EXE」となっていて、扱えるコードやデータの大きさに制限はありません。
ファイルの先頭には、EXEヘッダと呼ばれる正しいEXEファイルであることを示すマークであるシグネチャ、ファイル内のデータのサイズ、スタック位置、実行開始アドレス、リロケータブル項目などの情報が格納されています(Win32対応の場合は、NEW EXEヘッダとそのデータ自身なども格納されています)。

■COMモデル
ファイルの拡張子が「.COM」となっていて、最大で64Kバイトまでのコードやデータを扱うことができます。
ファイルの内容は、オフセット0100hからはじまる単なるx86のプログラムコードやデータの集まりであり、特別なヘッダなどは何もついていません。

また、Windowsにおいては、複数のプログラムが共通して利用する汎用性の高いサブプログラムを部品化してファイルに保存するDLL(Dynamic Link Library、ディー エル エル)という方式がとられています(DLLは、ファイルの拡張子が「.DLL」になっているため、DLLファイルとも呼ばれています)。

この方式では、サブプログラム(DLL)は必要に応じて呼び出されるため、メモリを効率的に利用することができます(サブプログラムがメーンとなるプログラムの中に格納されていないため、その分、HDDの容量を節約することができます)。

DLLは自分で作成することもできますが、Microsftなどからも多数のDLLが提供されています(基本的なプログラムであれば、Microsftから提供されているDLLが持つ機能を呼び出すだけで作成することができるようになっています)。

そのため、すでにDLLとして提供されている機能は新規に開発せずにすむので、プログラムの開発効率が飛躍的に向上しました。

このように、たいへん便利なDLLですが、使用する際にはちょっとした注意が必要になりま
す。

DLLは、Windows側に標準で用意されているものと、使用するコンピュータ言語側で用意されているものとが存在しています。

Windows側に標準で用意されているDLLは何も心配はないのですが、使用するコンピュータ言語側で用意されているDLLは、そのコンピュータ言語の開発環境がインストールされていなければ利用することができません。

しかし、特定のプログラムを実行するためだけにコンピュータ言語の開発環境をインストールしていては、HDDの容量が無駄になってしまいます。

そのため、特定のコンピュータ言語で作成されたプログラムの実行だけを目的としたランタイム(Run Time)というものが提供されるようになりました。

ランタイムランタイムライブラリとも呼ばれ、そのコンピュータ言語の開発環境からプログラムの実行に必要なDLLなどを抽出したもので、通常は無償で提供されています(よく、フリーソフトなどの説明に、「このソフトを実行するためには○○のランタイムがインストールされている必要があります。」と記載されているのはこのことです)。

ランタイムは、プログラムを実行(Run)した時(Time)という意味を表しています。

そのため、ランタイムを使用するプログラムがエラーを起こすと、実行時に「ランタイムエラー(Run Time Error)」が発生します。

なお、コンパイル型言語の場合は、コンパイラがプログラムのソースコードオブジェクトコードに変換する前に文法をチェックするため、記述したソースコードに文法の誤りがあれば、コンパイル時に「コンパルエラー(Compile Error)」が発生します(インタープリタ型言語にはコンパイル作業がないため、基本的にすべてのエラーが「ランタイムエラー」になります)。

もちろん、Windows自信もプログラムであり、さまざまなDLLを内部的に呼び出しているた
め、予期せぬ事態が発生したときなどでは「ランタイムエラー」が発生することがありま
す。

このように、現在のWindowsにおけるプログラム開発には、DLLが重要な役割を果たしています(現在のWindowsにおけるプログラムの実行形式は、EXE形式DLLが中心になっていま
す)。

今まで見てきたプログラムの実行形式をまとめると次のようになります。

Windowsにおけるプログラムの実行形式は、EXE形式DLLランタイムの関係を最初のうちにしっかりと把握しておきましょう。

 
 
back top next
   
  Copyright © 2003-2005. Hiroshi Suzuki All Rights Reserved.