コンピュータはどうやってプログラムを認識してるか?

にゃんころもち

こんにちは!
WEBエンジニアのにゃんこ®︎もっちです!

スマートフォンのアプリやWEBサイトでのサービスなど、いろんな場面でITが使われています。

それぞれ処理の命令はプログラムにかかれており、それを元にコンピュータが仕事をしてくれてるんですね。

ただ、プログラムで書かれたものって英語とか人間がわかる言葉で書かれてて、これをそのままコンピュータが理解してるの?ってのは疑問ですよね。

今回はその辺りを説明しようと思います!

コンピュータが理解する仕組み

まずはプログラミング言語の記述

実際のプログラムはこんな感じで書かれてます。(例としてJavaScriptで書いてみました!)

慣れてないと何をしてるのか分からないですが、「=」や「log」とか英語で書かれてるとこもあって、なんとなーく意味が分かりそうな記述になってますよね。

こうやって人間が分かる記述で書かれたものを「プログラミング言語」と言います。

それじゃコンピュータはこの記述のまま処理を理解できるのか?

答えはNoです!!

こんなものコンピュータに理解しろなんて言ったら、ちゃぶ台ひっくり返されますぜ!

コンピュータはどんな記述なら理解するのか?

とまぁ冗談はおいといて(笑)、それじゃぁコンピュータはどんな記述形式だと命令を聞いてくれるのか?

実はコンピュータは数字の羅列の記述でしか認識できないのです!(明確には2進数、8進数、16進数の形式ですが)

こういう記述のものをマシン語と言います。

てことはプログラミング言語で書かれたものをマシン語に変換しなければ行けません。

この変換処理のことをコンパイルと言います。

どのプログラミング言語も実行時はコンパイルされたものをコンピュータに渡して命令しているんですね。

マシン語じゃないと命令は聞いてくれないから、コンパイルする必要があるんだね。

にゃんころもち

プログラミング言語によってコンパイルするタイミングが違う!

それじゃコンパイルって作業はどこで行ってるの?と思う方も多いと思います。

実はプログラミング言語によってコンパイルするタイミングが違うんですね!

その種類は大きく分けて2つあります!

  1. コンピュータに渡す前に事前にコンパイルして、マシン語の状態で渡す
  2. コンピュータが実行時に、プログラムをコンパイルして、処理を実施する。

1をコンパイラ言語、2をインタプリタ言語と言います。

詳しくみていきましょう!

コンパイラ言語

コンパイラ言語は先ほどの説明の通り、事前にコンパイルしてマシン語に変換した状態でサーバーなどに設置して処理を実行させます。

よってコンパイルの作業はプログラムを書いた人が実施しなければなりません。

当然、マシン語に変換できない記述(エラーになる記述)を書いているとコンパイルできませんので、どんなレベルのエンジニアが記述してもエラーの発生しにくい成果物になるというメリットがあります。

その一方でコンパイルを事前に実施するという手間がある分、開発効率が落ちるというデメリットもあります。

こういう言語はリスク対策に重きを置く、業務システムの開発に好まれます。

代表的な言語は、JavaやC#などです。

インタプリタ言語

対してインタプリタ言語はどうかというと、まずプログラミング言語の記述のままサーバーなどに設置します。

そしてコンピュータが処理を実行する際に、プログラミングを1行1行読みながらマシン語にコンパイルして処理を実行します。

これによって、開発者は事前にコンパイルする手間がない分、開発効率が上がるメリットがあります。

しかし、事前にコンパイルしないので、コンピュータの実行時にエラーが発生する可能性が上がること、そして実行時にコンパイルする分、処理速度がコンパイラ言語に比較して遅くなるというデメリットがあります。

こういう言語は開発スピードに重きを置く、WEBサービスの開発に好まれます。

代表的な言語は、PHPやRuby,Pythonなどです。

コンパイルするタイミングで言語の特製も変わるし、それによって好む業界も変わってくるね。

にゃんころもち

まとめ

それではまとめです!

  • コンピュータはプログラミング言語の記述のままでは実行されず、マシン語という記述のもので実行される。
  • プログラミング言語からマシン語へ変換する処理のことをコンパイルという。
  • コンパイルのタイミングは言語によって異なり、コンパイラ言語インタプリタ言語の2種類ある。

プログラミング言語が無かった時代はマシン語のような記述で処理を書いていた時もありました。

その時代と比べると、かなり人間にわかりやすく開発ができるようになったと思います。

また、言語によってコンパイルのタイミングが違うので、その点を理解しておくと現場でも役に立つと思います!

この点を踏まえて、学ぶ言語を選択するのも良いかもです!

にゃんころもち

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です