Re: [請益] 想不通直譯器vs編譯器vs機器碼的問題

看板Soft_Job (軟體人)作者 (恰似飛鴻踏雪泥)時間7年前 (2018/05/09 12:42), 7年前編輯推噓0(0011)
留言11則, 3人參與, 7年前最新討論串7/9 (看更多)
※ 引述《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 亦有編譯機制在裡頭,但這更深了, 不在討論範圍。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.242.99.124 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1525840949.A.042.html ※ 編輯: fayhong (27.242.99.124), 05/09/2018 12:43:06

05/09 12:48, 7年前 , 1F
直譯器也有轉bytecode的
05/09 12:48, 1F

05/09 13:35, 7年前 , 2F
請問直譯轉 bytecode 後,是直接執行,還是給別的 VM 執
05/09 13:35, 2F

05/09 13:35, 7年前 , 3F
行呢?
05/09 13:35, 3F

05/09 13:53, 7年前 , 4F
轉 bytecode 的過程感覺要叫編譯
05/09 13:53, 4F

05/09 13:59, 7年前 , 5F
en.wikipedia.org/wiki/Interpreter_(computing)
05/09 13:59, 5F

05/09 14:32, 7年前 , 6F
直譯->執行來源語言 編譯->轉換來源語言為目標語言
05/09 14:32, 6F

05/09 14:33, 7年前 , 7F
我是根據interpreter和compiler頁面前幾行去解釋的
05/09 14:33, 7F

05/09 14:34, 7年前 , 8F
像是JIT compilation後面也是寫compilation
05/09 14:34, 8F

05/09 15:28, 7年前 , 9F
你看wiki的第二個type就是了,有三種。
05/09 15:28, 9F
※ 編輯: fayhong (42.72.218.191), 05/09/2018 17:39:22

05/09 17:43, 7年前 , 10F
樓上說的bytecode是java的bytecode還是中間碼?
05/09 17:43, 10F

05/09 18:00, 7年前 , 11F
http://0rz.tw/LW6XR 突然想到python(雖然我不熟)
05/09 18:00, 11F
文章代碼(AID): #1Qydmr12 (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1Qydmr12 (Soft_Job)