見出し画像

プログラミング等専門用語解説1

ソフトウエア工房孫風雅です。

ブログ投稿しています。最終版は此方から、ご覧ください。

今回はプログラム・ソフトウェアの実行ファイルを作成する方法及び実行環境関係の用語について確認・解説したいと思います。

初めに、プログラムの実行ファィルを得るにはコンパイルとリンクが通常必要です。このコンパイルを要する高級言語の事をコンパイル型高級言語と呼んでいると思います。ここで言う実行ファィルとはWindowsの環境で使用する拡張子EXEファィルの事です。

実行できるファィルとして拡張子COMもありますが、こちらは講師の理解では、マイクロソフト社のみが作成可能のハズですので、説明対象からは省かせていただきます。その他に実行できるファィル形式として、インストーラ形式などがあると思いますが、動作目的が限定されていますので、同様に説明からは省かせていただきます。

コンパイル型高級言語とは逆に、実行環境が提供されていて、その環境でスクリプトやプログラムを記述する事でプログラムを実行できるのが、インタプリタ型高級言語と呼ばれていると思います。

以下、それぞれの***型高級言語の特徴などの説明です。

コンパイラ型高級言語(例:C、C++、C#、VB.NET等)

ソースファイル(ソースコード)を機械語に変換し、オブジェクトファイルを作成する事をコンパイルすると言います。(作成されるファィルの拡張子は通常OBJです)
そして、コンパイル後リンクソフトを使用して、必要なオブジェクトファィル全てを纏めてリンクして拡張子EXEの実行形式ファィルを作成します。(実行形式ファィルの特徴としてWindowsOS環境下などで該当ファイルをダブルクリックすると、実行が可能な形式のファィルです)

オブジェクトファイル(OBJ)は機械語が記述されたバイナリファイルですが、アドレスが相対値でしか無い為、関数毎に、アドレスが0となっていて、そのままでは、実行ができません。相対アドレス関数全てをリンクをして、絶対値アドレスを振る事で、関数毎に異なるアドレスを持たせて、実行できる形式のEXEファイルを得る事ができます。

尚、通常我々が開発で作成したソースコードファィルからコンパイルしたオブジェクトファィルだけでは実行ファィルは作成できません。リンクして正しく動作する実行ファィルを生成するにはコンパイラ提供会社等から供給される共通のオブジェクトファィルが必要であり、同様にリンク時指定する必要が有ります。

これらのコンパイラ提供会社から供給されるオブジェクトファィルには実行ファィルをPC上のメモリ空間にロード(配置する意味)する機能や、メモリ空間に配置したプログラムに実際に動作起動をする機能等基本的に全ての実行ファイルに必要な共通機能が含まれているのが通常です。

また、コンパイラ型高級言語の場合、利用者・使用者が使用する必要があるのは実行ファイルのみになリますので、ソースファイルを利用者・使用者に提供する必要が無いのが、一つの利点・特徴です。(著作権や独自のアルゴリズム等知的財産をソースコード非公開なので守れます)

一方、作成したソースコードに問題、所謂バグが有った場合の解決方法はソースコード確認以外に容易な方法な無いと思います。デバッグ方法は提供されていると思いますが、デバッグ操作はそれほど簡単ではありません。

その理由の一つは、実行形式ファィルは、実行用であり、提供用目的の為、不要なコードやバイナリを含ませないのが一般的です。従って、デバッカーソフトなどでデバックをしても、実際に皆さんが目にする事が出来るのは、ご自身でかかれたソースコードでは無く、ソースコードをコンパイルした後の機械語(アセンブリ言語とも呼ばれているハズです)でしか、表示されません。

機械語はPC上のCPUが理解できる言葉であり、レジスタや比較等の演算実行のみが表示され、ご自身で作成された高級言語のソースコードとは全く異なるものになります。従って、不具合を高級言語で書かれたソースコードでは無く、コンパイル後の機械語で表示されるため、結構難解だと思います。

一応、コンパイルにはシンボリック出力オプションが通常用意されていると思いますので、このオプションを指定して全ソースコードをコンパイラして、シンボリック付のオブジェクトファィルを作成すると、リンク後に生成された実行ファイルEXEをシンボリックデバッカーでソースコード付き(確かほぼ同じ表記だったと思います)でデバックが可能になるハズです。

尚、シンボリック付のオブジェクトファィルで作成された実行ファイルは基本的にデバック用ですので、通常、第三者には後悔しません。又、動作させても同じ不具合が再現するとは必ずしも言えない状態です。

何故なら、シンボリックを含んでいる為、微妙に動作タイミングが異なったりする事が有る為です。

不具合の為のシンボリック利用は実行ファイル作成後、再現するかを先ず確認する必要があります。

この様にコンパイラ型高級言語は動作の高速性やソース非開示で実行ファィル配布等メリットが有りますが、一旦問題を作ってしまうと、ソースコードレビューで解決できない場合、結構、対応が大変になるきらいがあると思います。

インタプリタ型高級言語(例:PHP,PowerShell,Excel VBA等)

インタプリタ型高級言語は、コンパイラ型高級言語と違い、実際にアプリケーションを実行する時にソースコードを1行ずつ機械語に実行環境が翻訳しながら実行する方式の事を言います。
プログラムを実行前にコンパイル・リンクなど事前作業を必要としない分、手間は掛かりませんが、実行のたびに”ソースコード一行毎の変換と実行”を繰り返し行うため、コンパイラ型言語と比較すると余計な処理が都度都度発生するため、実行処理速度が遅いと言われています。

尚、一行ずつソースコードを機械語に変換して実行するため、作成したソースコードに動作の問題があった場合の解析は比較的容易です。

例えば、ある判定文行で処理がおかしくなるのであれば、判定している変数の動作時の設定されている値を、動作がおかしくなる直前で確認できます。

一行一行実行の為、デバック手法(デバッグと同じ意味です)で都度都度処理を止める事が出来るため、容易に問題が起きる箇所時点での変数の設定値を確認できます。

また、一行一行ソースコードを実行する為、何処でおかしな動作になるかだけで無く、その後どのような動作になっているか・いくかを確認する事が可能な場合が多いと思います。

一般的にはインタプリタ型の高級言語(PHP,PowerShell,Excel VBA等)は、"スクリプト言語”とも呼ばれているハズです。

講師感想&コメント

今回、コンパイラ型高級言語・インタプリタ型高級言語と関連する実行ファイル(EXE)、オブジェクトファィル(OBJ)、コンパイル・リンク等の言葉を取り上げてみました。

最初の言葉として、これらの言葉を選んだのには二つ理由が有ります。

  1. 特定のサイトだけかもしれませんが、実行ファィルやオブジェクトファィルの説明が混同されている様に思えました。従って、正しく理解して頂く為に、比較記述してみました。

  2. 学習する言語を選択する際、コンパイラ型・インタプリタ型の選択が重要になる可能性が有ります。その為、各々の***型高級言語の特徴を説明してみました。

言語学習について、初心者の方・プログラミングが初めての方への講師のお勧めは、インタプリタ型高級言語です。プログラミングに慣れてから、コンパイラ型高級言語を学習するのが良いのではなかと思います。

皆さんは、プログラミングについて、どの様なご意見・イメージをお持ちでしょうか?

講師の経験が、皆様のお役に立てれば幸いです。

この記事が気に入ったらサポートをしてみませんか?