CSDN博客

img MichaelLi8195

介紹compiler

发表于2004/10/2 15:39:00  2687人阅读

介紹compilerbloves  2004  摘自 JDEV   bloves  -05-27 14:04
http://ccb.77jj.com/user03/bbs/ccb/index.cgi

這個網頁, 介紹 compiler, 將不定期增加短文, 直到我對 compiler 失去興趣為止. 
談到 compiler, 馬上會有一堆人眼睛亮起來, 因為在這個主題上, 
有著太多的神秘, 刺激, 精采的故事, 尤其是其中的 optimization 技術, 
已被公認到達藝術創作的境界了!

想初步了解 compiler, 妳必須先知道幾個怪人 
(大多是從 Princeton University 跑出來的), 與幾本奇書: 

第 1 個怪人叫 Alfred V. Aho, 
搞電腦的, 對這名字必不陌生, Unix 上有個用來處理資料的程式語言 awk, 
便是他和 Peter J. Weinberger 與 Brian W. Kernighan 設計出來的.
它能使用簡短的語法, 以 user 定義的格式來分解輸入資料或是印出資料.
這三人並為 awk 寫了一份標準參考說明手冊, 叫做 <Awk Quick Reference>,
其電子檔可至 http://hk.mobile.yahoo.com/010112/30/137w.html 下載.
這個人的名字蠻好玩的, 很像叫人的時候, 發出的 ahoy ("喲呵","啊呵")..
印象中, 犽羽遼就常常發出這種聲音. (見註1)

第 2 個怪人叫 Jeffrey D. Ullman, 
寫過資料庫教科書 <Principles of database and knowledge-base systems>,
曾和 Aho 合寫了著名的計概教科書 <Foundations of Computer Science>, 
與 compiler 奠基教科書 <Principle of Compiler Design>, 
封面畫了聖杯時代的龍與騎士 (醜醜的說), 故此書又被稱為 "dragon book", 
龍指的是 compiler, 騎士指的是 designer. 
這兩人也和 John E. Hopcroft 合寫過一本 <Data Structures and Algorithms>, 
中譯本為 <資料結構及運算法則>, 譯者是 彭錦淮, 林明憲, 普普通通.  
Ullman 也和 Jennifer Widom 合寫過一本簡單的資料庫入門書, 叫做
<A First Course Database Systems>, 前半講理論, 後半用 SQL3 實作.

第 3 個怪人叫 Ravi Sethi,  
被稱為小熊書的程式語言入門教科書 
<Programming Languages Concept and Constructs> 就是他寫的, 目前出到第 2 版.
這本書介紹了各種不同概念的程式語言設計方式, 與一些常見的語法表示式.
他和上面的 1 號與 2 號怪人, 合寫了一本 compiler 經典書籍,  1986 年出版, 叫
<Compilers Principles, Techniques, and tools>, 有人叫它 "天龍寶典". (見註2)
聽起來像是武俠小說中的武功秘笈, 或是和天龍書局有什麼曖昧關係...
此書中譯版權很亂, 分別被全華(上), 儒林(下), 松崗(上,下)譯過, 
書名都叫<編譯程式>, 其中冼鏡光譯的最可靠, 松崗譯的看了會吐血.

第 4 個怪人叫 Grace M. Hopper,
Hopper 被稱為電腦之母, 或 "a little old lady who talks to computers", 
也有人叫她 "Amazing Grace" (見註3), 如同 Lachesis 亦被稱為"瘋狂的女神"一般, (見註4)  
她是最先在電機計算機上寫程式的 3 個人之一. 
那台計算機叫做 Mark I, 由 IBM 資助, Harvard University, Cruft Laboratories 的  
Howard Aiken 主持設計. 咱在 run 程式時, 若結果不符合原先預期, 常會大叫: 
"啊! 這個程式一定有 bug!", 之後會接著說: "讓我來 debug 看看吧!", 
當找到 bug 後, 會說: "幹! 你這個死 bug, 終於被我捉到了鬨!"
"bug" 這個詞兒, 就是 Hopper 起頭, 流傳開來的.

這個 urban legend (都市傳奇) 的故事大致上是: 在西元 1945 年 9 月 9 日,
一隻蛾 (moth) 被電死在 Mark II 的繼電器 (relay) 之間, 造成電路不通, 機器當機,
Hopper 找出了那隻該死的蛾, 把牠弄出來, 將屍體貼在她的管理日記上以資紀念,
日記上寫著: "媽的! 就是這個 bug, 害我們今天的工作無法完成!",
(沒有啦, 事實上是寫: "moth in relay #70..  First case of bug being found")
事情傳開後, 每當作業員進度 delay, 就會藉口是 bug 在搞鬼,
之後 "bug" 這個詞, 便廣為引用, 表示程式有問題, 而除錯便稱為 "debug".

1952 年,  Hopper 開發出全世界第一套 compiler: A-0  (後來又有 A-1, A-2, B-0), 
1956 年在 UNIVAC I, II 上開發出 B-0, 之後叫做 FLOW-MATIC, 
這語言造成了後來 COBOL  (COmmon Business Oriented Language) 的誕生, 
COBOL 則是史上被罵的最兇的程式語言. 
Hopper 開發 A-0 的動機是想讓寫程式變的更輕鬆點, 在當時, 
大家都是用機械碼寫程式, 也不覺得有什麼不好, 只是有點兒累..,
然而 Hopper 突發異想, 是否能用人類熟悉的字母來編寫程式碼,
再用一種特殊的程式 (就叫做 compiler 好了 :)) 將之轉成機械碼來執行呢?
這是多麼奇妙的想法啊...  

            "計算機不就是一堆電路元件罷了! 機器如何能看懂人類的文字呢??" 

1952 年 Hopper 做出了 A-0, 在 Sperry 上跑, 而且還有英文,法文,德文 3 種版本...  
Hopper 對 compiler 的標準化程序有極大貢獻, 有篇 COBOL 禱文如下: 

            Our Mother, who art in Pentagon,        (注意: COBOL並不是Hopper所創)
            Grace Hopper be the name.
            Thy audit come, World Wide will be done
            In COBOL as it is in Standard.
            Spare us this day our waily Fed,
            And give us our passes
            As we forgive those which fail against us,
            And lead us not into validation
            But deliver us from JTSA. Amen!        (註: JTSA=Jewish Theological Seminary of America) 

當時各地海軍 (Navy) 搞出不同版本的 COBOL compiler, 以致於不能互用, 
Navy 便找 Hopper 想辦法, 她便招集人馬, 由 George N. Baird 寫出 
COBOL Compiler Validation (驗證器), 用來檢查某個 compiler 是否能編出滿足某些
標準需求的程式 (見註5), 並建立一份文件, 羅列 COBOL 語言的標準功能, 
召令各個 COBOL compiler 遵行之, 後來, 當程式語言漸漸被多人所使用時,
就會有人成立一個標準化委員會, 所做的便是類似的動作. 
(註3:) 
      據說 Grace hopper 的辦公室中, 掛著到著走的鍾, 與一面骷顱頭標誌的棋子. 
(註4:) 
      98年 Newtype 10 月號, 關於 Lachesis 的敘述:
      黏在蘇普身旁的 A.K.D 最終兵器. 
      雖然穿著露出蕾絲花邊內衣的碎花滾邊洋裝, 
      照樣對天照永久全勝, 對凱淵 3 勝, 對羅格那無敗, 對瑪古達魯 4 勝, 
      對還是小鬼的馬克斯 2 勝, 對迪普雷 3 勝, 對貝爾蓓得 99 勝, 
      和慧茄成為好姊妹, 還迷戀上費爾摩五世,
      對克莉絲打贏了就跑, 和佳寇則是不戰而勝, 對猶奏塔則是用涼鞋踢下去,
      對無打的不分軒輊, 和號稱星團最強的雷德龍的戰績是二勝一敗...,
      以小末為對手, 靠 "剪刀, 石頭, 布!" 的奮力一擊取得一勝! 
(註5:)
      有個字面上和它類似的名詞: Verification, 指的是由 user 來確認程式或
      系統是否符合他的需求.

第 5 個怪人叫 John Backus, 
一般的電腦概論中, 都會談到他..
他幹過的好事中, 較知名的有 2 個: BNF 與 FORTRAN.
...%$^%&##2...
----------------(待續..)----------------

在 ACCU 的 http://www.accu.org/bookreviews/public/reviews/0sb/compilers.htm 中,
簡介了以下 15 本 相關書籍:
Compiler Construction                                by Niklaus Wirth  (Reviewed Sep 1998)
Compiler Design in C                                 by Allen I Holub   (Reviewed Nov 1991)
Compiler Design                                         by Dieter Maurer & Reinhard Wilhelm  (Reviewed Jan 1996)
Linkers & Loaders                                      by John Levine    (Reviewed Sep 2000)
Linkers and Loaders                                    by John Levine  (Reviewed Jul 2000)
Modern Compiler Design                             by Dick Grune  (Reviewed Jun 2001)
Crafting a Compiler with C                          by C. N. Fischer & R.J. LeBlanc Jr   (Reviewed May 1991)
Retargetable C Compiler, A                          by C Fraser & David Hanson  (Reviewed May 1995)
Compilers & Compiler Generators                by P D Terry   (Reviewed Jul 1997)
Writing Compilers and Interpreters               by Ronald Mak  (Reviewed Nov 1996)
Modern Compiler Implementation in C          by Andrew Appel   (Reviewed May 1997)
Modern Compiler Implementation in Java      by Andrew Appel   (Reviewed May 1997)
Advanced Programming Language Design     by Raphael A Finkel   (Reviewed May 1997)
Understanding ELF Object Files and Debugging Tools    by Mary Lou Nohr  (Reviewed Jan 1995)
High Performance Compilers for Parallel Computing      by Michael Wolfe   (Reviewed Jul 1998)
阅读全文
0 0

相关文章推荐

img
取 消
img