第1章。こんにちは 、世界!
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
人間はコードを書くが、コンピュータが理解するのは0と1だけだ。だからコードはコンピュータ向けに「翻訳」される必要がある。PythonやJavaScriptのような言語はインタプリタ型だ。つまりツールがコードを読み取り、実行時に動的に処理を決定する。こうしたコードは実行するたびに再解釈されねばならない。
JavaやC#のような他の言語は、中間言語(例えばJavaのバイトコード)にコンパイルされる。出力された中間言語は仮想マシンによって解釈されるため、コードを一度コンパイルすればほぼどこでも実行できる。これは実行のたびにコードを解釈するよりも効率性が高い。なぜなら最初の変換ステップは一度だけ行えばよいからだ。
C++は異なるが、CやFortranなど他の言語と同じプロセスを踏む。C++ソースコードは直接、コンピュータが理解できる形式に変換される。C++コードをビルドする際には、二つのステップが行われる。
まずコンパイラがコードを読み取り、32ビットWindowsや64ビットLinux、組込みシステムなど、ターゲットマシン固有のオブジェクトファイルを生成する。異なるマシンで実行したい場合は、再ビルドが必要だ。 小規模なプログラムの場合、コンパイラが生成したオブジェクトファイルはメモリ内に残ることもある。大規模なプログラムでは、拡張子*.oや*.obj を持つこれらのファイルがマシン上に生成されるのを目にするだろう。
次に、リンカーが オブジェクトファイルを結合してライブラリを生成する。このライブラリは別のコードベースで使用できるほか、直接実行可能なプログラムとしても利用できる。
要するに、コードを書くと、コンパイラがコードを解析してオブジェクトファイルを生成し、リンカがそれらを結合して実行可能なプログラム(または使用可能なライブラリ)にする。図1-1に示す通りだ。
図1-1. コンパイラはソース ファイルからオブジェクトファイルを生成し、リンカがそれらを結合して最終出力を生成する
理論上、特定のマシン向けに事前にコンパイルとリンキングを行うことで、プログラムのスピードを向上させられる。実際、C++はスピードを重視して選ばれることが多く、ブラウザやJava仮想マシンもC++で実装されている場合がある。
C++は確かに難しいという評判がある。比較的低レベルな言語であり、より多くの制御権を与え、非常に高速なコードを書く可能性を秘めている。例えるなら、マニュアルトランスミッションの車はオートマチック車よりもドライバーに多くの制御権を与える。より速く走れるが、操作を誤ればギアを間違えたりエンジンをストールさせたりするかもしれない。
同様に、C++コードの小さなミス一つでコンパイラが大量のエラーを吐き出したり、リンカが「エラー、関数が見つかりません」と主張したりする。この本を読み進める中で、時折問題に遭遇するかもしれない。慌てる必要はない。問題の発生箇所を直感的に見極める力が養われるし、私は簡単なところから導いていく。
他のプログラミング言語を既に知っているなら、本書を読むことでその言語の内部動作をより深く理解できるだろう。C++はハードウェアに近づくため、どの言語でもプログラミングの理解が深まる。C++を学ぶ時間は必ず報われる。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access