【基礎から学ぶプログラミング言語】 コンピュータをプログラムで動かすまでの流れ ~ソースコードとバイナリコードの関係~

IT
スポンサーリンク
スポンサーリンク
スポンサーリンク

私たちは日常生活で何気なくパソコンやスマートフォンというコンピュータを使用しています。
これらのコンピュータが普通に動作しているのは、そのようにプログラミング言語が記述されているからです。
本記事は、そんなプログラミング言語について実際に学びながら要点をまとめていったメモという位置付けになります。
私は専攻が電気でプログラムに関しては全くの初心者ですので、同様に初心者の方には理解しやすくなっているかと思います。

今回は、「コンピュータをプログラムで動かすまでの流れ」についての説明です。

1.初めに

コンピュータを動かすためにはプログラムが必要です。
プログラムは一見何が書かれているのかわかりませんが、しっかりとした言語で記述されています。
C言語・Python・JAVAなど、使えなくても名前を聞いたことはあるのではないでしょうか?

ただ、これらの言語はそのままコンピュータが認識できるわけではありません。
コンピュータが理解できる言語に翻訳する必要があります

今回は、コンピュータをプログラムで動かすまでの流れと、どんなプログラム記述用の言語が存在するのかを説明していこうと思います。

2.大まかな流れ

コンピュータをプログラムで動かすまでの大まかな流れは、以下のようになります。

1.人間が理解できる言語で命令文を書く。
2.コンピュータが理解できる言語に翻訳する。
3.翻訳された命令文に従ってコンピュータが仕事をする。

要するに、日本人が通訳を挟んで外国人に話しかけているようなものです。
やることはこれだけなのですが、実際の会話ではそれぞれを指す用語が入り乱れます。

具体的には、以下のような言い回しをされることがあります。

1.プログラミング言語でソースコードを書く。
2.ソースコードをバイナリコードにコンパイルする。
3.機械語で書かれたバイナリコードに従ってコンピュータが仕事をする。

なんか一気によくわからなくなったでしょう?
でも、これで言っていることは同じなんですよ。
それぞれの用語が何を意味するか理解していないと会話の意図を汲み取れないことはままあるので、流れに併せて説明をしていきます。

2-1.人間が理解できるプログラミング言語

コンピュータで実行したい事柄があったのなら、まずその命令文を作成する必要があります。
なので、直接コンピュータが理解できる言語で記述したいものなのですが、一つ問題があります。
コンピュータが理解できる言語って“0”と“1”の羅列なんですよ

どういうことかと言うと、私たちは『おはよう』と挨拶をするわけですが、コンピュータは『0001101011000101』などの一見意味があるようには見えない羅列で挨拶をするのです。
※この例えの羅列は本当に適当に入力しただけです。

そんなもの人間が考えながら書けると思いますか?
到底不可能です。
仮にできたとしても、効率が悪いのは確かです。

そこで、コンピュータを動かすために考えられた人間が理解・記述可能な人工的な言語が存在します。
それがプログラミング言語というわけです。高級言語とも呼ばれます。
C言語・Python・JAVAなどは、プログラミング言語なんです。
命令文は、まずプログラミング言語で記述するのです。

このプログラミング言語で記述された命令文のことをソースコードもしくはプログラムコードと呼びます。
どちらかと言うとソースコードと呼ばれていることの方が多いです。

ソースコードとは、英語で[source code]と書きます。
[source]の意味は[起源・情報源・出典]、[code]の意味は[規定・規約・符号]なので、英語の意味から「情報をルールに則って記述しているもの」だとはわかりますね。

ちなみに、プログラムコードは英語で[computer code]と書きます。
何故か[program code]ではないようです。

2-2.人間が理解できる言語をコンピュータが理解できる言語に翻訳(コンパイル)する

コンピュータが理解できる言語は人間には理解不能なので、間に翻訳を挟む前提の構成にしています。
なので、コンピュータに対するソースコード(命令文)をプログラミング言語で記述したら、次はこのソースコードをコンピュータが理解できる言語に翻訳する必要があります
このことをコンパイルと呼びます。

コンパイルとは、英語で[compile]と書きます。
意味は[編集する]です。
まあ、翻訳と取れないこともないですよね。

プログラミング言語の変換方式(翻訳方式)ですが、厳密にはコンパイルの他にもう1種類存在します。
それは、インタープリタです。

コンパイラは、プログラミング言語で記述されたソースコードを一括でまとめて変換します
その為、翻訳スピードは速いのですが、全ての変換を終えるまでプログラムの実行はできません

それに対してインタープリタは、プログラミング言語で記述されたソースコードを一行一行逐次変換していきます
その為、変換したところから逐次プログラムを実行できるというメリットがある反面、変換しつつ実行することになるので変換速度が遅くなります

どちらかが優れているというより、長所と短所が鏡合わせになっているのです。

2-3.コンピュータが理解できる機械語(マシン語)

コンパイルされたソースコードは、コンピュータが理解できる言語に翻訳されます
このコンピュータが理解できる言語のことを機械語と呼びます。

機械語とは、英語で[machine language]と書きます。
そのまま[機械(コンピュータ)の言語]ということですね。
マシン語[machine code]とも呼ばれます。

そして、この機械語で記述された命令文のことをバイナリコードと呼びます。

バイナリコードとは、英語で[binary code]と書きます。
[binary]とは2進数のことです。
1010や0011という具合に“0”と“1”の羅列で表す表現方法が2進数です。
なので、その2進数で表されたコード(規定・規約・符号)だからバイナリコードと呼ばれます。

よって、ソースコードをコンパイルすることで得られたバイナリコードという命令文に従って、コンピュータが動作するのです
これがコンピュータをプログラムで動かすまでの流れです。

ちなみに、プログラミング言語(ソースコード)を機械語(バイナリコード)に翻訳することをコンパイルと呼ぶのであって、機械語(バイナリコード)をプログラミング言語(ソースコード)に翻訳することはコンパイルと呼ばないです。
そこは間違えないように注意しましょう。

また、機械語はCPUの種類によっても種類が変わってくるので、尚更人間には理解が難しかったりします。

3.代表的なプログラミング言語

プログラム言語には、本当に様々な種類が存在します。
なので、ここでは比較的有名なプログラミング言語をいくつか紹介しておきます。

C言語

現状使用されている主流のプログラミング言語の中では最も古いプログラミング言語です。
C言語を用いてプログラムを記述しているということは少ないです。
ですが、C言語をベースとして開発されたプログラミング言語は多々あります
プログラミング言語の下地となっている重要な言語なのです。

C++言語

C言語をベースとして拡張したプログラミング言語です。
オブジェクト許可という考え方に対応しています。

Java言語

C言語/C++言語をベースとして開発されたプログラミング言語です。
開発したのは、Sun Microsystems社です。
Androidなどで用いられている言語です。

C#言語

Microsoft社がJava言語などを参考にして独自に開発したプログラミング言語です。

Swift

Apple社が独自に開発したプログラミング言語です。
Apple社製品であるiPhoneやiPadなどのアプリ開発に使用されています。

Python

人工知能や仮想通過などに使用される多目的言語です。

Ruby

日本で独自に開発されたプログラミング言語です。
日本で開発されて世界でも利用されているという稀有な言語です。

以上、「コンピュータをプログラムで動かすまでの流れ」についての説明でした。