コンピュータの世界におけるソフトウェアは専用の言語を使ってプログラミング(コーディングとも呼ぶ)され作成されていますが、専用の言語(プログラミング言語)は複数あります。
人間が書くプログラミング言語をコンピュータが理解するためには機械語(数字の羅列)にする必要があります。
今回はこのプログラミング言語を機械語に変換する言語プロセッサの関係を解説します!
プログラミング言語とは?
プログラムを書くための専用の言語をプログラミング言語と呼びますが、「JavaやC、Python、JavaScript 」など様々な種類があります。
プログラミング言語は大きく「低水準言語」と「高水準言語」の二つに分けることができます。
- 低水準言語:コンピュータがより理解しやすいプログラミング言語
- 高水準言語:人間が理解しやすいプログラミング言語
先ずはこの二つの言語に分けられることを理解しましょう。
機械語とは?
では、プログラミング言語で書かれた命令や値をコンピュータはどうやって理解するのでしょうか?
コンピュータの世界は「0,1」で処理されています。命令の処理や演算を行うCPUが高速で電気的な「ON、OFF」の信号を処理しています(※詳しくは以下の記事を読んでみてください)。
下の図の通り、コンピュータは最終的に機械語で書かれた命令や値をCPUで実行して処理しています。
我々はコンピュータを動かすために「0,1」の信号をコンピュータに与えてあげる必要があり、プログラミング言語は最終的に機械語に変換されます。人間の手で書かれた高水準言語をコンピュータが理解できる低水準言語(機械語)に変換する仕組みが言語プロセッサなのです!
言語プロセッサとは?その種類は?
では、改めて「言語プロセッサとは?」です。
繰り返しますが、コンピュータは機械語で書かれたプログラムしか理解できません。そのため、人が書いたプログラムはそのままではコンピュータ上で実行できません。人が書いたプログラムのことをソースコード(原始プログラム)なんて呼びますが、このソースコードを機械語のプログラムである目的プログラムに翻訳する必要があります。
この翻訳の役割をしてくれるのが言語プロセッサです!
言語プロセッサは「何をどうやって翻訳するか」によっていくつかの種類に分類することができます。
アセンブラとは?
機械語に近い低水準言語であるアセンブリ言語を機械語に翻訳する言語プロセッサがアセンブラです。
下の図のように「ニーモニック」と呼ばれる命令コードを機械語に変換(翻訳)してくれるものですが、これは翻訳といっても基本的には1対1の変換になります。つまりアセンブラの命令一つに対して、機械語命令が一つ生成されることになります。
コンパイラとは?
コンパイラは高水準言語で書かれた原始プログラムを一括して目的プログラムに翻訳してくれる言語プロセッサです。
このコンパイラを使って翻訳を行うことを「コンパイル」と呼びます。また、コンパイラ後は機械語に直接翻訳されるパターンとアセンブリ言語に翻訳されて、そこからアセンブルされて機械語に翻訳されるパターンがあります。
ソースコード(原始プログラム)をまとめてコンパイルして機械語にしていくので、内容を簡単に変更することができないのですが、メリットとしてはコンピュータが高速に実行できることです。
CやC++、JAVAなどのプログラミング言語の翻訳に使われていますね。
ジェネレータとは?
ジェネレータはRPG言語で採用されている方式で、入力や処理、出力などの必要なパラメータを設定してあげたら、それに応じて自動でプログラムを作成してくれる言語プロセッサです。
RPG言語はIBM独自の言語のようで、歴史的にも古いようですね。
インタプリタとは?
最後にインタプリタですが、この言語プロセッサは高水準言語で記載された原始プログラム(ソースコード)を1行ずつ解釈しながら、実行していく言語プロセッサです。
ポイントは機械語の目的プログラムは生成されずに、命令一つを一つずつ機械語に翻訳し、コンピュータが実行していくので、実行していく度に翻訳が必要となり、プログラムの実行速度は遅くなってしまいます。
その反面メリットとしては、プログラムを変更し実行するのが簡単なので、プログラムを書きながら変更していくことができます。
JavaScriptやPython、PHPなど人気のプログラミング言語はインタプリタで翻訳しています。
それぞれの言語プロセッサの関係性
これまで4つの言語プロセッサを解説してきましたが、それらの関係と特徴を以下の図で表現してみました。
まとめ
今回はプログラミング言語をコンピュータが読み取れる形にするための言語プロセッサに関して解説しました。
その昔は機械語やアセンブリ言語で直接コンピュータに命令を出していましたが、それは単純な計算処理に限った話で、現代のソフトウェア作成やデータベース操作、ネットワーク制御などのプログラミングは人間が使える高水準言語を使って行う必要があるのですね。
その高水準言語を低水準言語に変換し、最終的には機械語にするための「言語プロセッサ」は非常に大事な仕組みなんですね。
学生の頃、アセンブリ言語を授業でやってたことが懐かしいです。既に記憶の彼方ですが...(笑)
以上です!