顯示廣告
隱藏 ✕
※ 本文為 terievv 轉寄自 ptt.cc 更新時間: 2018-05-14 13:29:54
看板 Soft_Job
作者 brianhsu (墳墓)
標題 Re: [請益] 想不通直譯器vs編譯器vs機器碼的問題
時間 Wed May  9 10:10:25 2018


※ 引述《dragoncfe168 (梅長蘇)》之銘言:
: 請問一下
: 為何直譯器將source code轉譯成機器碼,
: 不會產生不同電腦的機器語言不同 而無法執行的問題???
: 反觀同樣把source code轉譯成機器碼的編譯器
: 卻會有此類問題呢???

雖然大家已經回很多了,但再回一篇應該也沒關係吧。

試試看能不能用簡單的方式來類比,當然因為是類比,所以不是那麼精確,
例如轉成機器碼這件事本身還牽扯到 Linker 等等的,就先不管了啦。XD

從後續的推文來看,原 PO 提到的其實有三種東西:

1. 編譯成機器碼的編譯器模式 (Ex. 傳統的 C/C++ 編譯器)

   類比:

     - 書面講稿翻譯,從中文翻成英文,管你講者唸不唸,我全部一次
       翻譯好給你。

     - 聽眾語言(目標平台)不同,下一場的聽眾是法國人怎麼辦?找個
       懂中文和法文的翻譯者唄。

     - 所以通常說 C / C++ Compiler,其實省略了目標平台的描述。
       就算同樣是 C 編譯器,也不一定每種目標平台都支援,可以說
       是不同的程式。

     - 因為是書面翻譯,翻譯完的東西可以給會唸英文的人幫你唸,翻譯
       者翻完就可以滾蛋了。

2. Python 等直譯式語言

   類比:

     - 現場口譯,從中文翻成英文。但只有當你講的時候我才一句一句
       翻譯,就算你中文講稿上有,但講者沒講出口的字句,口譯者就
       不會去翻譯。

     - 聽眾語言(目標平台)不同,下一次的聽眾是法國人怎麼辦?找個
       會從中文翻成法文的口譯者唄。

     - 所以通常說某種語言的直譯器,其實省略了目標平台的描述。就
       算同樣叫做 Python 直譯器,但他們懂的目標語言可能不同,可
       以說是兩隻不同的程式。

     - 因為是口譯,所以演講的時候翻譯者 (Python 直譯器) 一定要在場。

3. .NET / Java 等編譯成中介語言的編譯模式

  類比:

      - 書面翻譯後再口譯。我通通先翻成某種為了特殊目的而創立的語言,
        例如邏輯語[1],然後再找個邏輯語的口譯來現場翻譯。

      - 所以如果要從中文翻譯成英文,要做以下兩個步驟:

         1. 先把中文翻譯成邏輯語 (Java Compiler / 你下 javac 時在做的事)
         2. 把邏輯語翻譯成英文唸出來(Java Runtime / 你下 java Main 時在做的事)

      - 聽眾語言(目標平台)不同,下一次的聽眾是法國人怎麼辦?找個會

        把邏輯語翻成法文的譯者唄。

      - 所以我們說 Java / .NET 執行環境,其實省略了目標平台的描述。
        就算同樣叫 Java 執行環境,他們懂的目標語言可能不同,可以說是
        不同的程式。

      - 因為某種程度上來說也是口譯,所以翻譯者 (Java Runtime) 一定要在場。

[1]: https://zh.wikipedia.org/wiki/逻辑语
逻辑语 - 维基百科,自由的百科全书
[圖]
[圖]
邏輯語(Lojban,/ˈloʒban/  ( 聆聽),又作理語[來源請求]),一種人工語言,是Loglan的後繼者,由邏輯語言群(Logical Language Group,LLG)在1987年開始發展而成。最初目標是證明薩丕爾-沃夫假說。它依照形式語言尤其是谓词逻辑構造,而非建基於現有的自然語言。其特点是:言文一致、形意一致、文化中立。 ...
 


至於這三種模式能不能跨平台,那就要看你怎麼去定義「跨平台」這件事了。

--
   ~                 白馬帶著她一步步地回到中原。白馬已經老了,只能慢慢地走,
  'v'    Brian Hsu   但終是能回到中原的。江南有楊柳、桃花,有燕子、金魚……
 // \\   ( 墳 墓 )
/(   )\              但這個美麗的姑娘就像古高昌國人那樣固執。 【白馬嘯西風】
 ^`~'^
   http://brianhsu.moe               『那都是很好很好的,可我偏不喜歡。』

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.251.151.199
※ 文章代碼(AID): #1QybYKoN (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1525831828.A.C97.html
※ 編輯: brianhsu (60.251.151.199), 05/09/2018 10:17:34
pttworld: 蟒蛇用bytecode1F 05/09 11:26
dragoncfe168: 太感謝你了!這篇解說堪稱經典~值得M起來供後世傳頌!2F 05/09 11:49
dragoncfe168: 當今市面上尚無一教師與書籍能做如此卡通化的闡述..
dragoncfe168: 倘若補教老師皆能有如此統整歸納類比能力~
dragoncfe168: 天下萬千莘莘學子~又何愁學不會程式呢?
koushimei: 這樣解釋稍微有點概念了!6F 05/09 12:41
senjor: 其實如果有從計算機概論從頭學,應該還是會懂啦...7F 05/09 12:43
peanut97: 因為能不能清楚解釋這個跟收入沒有太大關係XD8F 05/09 12:47
senjor: 其實很多工作不懂或沒有記起來這個也沒有什麼影響 XD9F 05/09 12:56
jojojen: 推10F 05/09 13:51
gname: 推一個~11F 05/09 17:10
soheadsome: 有JIT的範例 有辦法在說看看AOT的範例嗎xde12F 05/09 20:01
Awenwen: 厲害了13F 05/11 13:52

--
※ 看板: terievv 文章推薦值: 0 目前人氣: 0 累積人氣: 125 
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇