本当に初心者の人に捧げるコンピューター入門


ソフトウェア プログラム編その5

高級言語って何が高級?

 前章までを読んでいただければ、機械語やアセンブリ言語ではプログラムを作るのがいかに大変かを理解していただけたはずです。プログラマーであっても例外ではありません。そこでもっと楽にプログラムができるようにと考え出されたのが高級言語という物です。
 例えばC、BASIC、PASCAL、JAVA、FORTRAN、COBOL、LISP、PL1、ADAなんていうのはすべてこの高級言語の名前です。更にエクセルやワードのマクロ言語というのも高級言語の一種と考えても差し支えありません。
 それではこの高級言語とはどの程度高級な物なのでしょう?


高級言語のすごいところ



 高級言語は高級というぐらいなので、以下に記したようなすごい機能が付いています。

  1. 分かりやすい名前が使える。
  2. 分かりやすい記述ができる。
  3. 使い回しが楽にできる。
 どうですか?すごいでしょう!・・・って言っても全然ピンと来ませんね。

 でも前の章で、機械語では分かりにくいのでアセンブリ言語を定義したことを思い出してください。表している内容は同じなのに、ただの数字列で書くより遙かに分かりやすくなっていたはずです。

 アセンブリ言語は機械語に一対一で名前を割り当てただけですが、高級言語ではもっといろいろなもの(例えばメモリーの場所とか、メモリーの範囲とか、一定の手続きなど)に名前を付けたり、機械語ではややこしい書き方をしなければならないところが簡単に書けたりします。

 この程度のことができるだけで、実は生産性が飛躍的に上がるんです。

名前がつけられると・・・?



 それではまず、具体的な例をあげてみましょう。
  • ちなみにこれから出てくる例はすべてPASCALという言語での書き方です(しかもDELPHIという拡張版のPASCALです)この書き方は使用するプログラム言語が異なると全て違います。ただまともな言語であればほぼ間違いなく同じような概念が存在していると思っていても問題ありません。
 さて、プログラムの重要な要素にデータがあります。今まではデータという物をコンピューターのメモリーのある場所に保存されている数値の列だとして取り扱ってきました。
 それを見たい場合には保存されている場所のアドレスが分かればいいわけです。

 しかしアドレスというのはただの数値です。迷宮脱出プログラムでは230番地に現在位置を入れて、231番地に向きを入れて・・・とやりましたが、こんな物はあっと言う間に忘れてしまいそうです。
 プログラマーでも同じで、こんなことをしているとついうっかり230と間違えて320番地に現在位置を入れてしまったりという凡ミスを連発します。

 そこでメモリーのアドレスに適当な忘れにくい名前が付けられたら便利だとは思いませんか?
 例えば250番地に「Position」、251番地に「Directation」とか言う名前が付けられれば、こういう間違いはずっと少なくなります。

 高級言語では必ずこの機能があります。それが変数と呼ばれる概念です。

 変数というと例えば関数や方程式のXとかYを思い出しますね。XとかYは適当な数が入れられる記号のことでした。
 コンピューターの高級言語における変数もほとんど似たような物だと思っていただいて結構です。ただその実体は、メモリーのあるアドレスのことなのです。

 しかしその変数を使うためには、コンピューターにその変数をそういう名前で使うことを教えてやらなければなりません。PASCAL言語では以下のような感じで変数を使うということをコンピューターに教えてやります。

 var Position,Directation:byte;

 これは「私は変数PositionとDirectationを使うぞ!」という意味です。「:byte;」なんておかしな呪文が付け加わっていますが、それに関しては後述します。

 上を見ると、実際のアドレスが書かれていません。書かないとコンピューターが困るのではないでしょうか?でも余り心配しなくて構いません。こう書けば、コンピューターは適当に空いているアドレスを勝手に割り当ててくれるのです。

 考えてみれば位置や方向を230番地とか231番地を割り当てたのは単にそこが今使っていない場所だったからです。あのプログラムの目的から言えば、それが例えば540番地だろうがどこだろうがどうでもいいことです。だとすれば適当に空いた場所に勝手に割り当てさせても全く問題はないわけです。

 重要なことは、上のように変数を宣言してしまえば、もうアドレスのことは忘れてしまってもいいということです。


分かりやすい記述って・・・?



 前項ではアドレスに名前がつけられると便利だと言いました。しかしそれだけではまだまだ不十分です。
 例えば足し算引き算などの計算はよく出てきますが、アセンブリ言語ではこれを

 Add 230, 192 

などと書きます。変数が使えたら、

 ADD Position, 192 

と書けて、かなりわかりやすくなります。しかし考えてみたら足し算を表すのであれば、

 Position + 192 

 と書けた方が分かりやすいのは当然です。

 またアセンブリ言語では一度に2つの数の計算しかできませんが、実際の式にはたくさんの数が出てきます。例えば (245-(A+3))÷(B-(356+C)) の計算結果をある変数に入れておきたいなどという要求はすぐ出てきます。

 しかし高級言語ではこういう式をほとんど見たままの姿で書くことができます。例えばPASCALでは下のように書きます。

 X := (245-(A+3))/(B-(356+C)); 

 これはXという名前の変数に右の計算結果を入れなさいという命令ですが、一度言われればすぐ分かりますね。ほとんど見たままです。
 暇な人はこの式を前の偽機械語で書いてみてください。たかがこんな物を書くのでさえとてつもなく面倒くさいことがよく分かると思います。


要するに



 ここで分かっていただきたいのは、名前を付けられるということや分かりやすく記述できることは、極めて重要なことなのだということです。

 次章以降ではこのことに関する実例をたくさん挙げていきますが、その基本は全てこの点に尽きることを覚えておいてください。
(使い回しに関してはもうちょっと後で説明します)

 またこのことはソフトウェアだけに限らず、コンピューターを使用する様々な側面で現れてきます。


高級言語をコンピューターはどうやって理解するか



 ところでコンピューターは数しか分かりません。当然ですが高級言語をそのままコンピューターが理解できるわけではありません。
 前にアセンブリ言語の所でもちょっと言いましたが、これをコンピューターに分かる言語、すなわち機械語に翻訳してやる作業が必要です。

 さすがに遙か昔でもこれを手でやった人はいませんでした。高級言語を使用する場合は、必ずそれを機械語に翻訳するためのプログラムを使用します。
 その翻訳プログラムには大きく分けて次の2種類があります。

◆コンパイラ

 コンパイラとは高級言語で書かれたデータ(普通は文字列データです)を機械語に一気に翻訳するプログラムです。できあがった物が完全に機械語になっているので動作が高速です。

◆インタープリタ

 インタープリタとは高級言語で書かれたデータを一行づつ読み込んで、翻訳して、実行するプログラムです。コンパイラに比べて仕組みが簡単。

 この二つがどう違うかというと、コンパイラは翻訳に相当し、インタープリタは同時通訳に相当すると言うことです。

 最も大きな違いはプログラムを実行するときにはもうコンパイラは必要ありません。翻訳した本を読む際に翻訳者がそばにいる必要がないのと同じです。
 しかしインタープリタはないと困ります。同時通訳という以上、通訳者がいないと成立しないのは明らかでしょう。

 皆さんの場合はあまりこういうことに深入りしても仕方ありません。大体以下のような感じで覚えておけば十分でしょう。

コンパイラを利用した例一般的なアプリケーションのほぼ全て
インタープリタを利用した例アプリケーションのマクロ言語など



前へ 目次へ 次へ