C++編譯技術探秘

若幹年前,C++的發明者Bjarne Stroustrup曾寫道,他在開發C++編譯器時最大的錯誤是沒有使用TOP DOWN技術,而是用了YACC。當時,我對此很不解,因為根據我的經驗,LL(k)的語法比LALR語法構造要困難。在YACC之後,出現了PCCTS(後稱ANTLR)等LL(*)工具,理論上很強大,用起來就發現有各種問題需要人為地處理。

前幾天與朋友聚會,其中兩人都是COMPILER高手,在大公司專攻COMPILER,手下有若幹兵將,閑聊之中談到C++和編譯技術。眾所周知,C++標準化後已經變得非常複雜,標準好像上千頁。一位朋友提到,業界真懂C++的已經不多了。又提到,新版g++的PARSER沒有用工具,全部是手寫的。我聽罷,相當吃驚,因為當年我們經常參考的就是CFRONT的YACC語法。現代C++,居然手寫PARSER,這無疑是奇跡。

回來查了一下,果然如此。整個gcc(g++)的PARSER是2萬2千行手寫的代碼,而且就在同一個文件裏 (見鏈接:http://gcc.gnu.org/viewcvs/branches/gcc-4_4-plugins/gcc/cp/parser.c?revision=157341&view=markup)作者是一個人:Mark Mitchell

隻能說這是個牛人。居然手寫2萬2千行C代碼parse如此複雜的C++。也許當年Stroustrup說的就是要這樣?


請閱讀更多我的博客文章>>>
  • C++編譯技術探秘
  • 張衡地動儀見證漢文明的成就
  • 漢城這片土地,曾是我們的將士浴血奮戰的地方
  • 中國何時出手--廣義戰爭的積極防禦
  • 引發朝鮮大戰是美國經濟脫困的不二法門
  • 所有跟帖: 

    為啥要用手寫,打字機不好用? -大幹快上- 給 大幹快上 發送悄悄話 (0 bytes) () 12/01/2010 postreply 10:38:54

    其實YACC不錯, ANTL及後來的總用不順手 -怪哉- 給 怪哉 發送悄悄話 怪哉 的博客首頁 (133 bytes) () 12/01/2010 postreply 11:09:13

    C++ 標準化就該被淘汰了。 -scim- 給 scim 發送悄悄話 (100 bytes) () 12/01/2010 postreply 13:40:57

    我當年也手寫了LL(1) -安心草- 給 安心草 發送悄悄話 安心草 的博客首頁 (0 bytes) () 12/01/2010 postreply 20:00:38

    的compiler, 很容易的, 用了一個星期而已。 因為算法是用的現成的 -安心草- 給 安心草 發送悄悄話 安心草 的博客首頁 (0 bytes) () 12/01/2010 postreply 20:01:59

    請您先登陸,再發跟帖!