作者dragoncfe168 (梅長蘇)
看板Soft_Job
標題[請益] 想不通直譯器vs編譯器vs機器碼的問題
時間Tue May 8 20:26:49 2018
請問一下
為何直譯器將source code轉譯成機器碼,
不會產生不同電腦的機器語言不同 而無法執行的問題???
反觀同樣把source code轉譯成機器碼的編譯器
卻會有此類問題呢???
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.134.242.107
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1525782413.A.89A.html
※ 編輯: dragoncfe168 (220.134.242.107), 05/08/2018 20:28:21
推 abccbaandy: 因為前者轉譯的時間點是執行時阿幹 05/08 20:32
→ dragoncfe168: 不懂耶 不管執不執行 機器碼難道會有兩種標準? 05/08 20:38
推 jojojen: 同樣的指令在不同機器上是不同的機器碼 05/08 20:40
→ Ekmund: 不懂你的問題 你是遇到什麼狀況? 05/08 20:41
→ dragoncfe168: 難道同樣的指令在直譯器與編譯器上是兩套標準?? 05/08 20:41
→ dragoncfe168: 我的問題是編譯器會受制於機器語言 為何直譯器不會? 05/08 20:43
→ dragoncfe168: 為何直譯器不管任何機器語言都可以run?? 05/08 20:44
→ a0919610611: 直譯器本身也是binary阿,怎麼不會 05/08 20:46
→ jojojen: 某程式指令用機器a的語言表示是0000;用機器b可能是0010; 05/08 20:51
→ jojojen: 所以機器a編譯好機器b是看不懂的,直譯器是執行時才決定 05/08 20:51
→ jojojen: 用0000還是0010 05/08 20:51
→ bcew: 直譯器是讀程式碼執行,不是編機械碼 05/08 21:24
→ alan3100: 你在a機器裝b直譯器也不能跑呀 05/08 21:27
→ alog: 去拿現成程式語言去研究他的設計不是更快 05/08 21:37
→ alog: 書上講的只是大概的概念而已 硬著頭皮吸收你也不明白人家怎 05/08 21:38
→ alog: 麼幹 05/08 21:38
→ final01: 多看點書... 05/08 21:54
→ visualcshape: 不同平台要用對應的直譯器 05/08 22:02
推 s310143: 請去看LLVM相關說明在問吧 05/08 22:19
推 yupog2003: 編譯器就像你都不知道眼前這個人懂什麼語言就開始把腦 05/08 22:48
→ yupog2003: 中的概念轉換成某個語言講給他聽,假設是中文好了 05/08 22:48
→ yupog2003: 萬一他不會中文就GG了,直譯器則是當你知道他只會講英 05/08 22:49
→ yupog2003: 文的時候才把腦袋中想講的東西翻成英文講給他聽 05/08 22:49
→ yupog2003: 萬一你不會講英文那也是GG,所以直譯器也是會有同樣的 05/08 22:49
→ yupog2003: 問題拉 05/08 22:49
推 bill0205: 程式語言就只是給人類看的 編譯器就是把人類看的語言轉 05/08 22:52
→ bill0205: 成機器看得懂的語言 但是每種機器懂的語言不同 05/08 22:52
→ bill0205: 所以編譯器就自動轉成相對應的機器馬 05/08 22:52
→ y3k: 呃這...多看點書+1 05/09 00:07
→ dreamnook: 直譯器: 一份英文稿 交給日本人跟台灣人翻 05/09 09:13
→ dreamnook: 編譯器: 一份英文稿 米果人翻好 給日本人跟台灣人看 05/09 09:13
→ lturtsamuel: 因為直譯器沒有轉機器碼 是直接執行 05/09 09:13
→ lturtsamuel: 跨平台的問題 直譯器已經幫你做了 不是不用做 05/09 09:14
→ williamtsai: 不同架構的電腦上的直譯器 binary 不同,所以產生的 05/09 16:07
→ williamtsai: 指令也不同,每個平台的直譯器都是用那個平臺的 comp 05/09 16:07
→ williamtsai: iler 編出來的 05/09 16:07
推 OhNo386: 直譯器語言寫給直譯器看的與系統或平台無關,反之c++編 05/09 19:59
→ OhNo386: 譯器就是寫給系統看的,就算是win gcc 最後system call 05/09 19:59
→ OhNo386: 還是呼叫到os,所以才有平台寫法的差別。但go也算是你所 05/09 19:59
→ OhNo386: 謂直譯器的概念,雖然它是編譯式? 05/09 19:59
→ s860134: 沒說到點,直譯器說實在就是提供一套 API 介面供你呼叫 05/11 22:43
→ s860134: 你寫的程式碼能夠跨平台是因為他在不同平台都實做了一套 05/11 22:44
→ s860134: 相同 API 介面的直譯器,才讓你同份 code 能在不同平台 05/11 22:45
→ s860134: 上面跑,編譯器只是根據每個平台先編成那個平台專用語言 05/11 22:46
→ s860134: 像 python 直譯器實做就有 cpython jypthon ironpython 05/11 22:50
→ s860134: 分別是用 C, java, C# 實做的,但是他們都能看懂一樣 05/11 22:51
→ s860134: 的語法 05/11 22:52