Re: [請益] 想不通直譯器vs編譯器vs機器碼的問題
※ 引述《dragoncfe168 (梅長蘇)》之銘言:
: 請問一下
: 為何直譯器將source code轉譯成機器碼,
: 不會產生不同電腦的機器語言不同 而無法執行的問題???
直譯器並不是轉成機械碼, 而是直接執行運算。
例如:
1+2
直譯器在發現是執行 加法時, 就會用寫該直譯器的語言完成 1+2 的結果。
如果是用 c 寫的, 就會執行 add_fun(1,2), 然後得到 3。
: 反觀同樣把source code轉譯成機器碼的編譯器
: 卻會有此類問題呢???
而編譯器並不是直接轉成機械碼, 而是組合語言,
add 1,2
但是一直到最後的執行檔, 都不是編譯器做的。
組譯器把 add 1,2 變成 機械碼, 還有某種格式的執行檔,
這就是不能執行的原因之一, 是的有之一, 還有其他條件會造成
這個執行檔無法在其他平台執行的原因, 不過不同的
執行檔格式算是比較容易解釋的一個原因。
--
紙上得來終覺淺,絕知此事要躬行。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.10.86.24
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1525792354.A.F02.html
推
05/09 00:27,
7年前
, 1F
05/09 00:27, 1F
→
05/09 00:27,
7年前
, 2F
05/09 00:27, 2F
→
05/09 00:27,
7年前
, 3F
05/09 00:27, 3F
→
05/09 00:27,
7年前
, 4F
05/09 00:27, 4F
如果給你一個 1 + 2 這樣的輸入字串,
你能不能寫一個程式, 算出 3?
直譯器就是在做這樣的事情。
你可以想成每個平台都有的計算機, 這個計算機都可以把 1+2 算出來。
但是你寫的 1+2 程式, 被該平台的編譯器/組譯器產生執行檔案之後,
只能在該平台執行。
例如: 用 vs 編譯產生的 1+2 這個程式, 並無法在 mac osX 上執行。
推
05/09 00:50,
7年前
, 5F
05/09 00:50, 5F
→
05/09 00:52,
7年前
, 6F
05/09 00:52, 6F
→
05/09 00:53,
7年前
, 7F
05/09 00:53, 7F
→
05/09 00:53,
7年前
, 8F
05/09 00:53, 8F
推
05/09 01:00,
7年前
, 9F
05/09 01:00, 9F
→
05/09 01:01,
7年前
, 10F
05/09 01:01, 10F
我的說明並沒有包含這種轉 byte code 的做法, 這種作法又稍微複雜了一點。
→
05/09 05:45,
7年前
, 11F
05/09 05:45, 11F
→
05/09 05:45,
7年前
, 12F
05/09 05:45, 12F
→
05/09 05:45,
7年前
, 13F
05/09 05:45, 13F
→
05/09 05:45,
7年前
, 14F
05/09 05:45, 14F
→
05/09 05:45,
7年前
, 15F
05/09 05:45, 15F
→
05/09 05:45,
7年前
, 16F
05/09 05:45, 16F
→
05/09 05:45,
7年前
, 17F
05/09 05:45, 17F
推
05/09 09:17,
7年前
, 18F
05/09 09:17, 18F
→
05/09 09:17,
7年前
, 19F
05/09 09:17, 19F
推
05/09 09:20,
7年前
, 20F
05/09 09:20, 20F
→
05/09 09:20,
7年前
, 21F
05/09 09:20, 21F
推
05/09 09:38,
7年前
, 22F
05/09 09:38, 22F
→
05/09 09:38,
7年前
, 23F
05/09 09:38, 23F
→
05/09 09:58,
7年前
, 24F
05/09 09:58, 24F
※ 編輯: descent (101.10.86.24), 05/09/2018 10:45:34
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 9 篇):