📜 プログラムとは何か
🎯 ソースコード・コンパイラ・機械語の関係と、コンパイルという工程の役割を説明できる
私たちが書くプログラムは、英単語と記号でできた文章です。ところが機械が理解できるのは0と1の並びだけ。この2つの間には、翻訳者が必要です。
人間が読み書きするために文字で書かれたプログラムをソースコードと呼びます。例えばC言語ではこう書きます。
#include <stdio.h>
int main(void) {
printf("こんにちは\n");
return 0;
}これを実行するには、CPUが直接読める形——機械語に翻訳しなければなりません。機械語は 10110000 01100001 のような数値の列で、人間が読むようには作られていません。この翻訳をしてくれる道具がコンパイラ、翻訳という作業そのものがコンパイルです。
翻訳は1回、実行は何度でも
コンパイルすると、機械語が詰まった「実行ファイル」ができあがります。以後はそのファイルを起動するだけで、翻訳をやり直す必要はありません。だからC言語のプログラムは動作が速く、ソースコードを渡さずに配布できます。
世の中には別のやり方もあります。Pythonなどは、実行のたびに1行ずつその場で翻訳しながら進みます(同時通訳型)。手軽ですが、毎回通訳の手間がかかる分だけ遅くなります。C言語は「先に全部訳しておく」方式だ、と覚えてください。
もう一つ、翻訳ならではの制約があります。翻訳先は機械の種類ごとに違うという点です。WindowsのパソコンとスマートフォンではCPUの言葉が違うので、同じソースコードから作った実行ファイルでも、そのままでは動きません。動かしたい相手ごとに翻訳し直す必要があります。逆に言えば、ソースコードさえあればどの機械向けにも作り直せるということでもあります。Cのプログラムが半世紀にわたって生き延びてきた理由の一つが、ここにあります。
旅は4つの駅を通る
コンパイルは、実は4つの工程をまとめた呼び名です。名前だけ先に見ておきましょう。
#include などの下ごしらえをするprintf などの部品と結合して、実行ファイルを完成させる今すぐ覚える必要はありません。第3部で自分の手で確認します。ここでは「1つのボタンに見えて、中では4人がバケツリレーをしている」というイメージだけ持っておけば十分です。
エラーは翻訳者からの質問状
書き方が間違っていると、コンパイラは翻訳をやめてエラーメッセージを出します。初心者はここでへこみますが、見方を変えてください。実行する前に間違いを見つけてもらえたということです。動かしてから壊れるより、はるかに親切な世界です。エラーの読み方は第3トラックで扱います。
人間が読み書きできる形でプログラムを書いた文章そのもの。この段階ではコンピュータはまだ直接実行できず、機械語への変換が必要になる。この文章を人間が理解しやすい形のまま保存したファイルがソースファイルと呼ばれる。
0と1の並びだけで書かれた、CPUが直接理解できる命令の集まり。人間には読みにくいが、コンピュータが実行できる唯一の言葉にあたる。同じソースコードでも、CPUの種類が変われば生成される機械語も変わってくる。
ソースコードを機械語に変換するソフトウェア。文法チェックも同時に行い、間違いがあればコンパイルエラーとして知らせてくれる翻訳者兼校正者にあたる。gccやclangなど、C言語向けのコンパイラにはいくつかの種類がある。
ソースコードをコンピュータが直接実行できる機械語に変換する作業。翻訳者が人間の言葉を機械の言葉に訳してくれる工程だとイメージすると分かりやすい。この工程を経なければ、書いたコードはコンピュータの上でまったく動かせない。
コンピュータの頭脳にあたる部品。メモリから命令とデータを取り出し、計算や判断を行って結果をまた書き戻す仕事を、目にも止まらぬ速さで繰り返している。現代のCPUは1秒間に数十億回もこのサイクルを繰り返している。
プログラムの何が・どこで間違っているかを、コンパイラや実行環境が知らせてくれる文章のこと。読めば直し方のヒントが詰まっている味方。英語で書かれていることが多いが、落ち着いて読めば重要な情報が含まれている。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。