C_and_CPP 板


LINE

※ 引述《gauss760220 (宅哥)》之銘言: : ※ [本文轉錄自 Grad-ProbAsk 看板 #1KQe7Yfy ] : 作者: gauss760220 (宅哥) 看板: Grad-ProbAsk : 標題: [理工] 程式語言觀念 : 時間: Tue Nov 18 07:16:47 2014 : 國考裡面有個題目 : "為何Interpreter比Compiler更容易加入新的程式語言觀念?" : 請問這題該怎麼回答? 這個命題根本就是錯的。 Interpreter 是給一段程式碼,它直接跑出結果送給你。 Compiler 是給一段程式碼,它翻譯成另一個語言、會跑出同樣結果的程式碼。 它們的差別只有在最後產出結果的地方不同, 而前面的 parsing 與 semantic check 則完全相同。 對程式語言來說,前面的部份才是關鍵。 現在的語言早就沒在分什麼 interpreter 與 compiler, 都嘛是做在一起,像 python / ruby / haskell / ocaml, 它們都同時具備 compiler 與 interpreter, 也都有很豐富的語言特性。 就像「compiler產生的程式碼跑得比interpreter快」之類的命題, 這些其實都是以訛傳訛的錯誤印象。 compiler 與 interpreter 差別就只是一個做翻譯、另一個給結果, 沒有道理哪個比較容易修改、或哪個執行起來比較快。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.32.97
※ 文章網址: http://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1416285590.A.386.html
1F:→ carylorrk: interpreter 的特性通常還包括遇到才翻譯並執行,所以 11/18 13:08
2F:→ carylorrk: JIT 通常算是 compilation,從 QEMU 的 TCI/TCG 也可以 11/18 13:09
3F:→ carylorrk: 看得出來並不是執行會順便跑出結果的都被稱作是 11/18 13:10
4F:→ carylorrk: interpreter。不過這之間的差異越來越小是真的。大多數 11/18 13:11
5F:→ carylorrk: interpreter 越來越複雜,像 python 也有很多實作往 11/18 13:16
6F:→ carylorrk: JIT 靠攏(雖然支援度都還有待加強。) 11/18 13:17
7F:推 carylorrk: 回到原本的問題,interpreter 比較簡單在很多時候是對 11/18 14:00
8F:→ carylorrk: 的。 compiler 通常需要處理比較多 state 的問題,而 11/18 14:01
9F:→ carylorrk: interpreter 可以在 dispatcher 的地方處理而簡化問題 11/18 14:03
10F:→ carylorrk: 不過當然現在成熟的語言有太多影響的因子在,實在很難 11/18 14:19
11F:→ carylorrk: 一概而論。(跟 target 也有關係) 11/18 14:20
12F:推 suhorng: 請問可以借轉嗎 11/18 23:05
13F:→ littleshan: 請轉 11/19 12:21
suhorng:轉錄至看板 PLT 11/19 12:24
14F:→ littleshan: 所謂「遇到才翻譯」實在不能稱之為interpreter的特性 11/19 13:30
15F:→ littleshan: 若單一一行程式碼無法構成AST,那也沒辦法馬上執行 11/19 13:33
16F:→ littleshan: 而翻譯成語法樹後執行,或翻譯成bytecode後執行 11/19 13:36
17F:→ littleshan: 以抽象的角度去看並沒有什麼不同 11/19 13:37
18F:→ littleshan: 若硬要說前者是interpreter 後者是compiler 11/19 13:42
19F:→ littleshan: 中間的界限是很難明確定義的 11/19 13:42
20F:→ littleshan: 所以我認為一個給結果、一個做翻譯是比較明確的定義 11/19 13:44
21F:→ carylorrk: 嗯...其實仔細想你說的也是對的,JIT 也是產生 code 11/19 18:57
22F:→ carylorrk: 但是有些直接給結果但實際上是 compilation + run 的卻 11/19 18:58
23F:→ carylorrk: 也不被算在 interpreter 內(ex: go run) 11/19 18:58
24F:→ carylorrk: 所以應該說,遇到才翻算是 interpreter 可以實作的功能 11/19 19:00
25F:→ carylorrk: 但非必須?畢竟在很多時候遇到才翻的確比整個翻好簡單 11/19 19:01
26F:→ carylorrk: 像是 dynamic language 裡的 type ,或是像實作 11/19 19:02
27F:→ carylorrk: exception 這類東西,都不單單翻 AST 的問題。 11/19 19:04
28F:推 suhorng: 我覺得主要是 "功能" 跟 "怎麼實作/優化" 的差異 11/19 20:16
29F:→ suhorng: 就算要說是 compiler 能提供的功能也有可能吧 11/19 20:16
30F:→ suhorng: *能提供"遇到就翻"的功能 11/19 20:18
31F:→ suhorng: 要從這方面來分的話兩者真的都會各種混雜, 但實際上把 11/19 20:18
32F:→ suhorng: "解釋一種語言" (要說是"定義"也無妨), 把 compiler 看成 11/19 20:19
33F:→ suhorng: 做 code transformation 變成另一種 target 跑的東西滿 11/19 20:19
34F:→ suhorng: 不錯; 這是功能/目的的差異 11/19 20:20
35F:→ suhorng: 所以一個程式跑起來本來就有可能是 interpreter 跟 11/19 20:21
36F:→ suhorng: compiler 混雜, 不需要硬生生切開說哪樣才是 interpreter 11/19 20:21







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:iOS站內搜尋

TOP