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

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

編譯器組譯器 在 歪歪 Instagram 的精選貼文

2021-08-02 19:04:29

/「大一必修」 這都是我們學校的大一必修,每個學校的課程內容、難度都不一定,所以大家參考就好🥸,準確的資訊還是建議上dcard校版詢問,或者是等友直屬學長姊後再詢問他們哦!如果有興趣也可以用課程後面的英文去搜尋,應該是可以找到不少的資源以及原文課本,可以稍微先預習看看(我本人是沒有預習啦,暑假還...


※ 引述《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

你可能也想看看

搜尋相關網站