プログラミング等専門用語解説2
今回は言語とその特性(デバック等との関係)及びソースコード関係(主に管理)関係の用語について確認・解説したいと思います。
高水準言語(高級言語)と低水準言語(低級言語)
先ず、低水準言語(低級言語)を説明します。
高水準言語:高級言語とは通常、用語解説1で出てきたコンパイル型高級言語・インタプリタ型高級言語の事を指します。
低水準言語というのはその言葉通り、高級な文法等が無い俗にいう低次元即ち基本機能の言語になります。
基本機能の言語の意味は我々人間にとってでは無く、PC等のCPUにとってという意味になります。従って、低水準言語若しくは低級言語の実体は通常CPUが理解できる言語である機械語になります。
そこで簡単に少しCPUの理解できる言語である機械語を高級言語との対比する事で紐解いてみましょう。
インターネット情報を”8086 命令セット CPU”や”8086アセンブラ”等で検索すると、沢山情報が出てくるようです。
用語解説1で出てきたレジスタというのは、CPUの構成要素の一つと思います。
以下に、高級言語と低級言語のソースコード例を示します。(あくまでサンプルソースコードです。イメージを捉えて頂きたいので、文法は正確ではありません。従って、以下と同じコードを作成しても動作しないと思います)
●高級言語でのサンプルコード
A_FUNCZTION()
CALL B_FUNCTION() ’Bファンクションをコール:呼び出します。
X=X+1
END A_FUNCTION
B_FUNCTION()
A=A+1
END B_FUNCTION
●同じ処理が機械語:低級言語の場合は以下の様になります。
A_FUNCTION:
PUSH AX '以下の4つの命令で全レジスタ値をスタックメモリに保存します。8086のレジスターは4種類のハズです。実際に退避するレジスターは呼び元のレジスター使用状況によります。
PUSH BX
PUSH CX
PUSH DX
PUSH CUR_ADD+2 'JUMP後の戻り番地を保存します(+4だったかもしれません)
JMP B_FUNCTION 'ファンクションBにJUMP:移動します
POP AX '以下の4命令で全レジスタ値をJUMP前の値にスタックメモリから戻します
POP BX
POP CX
POP DX
ADD AX,1'1加算。
RET '関数END
B_FUNCTION:
ADD DX,1 '1加算。
RET '関数END
'=>> 関数ENDで以下のリターン処理実行
=JMP SAVE_ADD 'A_FUNCTIONのJUMP B_FUNCTIONの次の命令、POP AXのアドレスに戻ります。
ポイントは、上記二つのコードが同じ機能という事です。
高級言語では数行で済む記述が、低級言語ではかくも多くの行の命令になってしまうという事です。
コンパイラーはこの高級言語のソースコードをインプットにして同等の内容を記した機械語をアウトプットとしてオブジェクトファィルを生成します。尚、シンボリックが無い場合は、デバッカーで表示されるのは機械語の命令のみになるハズです。また上記の、A_FUNCTION等の関数名や変数名等の名前は一切表示されず、単純にアドレス値でのみ示されるだけになるハズです。
結果、シンボリック無しの機械語でのデバックというのが如何に難しくなるかをご理解いただけるのではないかと思います。(シンボリックがあっても、慣れなていない方には機械語でのデバックは想像以上にボリュームが有る為、難易度が高いかもしれません)
コミットとロールバック(ソースコード管理に於いて)
Git系等大概のソースコード管理ではバージョン管理の他にソースコードのレビジョンの管理も行っているハズです。その為、実行ファィルを作成する場合に適用すべきソースコードのレビジョンを指定する必要が有ります。その為に使用されているのが、コミットとロールバックだと思います。
コミットは前述の適用すべきソースコードのレビジョンのステータスを指します。コミットされているソースコードは実行ファィルを作成するときに使用できる事を示しています。ソースコード管理のシステムにもよると思いますが、通常はコミットのステータスを持ったソースコード群の内から今回の作成に使用するものを、該当ソースコードの作成作業者が指定する様に思います。
逆にロールバックは適用したソースコードを元に戻す事を意味します。(元に戻すというのは通常は一つ前に適用していたものに戻すという意味です)現在、WindowsでもUPDATEを戻すときに、ロールバックという言葉を使用しているように思います。
講師が現役の頃は、複数人でソフトウェア・プログラム開発を行う場合は、基本的に何らかのソースコード管理を行っていました。(管理ソフトウェアを使用している場合も・使用していない場合もありました。)
当時、管理ソフトウェアは大体は、サーバ上などで動作する・動作させる、センタ統一型でしたが、現在の主流は分散型に対応しているようです。少し考えただけでも、分散型は対応すべきシチュエーションが沢山ありますので、管理ソフトウェアそのものの開発が大変なのだろと考えています。(結果的に現在使用する場合は、開発者自身がどのソフトウェアを利用するかを熟考する必要が有りそうです)
皆さんは、プログラミングについて、どの様なご意見・イメージをお持ちでしょうか?
講師の経験が、皆様のお役に立てれば幸いです。