Re: [問題] 如何學寫COMPILER? [純拋磚引玉]

看板Programming作者時間18年前 (2007/04/25 16:32), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串24/38 (看更多)
※ 引述《tinlans.bbs@whshs.cs.nccu.edu.tw (汀)》之銘言: > 我印象中 BNF 可以描述 context-sensitive 的 syntax, > 受到較多限制的 BNF 才會變成 context-free 和 regular expression, > 所以我才說 BNF 可以高興怎樣寫就怎樣寫, > 但是 parser 不見得做得出來。 舉個例子? 能用 BNF 不能用 machine 做 parse 的語法? 不能 compile 是有的, 如 int a[100000000000000] 很多 code gen 和 library 都是直接用 BNF 語法的 > > C++ 也還是老舊的, template 不是新觀念, 而且 C++ 連 > > obj dynamic linking 都沒搞定, 本質上跟 C 是一樣的 > > C++ 本來還是個 C 的 code generator: cfront > > yacc 算是 4GL, goal oriented, 還比 C++ 新得多 > > 新應該是指 style, 而不是訂規格的日期 > 我講的 80 年代 programming 技術, 3GL 是 50 年代 programming 技術, template 從 lisp(196x), forth 就有 OO 語言的歷史比 C 還久, smalltalk(1969) 就有 dynamic typing yacc 遠比 template, OO 先進得多! C++ 只是把這些 196x-197x 的東西換個用辭, 大家基本上停留在 3GL 舊沒有不好, 像 assembly 還不是要學會, 商用 compiler 也還是在用 4GL, 含 yacc 很多所謂的 "library" 是 4GL interpreter, 如 SQL 寫 compiler 用 4GL 很快很省事, bug 好不好抓跟程式架構有關, 不然 perl 和一堆無法 BNF 的語言 parser 為何大多用 yacc? > 指的是 yacc 這個工具 (無論是設計或是產生出來的 code), > 跟 C++ 是不是新東西倒沒什麼關聯性, > 重點是 2007 年用 yacc 去生 parser 的 code 已經非常不合時宜了, > 做 parser 有更方便更容易除錯的 language-level library 可以使用。 > 至於 public private protected friend 這類東西, > 會不懂的大概也只剩下 10 年前還是學生的叔叔伯伯姑姑阿姨了, 這些東西懂了嗎? 記得了嗎? 繼承以後的改變背起來了嗎? 不然 java 把 virtual 換成 interface 是為何, 常常有人 C++ 寫完編不起來去亂 public, 不然就是不知 call 得是 parent method 還是 child > 現在的學生成天都在摸 Java 和 C# 這類東西, > 已經是絕對不可能不會的特性。 > 「新語言機制」是因應「舊語言技巧」而產生的, > 所以如果你用不到, > 那麼不會本來就沒差, > C 語言本身簡單, > 但也因此有各種旁門左道的技巧得學, C 語法就一點點還能用啥奇招? 再奇怪也跳不出 C 語法呀, inline assembly 之類是寫 OS 必需的, C++ 不能寫 OS, 又有不明確的 memory map, 自然少人用 inline assembly 比 C 高階的東西用途都是受限的, 這就是為何 C++ 反而萎縮被 java, C# 吃掉 還會出來拔掉一堆東西的 embedded C++ 要比省打字工, 4GL 更省, 要做 data structure, pascal, java, c# 也可以 要效能, 大家都乖乖用 C+asm 寫的 library 去了 > 甚至還沒有書可以學全, > 更沒有一套標準 (充其量只不過是公約), C 連 calling convention 都標準化, 跨 compiler 的 linking 都可以, C++ 原來 function name encoding 還算有標準, 現在不同家的 obj file 無法互通 更不用說語法撿查都不一樣, gcc3->gcc4 一堆東西不能 compile visual c 5.1->6.0->.net 也是, 更不用說 borland, ibm 只做了半套 template C 從來沒發生過舊 code 不能 compile, 或 obj file 不能 link 如 linux kernel 還可用各種不同 compiler, 很多平臺是沒有 gcc 的 > 新一代的語言把這些技巧標準化、通用化、光明正大化、語言機制化, > 並不代表學的人就是什麼都要學會才行, -- ┌─────KKCITY─────┐─┐ 優質連線服務///!! bbs.kkcity.com.tw └─ KKADSL 帶你環遊全世界 └──From:59.120.53.7 ──┘ KKADSL http://adsl.kkcity.com.tw --
文章代碼(AID): #16Bn8300 (Programming)
討論串 (同標題文章)
文章代碼(AID): #16Bn8300 (Programming)