コンパイル

記事数:(7)

開発

ネイティブプログラムを理解する

人間と計算機では、言葉の理解方法が大きく異なります。私たち人間は、日本語や英語など、高度な言語を使って考えや指示を表現します。この表現方法は、様々な意味やニュアンスを含めることができ、複雑な事柄も伝えることができます。しかし、計算機はそうではありません。計算機が直接理解できる言葉は、機械語と呼ばれるごく単純な命令の列だけです。これは、0と1の組み合わせで表現される、いわば計算機にとっての「母国語」のようなものです。 私たちが計算機に指示を出す場合、まず人間が理解しやすい言葉でプログラムを書きます。これをプログラミング言語を用いた記述と言います。しかし、このプログラムを計算機に直接実行させることはできません。なぜなら、計算機はプログラミング言語を理解できないからです。そこで、翻訳の作業が必要になります。人間が書いたプログラムを、計算機が理解できる機械語に変換するのです。この翻訳作業を行うのが、コンパイラと呼ばれる特別なプログラムです。コンパイラは、プログラミング言語で書かれたプログラムを読み込み、それを機械語に変換します。こうして作られた、機械語で表現されたプログラムが、ネイティブプログラムと呼ばれるものです。 ネイティブプログラムは、特定の種類の計算機のために作られています。つまり、ある計算機用に作られたネイティブプログラムは、他の種類の計算機では実行できない場合があります。これは、人間の世界で例えると、日本語で書かれた本を英語を話す人にそのまま渡しても、理解してもらえないのと同じです。 ネイティブプログラムは、機械語で直接書かれているため、計算機は余計な手順を踏むことなく、その指示を実行できます。そのため、処理速度が速く、計算機の能力を最大限に引き出すことができます。これが、ネイティブプログラムの大きな利点です。まるで、母国語で話しかけられた時に、スムーズに理解し、反応できるのと同じように、計算機もネイティブプログラムを速やかに実行できるのです。
開発

機械語:コンピュータの母国語

機械語とは、計算機が直接理解し、実行できる命令の言葉です。これは、人間で言えば母語に当たるものです。私たちが日本語で考え、話すように、計算機は機械語で動作します。この機械語は、0と1の二つの数字だけを組み合わせて表現されます。まるで電気が流れるか流れないかを表すスイッチのオンとオフのように、この0と1の並びが、計算機への様々な指示を表します。 例えば、計算機の記憶装置の特定の場所に情報を書き込む、計算を行う、画面に文字を表示するといった動作は、すべて0と1の組み合わせで指示されます。この0と1の特定の並びが、一つ一つの命令に対応しているのです。例えば、「0010」は情報を加える、「0100」は情報を記憶装置から読み出す、といった具合です。 機械語は、計算機の種類ごとに異なります。同じように見える計算機でも、内部の構造が違えば、使用する機械語も違うのです。これは、人間の世界で、日本語を話す人と英語を話す人がいるのと同じです。それぞれが理解できる言葉が違うため、異なる種類の計算機で同じ処理をさせたい場合は、その計算機が理解できる機械語に翻訳する必要があります。 機械語は、計算機と直接やり取りするための言葉であり、計算機を動かすための基本となる重要なものです。私たちが普段使っている様々な道具も、内部ではこの機械語によって制御されているのです。
開発

オブジェクトファイル:プログラムの部品

部品のようにプログラムの一部となる機械語の断片を収めたファイル、それが目的ファイルです。人間が書いたプログラムの元となる指示書である原始文を、計算機が直接理解できる機械語へと翻訳する手順を「翻訳」と言いますが、この翻訳作業を行うと、目的ファイルが作られます。 目的ファイルの中身は、計算機が実行できる命令の集まりです。しかし、目的ファイル単体ではプログラムとして動きません。プログラム全体を構成する部品の一つに過ぎないからです。完成した建物で例えるなら、壁や窓枠といった部品のようなものです。これらの部品だけでは家は完成しませんよね。 プログラムとして動くようにするためには、他の目的ファイルや、よく使う機能をまとめた部品集(関数ライブラリ)とを繋ぎ合わせる作業が必要です。この繋ぎ合わせの作業を「連結」と言います。連結によって、それぞれの部品が適切な場所に配置され、初めて全体として意味のあるプログラムが完成します。 目的ファイルは、プログラムを作る上での重要な中間生成物です。大きなプログラムを作る場合、プログラム全体を一度に翻訳するのではなく、機能ごとに分割して、それぞれの部分を目的ファイルとして作成することがよくあります。こうすることで、一部を変更した場合でも、変更された部分の目的ファイルだけを翻訳し直せば済むので、開発作業が効率化されます。また、よく使う機能を部品集としてまとめておけば、毎回同じプログラムを書く手間を省くことができます。目的ファイルは、このような柔軟で効率的なプログラム開発を支える、縁の下の力持ちと言えるでしょう。
開発

コンパイルエラー:プログラムの文法ミスを見つける

- コンピルエラーとは私たちは普段、日本語や英語など、様々な言語を使って相手に意思を伝えています。しかし、コンピュータは人間の言葉をそのまま理解することはできません。コンピュータが理解できる言葉は、0と1の数字の羅列でできた「機械語」だけです。そこで、人間が書いたプログラムをコンピュータが理解できる機械語に変換する必要があります。この変換作業を「コンパイル」と呼びます。コンパイルは、専用のソフトウェア「コンパイラ」が行います。コンパイルエラーとは、このコンパイルの過程で発生するエラーのことを指します。人間が書いたプログラムの中に、文法的に間違っている箇所があると、コンパイラは正しく機械語に変換できません。その結果、エラーが発生します。例えば、日本語で「今日は晴れです。」と書く際に、「。」を付けずに「今日は晴れです」と書いてしまうと、文法的に誤りがあります。同様に、プログラミング言語にも独自の文法があり、句読点の付け忘れや、必要な単語の欠落、変数の型の不一致などがあると、コンピュータはプログラムを理解できません。コンパイルエラーを解決するには、エラーメッセージの内容をよく読み、プログラムの誤りを修正する必要があります。 コンパイラは、エラーが発生した箇所を具体的に示してくれるので、修正作業を効率的に行うことができます。
開発

ソースコードから機械語へ:コンパイルの役割

私たちが日々当たり前のように利用しているソフトウェアやアプリケーション。これらは全て、プログラムと呼ばれる形でコンピューターに対する指示を記述することで動作しています。しかし、人間にとって理解しやすいプログラミング言語で書かれた指示を、コンピューターはそのままの形では理解することができません。コンピューターが理解できるのは、0と1の組み合わせで表現される機械語と呼ばれる言葉だけなのです。 そこで重要となるのが「コンパイル」というプロセスです。コンパイルとは、人間が書いたプログラムを、コンピューターが理解できる機械語へと翻訳する作業のことを指します。この翻訳作業を行うのが、コンパイラと呼ばれる特別なソフトウェアです。コンパイラは、プログラミング言語の文法に従って書かれたプログラムを読み込み、それを機械語に変換することで、コンピューターが実行可能な形に変えます。 コンパイルが完了すると、機械語で書かれたプログラムが生成されます。これをコンピューターが読み込み、順番に実行していくことで、私たちが意図した処理が実現されるのです。例えば、画面に文字を表示するプログラムの場合、コンパイルによって、画面のどの位置にどの文字を表示するかといった具体的な指示が機械語で生成され、コンピューターはその指示に従って画面表示を行います。 このように、私たちが意識することなく使用しているソフトウェアやアプリケーションの裏側では、コンパイルというプロセスが重要な役割を担っているのです。
開発

再コンパイル:プログラム修正の要

プログラムは、完成して終わりではなく、むしろそこからが始まりであるとも言えます。なぜなら、プログラムは作成後も様々な理由から修正や機能追加が必要となる場合が多いからです。 例えば、ユーザーから使い勝手を向上させてほしいという要望が寄せられるかもしれません。また、実際にプログラムを運用していく中で、当初は想定していなかったバグが発見されることもあります。さらに、技術の進歩は目覚ましく、開発当初は最新であった技術が、時間の経過とともに時代遅れになってしまうことも考えられます。 このような場合に必要となるのが、プログラムの修正と再コンパイルという作業です。プログラムに変更を加えた後、コンピュータが理解できる形式に変換し直すことで、変更を反映させることができます。この作業は、プログラムをより良いものへと成長させていくために欠かせないプロセスと言えるでしょう。
開発

目的ファイルとは?オブジェクトファイルとの関係を解説

- 目的ファイルとは 目的ファイルとは、私たちが普段目にしているプログラムの元となるソースコードを、コンピュータが理解できる言葉に変換した際に生成されるファイルです。この変換作業はコンパイラと呼ばれるプログラムが行います。 目的ファイルには、プログラムを構成する命令やデータなどが、コンピュータが直接理解できる機械語と呼ばれる形式で格納されています。その他にも、プログラムの中で使われている変数や関数に関する情報なども含まれています。 ただし、目的ファイルは、まだプログラムとして実行できる完成形ではありません。プログラムを実行するためには、複数の目的ファイルを一つにまとめ、実行可能な状態に変換する必要があります。 この最終的な変換作業を行うのがリンカと呼ばれるプログラムです。リンカは、複数の目的ファイルを結合し、それぞれのファイル内の情報をつなぎ合わせて、初めてプログラムとして動作可能な状態にします。