機械語とは、コンピュータが直接に理解できる言語、いわば「コンピュータの母国語」 のことです。「マシン語」と書かれることもありますが、 どちらも英語の "Machine Language" を訳したものです。
「直接に理解できる」というのは、実はとても大事なことです。 コンピュータというものは、
という動作を繰り返すように作られています。これはどんなに巨大で 複雑なシステムでも同じです。コンピュータの電源を入れるとすぐに 最初のプログラムの読み取りと実行が始まり、必要に応じて オペレーティングシステム (Windows や BeOS、MacOS、Linux など。 これらもプログラムです) を読み込んで実行したりするわけです。
というわけで、コンピュータが何かするには、その方法をプログラムの形にして コンピュータに実行させなければなりませんが、コンピュータは 機械語で書かれたプログラムしか直接には実行できません。その機械語は、 実は数だけでできている言語です。「『3』は『足し算しろ』の意味」といった具合に、 数に意味をつけてあるのです。暗号表を使った会話に似ていますね。 ですから、機械語のプログラムというのはただ数が並べてあるだけですが、 それでコンピュータには意味が通じるのです。
機械語以外の、いわゆる「プログラミング言語」でプログラムを作る場合には、 次のどちらかの方法で間接的に実行することになります。
コンパイラ方式では実際に機械語に「翻訳」することで実行できるように するのですが、インタプリタ方式では、「もし機械語に翻訳したらどうなるか」を シミュレートするプログラム (インタプリタ) を用意します。 例えば、足し算をする場合、機械語の足し算命令に変換して実行させる コンパイラ方式に対して、インタプリタ方式ではインタプリタが かわりに足し算を実行する形をとります。
ただし、どちらの形式でも、はじめから機械語のプログラムを用意するのに 比べれば、実行するときの効率は下がります。その場でインタプリタがいちいち 「まねっこ」しているインタプリタ方式はもちろんですが、コンパイラ方式でも 完璧な変換は難しく、どうしても「遠まわしな言い方」になりがちだからです。
しかし、なにしろ機械語はすべて数でできているために使うのが難しく、 とくに大規模なプログラムを機械語で作成するのはよほどの天才でないと無理です。 また、機械語には基本的な計算やメモリ管理、入出力などのための命令しか 用意されていないのが普通で、あるていど複雑なことを行うにはコンピュータの ハードウェア自体の知識も要求されます。
さらに、人間の母国語が人によって違うように、コンピュータも種類によって 「機械語」の文法や語彙が違います。したがって、あるコンピュータで機械語の 使い方を学んでも、別のコンピュータではその知識がそのまま使えるわけではなく、 その意味では「学んでも報われない」言語だといえます。
以上のような理由から、実際にプログラムを作るときには、 もっと人間の考え方に近いプログラミング言語を使うのが普通ですが、 効率がとくに重要になる場合には、機械語の語彙を人間にわかりやすい単語に置き換えた アセンブリを通して機械語が利用されています。