※ 引述《dragoncfe168 (梅长苏)》之铭言:
: 请问一下
: 为何直译器将source code转译成机器码,
: 不会产生不同电脑的机器语言不同 而无法执行的问题???
: 反观同样把source code转译成机器码的编译器
: 却会有此类问题呢???
呃,我觉得你没有搞清楚一件事,原始码、中间码、机器码的差异。
首先,编译器的目的,不是转成机器码用的。
编译器的目的,是把语言 A 的原始码,转成语言 B 的原始码用的。
例如 LLVM 或者是 GCC,它们把 C/C++ 转过后,不是直接变成执行档,
而是先变成一个特殊语言的中间码 (IR),再由后端(backend)机制,转成执行档。
而执行档,也可以说是一种机器码。
若是语言 B 就是组语,当然你也可以当作是一种转机器码。
而直译器的目的,是用来直接执行的。
换句话说,原始档并没有经过转换!没有 xxxx.a -> xxxx.b -> xxxx.exe
这种过程,而是 xxxx.a 直接喂进直译器,由直译器帮你执行。
以 Java 为例,XXXX.java -> XXXX.class 这过程,的确可以说是编译。
而从概念性的角度来看,JVM 执行 XXXX.class 这过程,可以说是直译。
这若牵涉到内部 JIT 的运作,则 JVM 亦有编译机制在里头,但这更深了,
不在讨论范围。