4

プログラミングの本では、CPU が C++ 言語 (または高級プログラミング言語) を理解できないと指摘することがあります。すべての C++ ステートメントは、実行する前にマシン コードに変換する必要があります。しかし、誰が翻訳するのですか?

ああ、それはミステリーではない、と彼らは言います。翻訳はコンパイラによって行われます。コンパイラ自体はコンピュータ プログラムです。しかし、その場合、コンピューターが翻訳を行っています。

これは私には解決不可能なパラドックスのように思えます。CPU (コンピューターの心臓部にある「頭脳」) は C++ の単語を理解するわけではありませんが、C++ と独自の内部言語との間の変換を実行します。矛盾していませんか?

4

1 に答える 1

14

答えの大部分は次のとおりです。エッセイやメモを保存するのと同じように、C++ ソース コード (または高レベルのプログラミング言語) はテキスト ファイルに保存されます。ただし、テキスト文字は数値形式で格納されます。したがって、コンパイラがこのデータを処理するときは、別の形式の数値計算を行い、データを評価し、正確な規則に従って決定を下します。

それでも問題が解決しない場合は、次のことを想像してみてください。あなたは、日本語は知っているが英語は知らない人からの手紙を読む仕事をしています。一方、あなたは英語は知っていますが、日本語は一言も知りません。

しかし、日本語の文字を英語の文字に翻訳する方法を説明した説明書があるとします。説明書自体は英語で書かれているので、問題なく使用できます。

そのため、日本語がわからなくても、指示に注意深く従うことで、必要なすべての日本語を翻訳できます。

それがコンピュータープログラムとは、実際のところ、CPU によって読み取られる指示書です。コンピュータ プログラムは不活性なもの (一連の命令とデータ) ですが、コンピュータ内部の「知識」はそのプログラムから生じます。プログラムは、C++ を含むテキスト ファイルの翻訳など、あらゆる種類の巧妙なことをコンピューターに実行させます。

もちろん、コンパイラは非常に特別なプログラムですが、それが行うことはまったく奇妙でも不可能でもありません。コンピュータープログラムとしては、説明どおりの「説明書」です。実行方法は、C++ ソース コードを含むテキスト ファイルを読み取り、別の指示書を出力することです。この出力は、実行可能な形式の C++ プログラムです。

最初のコンパイラはマシンコードで書かなければなりませんでした。その後、古いコンパイラを使用して新しいコンパイラを作成できるようになりました...そのため、ブートストラップ プロセスを通じて、熟練したプログラマーでさえ、マシン コードの記述に依存することが少なくなりました。

于 2012-08-03T10:54:28.087 に答える