プログラミング言語の種類とプログラムの動作原理
プログラミングとは(その定義)
プログラミングとは「コンピュータにやらせたいことを、タスクの一覧としてつなげて指示すること」
そのできあがった一連のタスクのことをプログラムといい、プログラムはその命令にしたがって動きます。
実際、プログラムという言葉は、ITとは関係なくとも使います。
例えば、「運動会のプログラム」とかいうように。
運動会のプログラムは、運動会の予定表ですね、何月何日、何時からどの競技をどの場所で行うかを書いた紙だったりします。
同じように理解すれば、コンピュータが理解できる実施内容が書いてあるのが、ITでいうプログラム。
そのプログラムを作成することを、プログラミングといいます。
さて、コンピュータが実行ことをまとめあげる―プログラミングというのは、どうどういうものなのでしょうか?
コンピュータは、現時点では人間の言葉をそのままでは理解できません。
そのため、人間側がコンピュータ側にあゆみよって、コンピュータが理解できる形で表現してやる必要があります。
それが、いわゆるプログラミング言語というものです。
プログラムを実行するコンピュータって何をやっているの?
プログラミングの話をはじめる前に、プログラムを読み取って実行するコンピュータというものは、どういうものなのかを一度整理してみます。
コンピューターとは、「自分がもつメモリ内にある命令を順番に実行していく機械」です。
64ビットコンピュータとか32ビットコンピュータとか、書いてあったりしますが、それは、そのコンピュータが一回の命令で処理できるメモリの範囲を示しています。
64ビットコンピュータであれば、2の64乗、32ビットであれば32乗。
32ビットであれば、0番から約42億9497万番までの番号に指定された命令やデータを処理することができます。
64ビットであれば、約1844京6744兆0737億0955万が最大値で、気が遠くなるような数字です。
その空間に読み込まれた、コンピュータが理解できる命令群は、あるアドレスから順番に、非常に高速に実行されていきます。
命令は実は非常に単純なものです。
あるアドレスとあるアドレス、レジスタと呼ばれる小さなメモリ、を使いながら四則演算や比較、実行する命令の変更(ジャンプ)。
そういったものだけしか、コンピュータは理解できないのです。
コンピュータがやっていることは、それを機械的に、順番に処理しているということなのです。
単純だからこそものすごく早く実行ができるともいえます。
プログラミング言語はどうやってコンピュータに命令しているのか
しかし、そのような単純な命令をつかって人が何かをしようとすると、結構大変です。
画面に、”Hello, World” と表示すること1つとっても、あるコンピュータは、コンピュータのとある番地にデータを書き込むことでそれが画面に表示されることになっているとしたら、そこのアドレスに、画面に表示するデータを1つずつ転送してやるということをやる必要があります。
そこで人は考えました。
なるべく人間にわかりやすい言語を使ってコンピュータに命令ができないか?
そうして生まれてきたのが、プログラミング言語というものです。
やりたいことを理解しながら、プログラミング言語でその内容を記述すれば、プログラミング言語の処理系が、人の書いたものをルールに従って解釈して、コンピュータが実行可能なマシン語に変換するものを「コンパイラ」
その処理系そのものが、プログラミング言語を解釈しながら実行するものを「インタプリタ」といいます。
次の図のようなイメージになります。
人間の言葉では、
朝は「おはよう!」って出したいし、昼は「こんにちは!」だし、夜になったら「こんばんは!」って出したい
と言われたとします。このままだとコンピュータは理解できません。
そもそも、朝って何時から何時の間?もあいまいで困ってしまいます。
そこで、そのあたりを明確にしたうえで、現在時刻を取得するなど、必要な処理を加えて、ルールにしたがって人の言葉を書き直します。
その作業をプログラミングというのです。
ちなみに先ほど書いた、朝の時間帯や昼の時間帯を要望をだした人に確認してドキュメントに書いて、プログラマに伝える、というのが一般的には、SEの仕事ということになります。
プログラミング言語のパターン
プログラミング言語というもののイメージをつかんでいただけたでしょうか。
実際にコンピュータ上でどのように配置されているかのイメージを図にしてみました。
コンピュータの中には、そのコンピュータ特有のBIOS(バイオス)というソフトウェアがはいっています。
その上に、OS(オペレーティングシステム)、いわゆるWindowsとかマックのiOSなどがのっかっているわけです。
動作するマシンが異なるのに同じWindowsが動作するのは、このBIOSが実際のハードウェアとOSとの間にはいって、差がでないようにしているからなのです。
おなじように、デバイスドライバというのがありますが、PCの周辺機器についてまわります。
これも同じように、周辺機器とOSとの間の差を埋めてくれています。
本題のプログラミング言語ですが、大きくはインターブリタ―型とコンパイラ型に分かれます。
プログラマが作成したソースコードを、事前にコンピュータに理解できるマシン語に翻訳してしまうのが、コンパイラ型、実行といわれてからおもむろにプログラミング言語で書かれたソースコードを解釈しながら実行するのが、インタープリター型です。
インタプリタ型のものは実行時に言語を解釈する時間がかかるため、コンパイラ型の言語でかかれたプログラムの方が、実行速度は速くなります。
コンピュータの実行速度が遅かった時代には、コンパイラ型の言語が主流でしたが、実行速度もあがりインタプリタ―型でも実用に耐えられるようになると、途中に翻訳というプロセスがはいらないインタープリター型が新たな言語として台頭してきているのが、最近のプログラミング言語事情です。
実際には、コンパイラ型とはいいながら、途中まで翻訳(中間コード)で実行するJavaやマイクロソフトの.NET系のプログラミング言語もあります。
さらには、図では表現しきれていませんが、中間言語型でも初回実行時にマシン語までコンパイルしてしまって、2回目以降は高速で動かす技術がJavaでは普通になっています。
同じように、Pythonとかのインタプリタ―型であっても、初回実行時に中間コードまで翻訳してしまって、2回目以降の高速化は行われています。
まとめ
- コンピュータはメモリ上に蓄えた命令(マシン語)を高速で実行する機械
- プログラミング言語にはコンパイラ型とインタープリタ型の2種類ある
- コンパイラ型はソースコードを事前に翻訳してマシン語に変換する
- インタプリタ型はプログラムのソースコードを解釈しながら順次実行する
今回は、コンピュータとプログラム、プログラミング言語について整理しました。
最後までお読みいただき、ありがとうございました。