作者brianhsu (坟墓)
看板Soft_Job
标题Re: [请益] 想不通直译器vs编译器vs机器码的问题
时间Wed May 9 10:10:25 2018
※ 引述《dragoncfe168 (梅长苏)》之铭言:
: 请问一下
: 为何直译器将source code转译成机器码,
: 不会产生不同电脑的机器语言不同 而无法执行的问题???
: 反观同样把source code转译成机器码的编译器
: 却会有此类问题呢???
虽然大家已经回很多了,但再回一篇应该也没关系吧。
试试看能不能用简单的方式来类比,当然因为是类比,所以不是那麽精确,
例如转成机器码这件事本身还牵扯到 Linker 等等的,就先不管了啦。XD
从後续的推文来看,原 PO 提到的其实有三种东西:
1. 编译成机器码的编译器模式 (Ex. 传统的 C/C++ 编译器)
类比:
- 书面讲稿翻译,从中文翻成英文,管你讲者念不念,我全部一次
翻译好给你。
- 听众语言(目标平台)不同,下一场的听众是法国人怎麽办?找个
懂中文和法文的翻译者呗。
- 所以通常说 C / C++ Compiler,其实省略了目标平台的描述。
就算同样是 C 编译器,也不一定每种目标平台都支援,可以说
是不同的程式。
- 因为是书面翻译,翻译完的东西可以给会念英文的人帮你念,翻译
者翻完就可以滚蛋了。
2. Python 等直译式语言
类比:
- 现场口译,从中文翻成英文。但只有当你讲的时候我才一句一句
翻译,就算你中文讲稿上有,但讲者没讲出口的字句,口译者就
不会去翻译。
- 听众语言(目标平台)不同,下一次的听众是法国人怎麽办?找个
会从中文翻成法文的口译者呗。
- 所以通常说某种语言的直译器,其实省略了目标平台的描述。就
算同样叫做 Python 直译器,但他们懂的目标语言可能不同,可
以说是两只不同的程式。
- 因为是口译,所以演讲的时候翻译者 (Python 直译器) 一定要在场。
3. .NET / Java 等编译成中介语言的编译模式
类比:
- 书面翻译後再口译。我通通先翻成某种为了特殊目的而创立的语言,
例如逻辑语[1],然後再找个逻辑语的口译来现场翻译。
- 所以如果要从中文翻译成英文,要做以下两个步骤:
1. 先把中文翻译成逻辑语 (Java Compiler / 你下 javac 时在做的事)
2. 把逻辑语翻译成英文念出来(Java Runtime / 你下 java Main 时在做的事)
- 听众语言(目标平台)不同,下一次的听众是法国人怎麽办?找个会
把逻辑语翻成法文的译者呗。
- 所以我们说 Java / .NET 执行环境,其实省略了目标平台的描述。
就算同样叫 Java 执行环境,他们懂的目标语言可能不同,可以说是
不同的程式。
- 因为某种程度上来说也是口译,所以翻译者 (Java Runtime) 一定要在场。
[1]:
https://zh.wikipedia.org/wiki/%E9%80%BB%E8%BE%91%E8%AF%AD
至於这三种模式能不能跨平台,那就要看你怎麽去定义「跨平台」这件事了。
--
~
白马带着她一步步地回到中原。白马已经老了,只能慢慢地走,
'v'
Brian Hsu 但终是能回到中原的。江南有杨柳、桃花,有燕子、金鱼……
// \\
( 坟 墓 )
/( )\
但这个美丽的姑娘就像古高昌国人那样固执。 【白马啸西风】
^`~'^
http://brianhsu.moe 『那都是很好很好的,可我偏不喜欢。』
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.251.151.199
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1525831828.A.C97.html
※ 编辑: brianhsu (60.251.151.199), 05/09/2018 10:17:34
1F:→ pttworld: 蟒蛇用bytecode 05/09 11:26
2F:推 dragoncfe168: 太感谢你了!这篇解说堪称经典~值得M起来供後世传颂! 05/09 11:49
3F:推 dragoncfe168: 当今市面上尚无一教师与书籍能做如此卡通化的阐述.. 05/09 12:04
4F:推 dragoncfe168: 倘若补教老师皆能有如此统整归纳类比能力~ 05/09 12:09
5F:→ dragoncfe168: 天下万千莘莘学子~又何愁学不会程式呢? 05/09 12:14
6F:推 koushimei: 这样解释稍微有点概念了! 05/09 12:41
7F:推 senjor: 其实如果有从计算机概论从头学,应该还是会懂啦... 05/09 12:43
8F:推 peanut97: 因为能不能清楚解释这个跟收入没有太大关系XD 05/09 12:47
9F:推 senjor: 其实很多工作不懂或没有记起来这个也没有什麽影响 XD 05/09 12:56
10F:推 jojojen: 推 05/09 13:51
11F:推 gname: 推一个~ 05/09 17:10
12F:推 soheadsome: 有JIT的范例 有办法在说看看AOT的范例吗xde 05/09 20:01
13F:推 Awenwen: 厉害了 05/11 13:52