Re: [请益] 想不通直译器vs编译器vs机器码的问题

楼主: fayhong (恰似飞鸿踏雪泥)   2018-05-09 12:42:26
※ 引述《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 亦有编译机制在里头,但这更深了,
不在讨论范围。
作者: pttworld (批踢踢世界)   2018-05-09 12:48:00
直译器也有转bytecode的
楼主: fayhong (恰似飞鸿踏雪泥)   2018-05-09 13:35:00
请问直译转 bytecode 后,是直接执行,还是给别的 VM 执行呢?
作者: weiyucsie (选择那刻 才算开始)   2018-05-09 13:53:00
转 bytecode 的过程感觉要叫编译en.wikipedia.org/wiki/Interpreter_(computing)直译->执行来源语言 编译->转换来源语言为目标语言我是根据interpreter和compiler页面前几行去解释的像是JIT compilation后面也是写compilation
作者: pttworld (批踢踢世界)   2018-05-09 15:28:00
你看wiki的第二个type就是了,有三种。
作者: weiyucsie (选择那刻 才算开始)   2018-05-09 17:43:00
楼上说的bytecode是java的bytecode还是中间码?http://0rz.tw/LW6XR 突然想到python(虽然我不熟)

Links booklink

Contact Us: admin [ a t ] ucptt.com