作者dragoncfe168 (梅长苏)
看板Soft_Job
标题[请益] 想不通直译器vs编译器vs机器码的问题
时间Tue May 8 20:26:49 2018
请问一下
为何直译器将source code转译成机器码,
不会产生不同电脑的机器语言不同 而无法执行的问题???
反观同样把source code转译成机器码的编译器
却会有此类问题呢???
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.134.242.107
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1525782413.A.89A.html
※ 编辑: dragoncfe168 (220.134.242.107), 05/08/2018 20:28:21
1F:推 abccbaandy: 因为前者转译的时间点是执行时阿干 05/08 20:32
2F:→ dragoncfe168: 不懂耶 不管执不执行 机器码难道会有两种标准? 05/08 20:38
3F:推 jojojen: 同样的指令在不同机器上是不同的机器码 05/08 20:40
4F:→ Ekmund: 不懂你的问题 你是遇到什麽状况? 05/08 20:41
5F:→ dragoncfe168: 难道同样的指令在直译器与编译器上是两套标准?? 05/08 20:41
6F:→ dragoncfe168: 我的问题是编译器会受制於机器语言 为何直译器不会? 05/08 20:43
7F:→ dragoncfe168: 为何直译器不管任何机器语言都可以run?? 05/08 20:44
8F:→ a0919610611: 直译器本身也是binary阿,怎麽不会 05/08 20:46
9F:→ jojojen: 某程式指令用机器a的语言表示是0000;用机器b可能是0010; 05/08 20:51
10F:→ jojojen: 所以机器a编译好机器b是看不懂的,直译器是执行时才决定 05/08 20:51
11F:→ jojojen: 用0000还是0010 05/08 20:51
12F:→ bcew: 直译器是读程式码执行,不是编机械码 05/08 21:24
13F:→ alan3100: 你在a机器装b直译器也不能跑呀 05/08 21:27
14F:→ alog: 去拿现成程式语言去研究他的设计不是更快 05/08 21:37
15F:→ alog: 书上讲的只是大概的概念而已 硬着头皮吸收你也不明白人家怎 05/08 21:38
16F:→ alog: 麽干 05/08 21:38
17F:→ final01: 多看点书... 05/08 21:54
18F:→ visualcshape: 不同平台要用对应的直译器 05/08 22:02
19F:推 s310143: 请去看LLVM相关说明在问吧 05/08 22:19
20F:推 yupog2003: 编译器就像你都不知道眼前这个人懂什麽语言就开始把脑 05/08 22:48
21F:→ yupog2003: 中的概念转换成某个语言讲给他听,假设是中文好了 05/08 22:48
22F:→ yupog2003: 万一他不会中文就GG了,直译器则是当你知道他只会讲英 05/08 22:49
23F:→ yupog2003: 文的时候才把脑袋中想讲的东西翻成英文讲给他听 05/08 22:49
24F:→ yupog2003: 万一你不会讲英文那也是GG,所以直译器也是会有同样的 05/08 22:49
25F:→ yupog2003: 问题拉 05/08 22:49
26F:推 bill0205: 程式语言就只是给人类看的 编译器就是把人类看的语言转 05/08 22:52
27F:→ bill0205: 成机器看得懂的语言 但是每种机器懂的语言不同 05/08 22:52
28F:→ bill0205: 所以编译器就自动转成相对应的机器马 05/08 22:52
29F:→ y3k: 呃这...多看点书+1 05/09 00:07
30F:→ dreamnook: 直译器: 一份英文稿 交给日本人跟台湾人翻 05/09 09:13
31F:→ dreamnook: 编译器: 一份英文稿 米果人翻好 给日本人跟台湾人看 05/09 09:13
32F:→ lturtsamuel: 因为直译器没有转机器码 是直接执行 05/09 09:13
33F:→ lturtsamuel: 跨平台的问题 直译器已经帮你做了 不是不用做 05/09 09:14
34F:→ williamtsai: 不同架构的电脑上的直译器 binary 不同,所以产生的 05/09 16:07
35F:→ williamtsai: 指令也不同,每个平台的直译器都是用那个平台的 comp 05/09 16:07
36F:→ williamtsai: iler 编出来的 05/09 16:07
37F:推 OhNo386: 直译器语言写给直译器看的与系统或平台无关,反之c++编 05/09 19:59
38F:→ OhNo386: 译器就是写给系统看的,就算是win gcc 最後system call 05/09 19:59
39F:→ OhNo386: 还是呼叫到os,所以才有平台写法的差别。但go也算是你所 05/09 19:59
40F:→ OhNo386: 谓直译器的概念,虽然它是编译式? 05/09 19:59
41F:→ s860134: 没说到点,直译器说实在就是提供一套 API 介面供你呼叫 05/11 22:43
42F:→ s860134: 你写的程式码能够跨平台是因为他在不同平台都实做了一套 05/11 22:44
43F:→ s860134: 相同 API 介面的直译器,才让你同份 code 能在不同平台 05/11 22:45
44F:→ s860134: 上面跑,编译器只是根据每个平台先编成那个平台专用语言 05/11 22:46
45F:→ s860134: 像 python 直译器实做就有 cpython jypthon ironpython 05/11 22:50
46F:→ s860134: 分别是用 C, java, C# 实做的,但是他们都能看懂一样 05/11 22:51
47F:→ s860134: 的语法 05/11 22:52