見出し画像

【コンピュータ】言語とその処理系

こんにちは、すうじょうです。さて、今回は情報科学における基礎知識の一つであるプログラミングにおける言語とその処理系について簡単に解説したいと思います。できるだけ優しく説明するので、コンピュータに詳しくないという人も安心して、読んでください。

※本記事は、2023/04/03に内容を改訂しました。

コンピュータの基本的な構成

ここでは、まずコンピュータ(正確には計算機という)について基本的なハードウェア構成を説明したいと思います。

ハードウェアとは、実際に物質として存在し、目に見えるもののことです。一方、対義語のソフトウェアは、目に見えないもののことです。具体例としては、ハードウェアにはモニタ、キーボード、プリンタ、マウスなどが含まれ、ソフトウェアにはOS(WindowsとかMacとか)やプログラム、アプリケーションなどが含まれます。

では、コンピュータを構成する主なハードウェアを紹介します。

メインメモリ

命令やデータが格納(保管)されている場所。また、CPUが取り出しやすいように、それぞれの命令、データにアドレスと呼ばれる番号を振り当ててられている。

CPU

Central Processing Unitの略で、日本語では中央処理装置などとも呼ばれる。メインメモリに格納されている命令を取り出して、解釈(命令内容を理解)、実行しています。また、メインメモリとの間でデータのやり取りを行っています。

この他に、キーボード、マウスなどの入出力機器がありますが、ここではあまり関係ないので省略します。

プログラムを表現する言語

プログラムを書く言語と言えば何が思い浮かびますか。C言語、Java、Pythonなど様々な言語があります。しかし、コンピュータは直接そういった言語を理解しているわけではありません。ここでは、もう少し詳しく見ていきたいと思います。

機械語

メインメモリに読み込まれ、CPUが直接実行できる言語。CPUが理解できる命令は普通これだけです。機械語は、0と1の並び(バイナリ形式という)のみで命令が表現されています。そして、厄介なことにCPUの種類によって0と1の並びに対応する命令が異なります。また、CPUによってそもそも用意されている命令も異なります。これをいちいち書くのは骨が折れます。CPUが比較的簡単な構造だった大昔は直接機械語を書いていたようですが、今は複雑なので普通機械語は書きません。

アセンブリ言語

機械語を人間にとって理解しやすいようにした言語。文字で表現され、機械語とは1対1に対応している。このため、アセンブリ言語はCPUに依存しています。つまり、CPUによって異なる命令が用意されています。基本的には、複雑な命令は用意されておらず、複雑な命令は簡単な命令の組み合わせで表現する必要がある。

高級言語(プログラミング言語)

アセンブリ言語よりもさらに人間にとって、読み書きしやすい言語。文字で表現され、CPUには依存していない。つまり、どんなCPUでも同じ表現で命令を表現できる。C言語、Java、Pythonなどがある。

これだけでは、アセンブリ言語と高級言語の違いが分かりづらいですが、例を挙げれば分かります。アセンブリ言語では例えば

add $s0, $s0, $s1

のように表現され、命令に変数ではなくレジスタや即値(値のこと)などを指定する必要があります。ちなみに、$で始まるのはレジスタのことで、この例はMIPSにおいて、$s0 = $s0 + $s1の意味になる。

プログラムはどうやって実行されるか

ここでは、プログラミング言語で書かれたプログラムがどんな流れで実行されるかをおおまかに説明したいと思います。

例えば、C言語の場合、まずコンパイラというプログラムがC言語をアセンブリ言語へと変換しています。(コンパイルするといいます)ここでは、様々なコンパイルの方法や過程、仕組みについては触れません。

そして、アセンブラが、アセンブリ言語から機械語へと変換しています。機械語になるとCPUで実行できるので、命令を取ってきて解読して実行したのち、結果を格納するのを繰り返して機械語の命令を最後まで実行します。

Java言語の場合、書かれたプログラムをコンパイラが機械語の命令のようなJava bytecodeと呼ばれる中間コードに変換します。そして、このコードをJava virtual machine(Java VM)が解釈して実行します。

Pythonの場合、インタプリタと呼ばれるソフトウェアがプログラムを1ステップずつ解釈して実行します。ちなみにC言語などのコンパイラは、プログラム全体を一括して解釈しています。この1ステップ実行は、WindowsのコマンドプロンプトやMacのターミナル、Unix系の端末上でPythonを実行する場合は1行入力するとそのたびにその内容を実行していることで実際に確認できます。

ここで挙げたコンパイラ、アセンブラ、インタプリタなどをまとめて言語処理系ということがある。これは、人間が理解できる言語で書かれたプログラムをコンピュータ上で実行するための処理を行うソフトウェアの総称のようなものです。

最後に

今回は、プログラミングで書いたプログラムがコンピュータ上でどのような流れで実行されるのかをハードとソフトの2つの側面から説明しました。ハードのCPUが実行する流れやアセンブリ言語などについてはもう少し詳しく見ることはできますが、それはまたいつかやるかもしれません。ちなみに、今回の内容はプログラミングを始める前の基礎的な知識としても役に立つはずです。では。

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