[爆卦]編譯直譯組譯是什麼?優點缺點精華區懶人包

為什麼這篇編譯直譯組譯鄉民發文收入到精華區:因為在編譯直譯組譯這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者descent (「雄辯是銀,沉默是金」)看板Soft_Job標題Re: [請益] 想不通直譯器...

編譯直譯組譯 在 工具王 阿璋 Instagram 的精選貼文

2021-04-04 21:34:22

【#程式教學】對初學者而言,Python 和 C 先學哪個好?  「阿璋,上次看了程式語言那篇,但我還是想不到 Python 和 C 語言到底要先學哪個好?」 Python 和 C 語言都是大學必學的語言之一,但到底先學哪個比較好上手? 來,跟著阿璋學準~沒~錯!就讓我來分析給你聽🙆‍♂ ...


※ 引述《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
jojojen: 看完這篇發現我的觀念可能也有點不清楚 請問所謂"直接執 05/09 00:27
jojojen: 行運算"不是還是要轉成機器碼讓cpu執行嗎?不好意思,問 05/09 00:27
jojojen: 題可能有點基本,但我不太懂為何沒有轉成機器碼,再麻煩 05/09 00:27
jojojen: 您了 05/09 00:27
如果給你一個 1 + 2 這樣的輸入字串,
你能不能寫一個程式, 算出 3?
直譯器就是在做這樣的事情。

你可以想成每個平台都有的計算機, 這個計算機都可以把 1+2 算出來。
但是你寫的 1+2 程式, 被該平台的編譯器/組譯器產生執行檔案之後,
只能在該平台執行。
例如: 用 vs 編譯產生的 1+2 這個程式, 並無法在 mac osX 上執行。

dragoncfe168: 我暈了!!好像越搞越複雜,現在更迷惘了。 05/09 00:50
dragoncfe168: 書上只提到jvm將程式轉譯成bytecode 要執行時再由 05/09 00:52
dragoncfe168: jvm以直譯方式,將byte code轉譯成機器碼讓真正的 05/09 00:53
dragoncfe168: 電腦去執行之!!! 05/09 00:53
dragoncfe168: ---莫非上所謂"直譯"方式,並不是指jvm的直譯器?! 05/09 01:00
dragoncfe168: 上述 05/09 01:01
我的說明並沒有包含這種轉 byte code 的做法, 這種作法又稍微複雜了一點。

bcew: 用pseudo組語來簡單解釋好了,a=1; b=2; c=a+b;在編譯後的 05/09 05:45
bcew: 結果是mov r0, 1; mov r1, 2; add r0, r1;st [c], r0; 直譯 05/09 05:45
bcew: 器要執行上面可能走過的組語是push r0; push r1; mov r0, 1; 05/09 05:45
bcew: mov r1, 2; bl add_func; st [c], r0; pop r1; pop r0; 在a 05/09 05:45
bcew: dd_func可能還有一堆錯誤檢查的組語,最後才有add r0, r1, 05/09 05:45
bcew: 但這些在編譯器編譯時就做掉,輸出的組語就只有一個加法指令 05/09 05:45
bcew: 很簡潔 05/09 05:45
lturtsamuel: 你就想像你用c語言寫一個計算機 這樣的計算機難道是" 05/09 09:17
lturtsamuel: 先把算式轉換成機器碼"再執行嗎? 05/09 09:17
lturtsamuel: 當然如果要談到優化的話可能會用上機器碼 不過直譯器 05/09 09:20
lturtsamuel: 在設計上就是要把這件事抽象掉 05/09 09:20
jojojen: 我應該懂了 所以直譯器只有做到轉換成該語言用的function 05/09 09:38
jojojen: 的地步而已 謝謝各位大大 05/09 09:38
srwhite: 我之前好像也誤解了 感謝大大 05/09 09:58
※ 編輯: descent (101.10.86.24), 05/09/2018 10:45:34

你可能也想看看

搜尋相關網站