8

私の理解は次のようなものです、定義:

翻訳- ある言語でコードを作成し、別の言語でコードを生成すること。

Compilaton - マシンコードへの変換。

マシンコード- CPU への直接命令。

次に、docs.oracle.comから:

javac - Java プログラミング言語コンパイラ

コンパイラ...?マシンコードではないコードを生成しているので、 Javaトランスレータだと思います。バイトコードを実行するにはインタープリター (JVM) が必要なので、明らかにマシン コードではありません。

ウィキペディアから:

Java アプリケーションは通常、バイトコードにコンパイルされます。

同様に。定義によれば、Java はバイトコードに変換されると言えます。インターネットにはもっと多くの例がありますが、それについて混乱があるか、何かが足りないだけだと思います。

これを明確にしていただけますか? 翻訳と編集の違いは何ですか?

4

4 に答える 4

5

javac の結果はマシンコードです。マシンが物理的ではなく仮想的であるという事実は関係ありません (そうでなければ、x86 コードは Mac マシン コードではないため、Mac ユーザーの場合、x86 でコードをコンパイルすることは翻訳であると主張できます)。

于 2013-05-18T09:36:42.027 に答える
1

「コンパイラは、プログラミング言語 (ソース言語) で書かれたソース コードを別のコンピューター言語 (ターゲット言語、多くの場合、オブジェクト コードと呼ばれるバイナリ形式を持つ) に変換するコンピューター プログラム (またはプログラムのセット) です。」

http://en.wikipedia.org/wiki/コンパイラ

したがって、コンパイルは、出力がマシンコードであることを意味するものではありません。たとえば、初期の C++ コンパイルでは C プログラムが生成され、それを再びマシン コードにコンパイルする必要がありました。もちろん、優れたコンパイラはこれらの個別のステップをユーザーから隠しますが、それでも存在します。

今日、私は少なくとも同じ手順を実行する NesC コンパイラを知っています。

JVM バイトコードを実行するマシンを構築できます。実際には、A. Tanenbaum の Structured Computer Organization のいくつかの章で、その方法が説明されています。

http://www.amazon.com/Structured-Computer-Organization-5th-Edition/dp/0131485210

于 2013-05-18T11:22:49.263 に答える