程序員的語言“艷遇史”(四) ——數學系師姐Forth

作者: fzwudc  來源: 博客園  發布時間: 2010-05-08 09:36  閱讀: 2670 次  推薦: 0   原文鏈接   [收藏]  

  程序員的語言“艷遇史”(一)——班長pascal

  程序員的語言“艷遇史”(二)——計算中心管理員小C

  程序員的語言“艷遇史”(三) ——法國外教prolog

  (***以下小說情節純屬虛構,供朋友們在緊張編程后輕松一下,如有雷同純屬巧合,切勿對號入座***)

                    第四個女孩    數學系師姐Forth

  一個悶熱的下午,我坐在梯形教室里,百無聊賴,聽著講臺上一個白發大師的個人詠嘆調。為加強理工科同學們的人文修養,出去泡妞不至于沒詞,丟我校的臉,學校新開了一批公共選修課,什么唐宋詞、西方哲學史、小說欣賞等等。

  學校還規定,公共選修課學分不夠,不能畢業。真夠狠的,弄得我們這些老生還要和一大批新生蛋子一起補修養。本人一向有崇洋媚外之傾向(沒辦法,翻開我們計算機科學教材,除了封面的“編者”,幾乎就沒看到中國人名),于是就選了西方哲學史。

  大師的課上得飛快,我就逃了幾次課,他已經從柏拉圖講到黑格爾了,跨越了千年。

  “就絕對者自身成為被規定、有規定的東西來說,絕對者是實體。就絕對者是自己規定自己、自己建造自己來說,絕對者又是主體。”

  天哪!雖然我清楚的聽到了每一個詞,但是聽不懂他在講什么!我感覺自己如同歌劇院里附庸風雅的音盲,處于極度郁悶狀態中。

  突然,一個遲到的女生從外面沖進來。我旁邊正好有一空位,她就坐下了。我們倆一對視,不禁笑了。原來是數學系師姐forth。

  我和師姐實在太有緣份了,去年跨系的英語六級輔導課,我們倆就碰到一起,這次又相會了。英語課上,我經常插科打諢,把她笑得前仰后合。有一次茶水噴了我一腦門,她急忙拿手帕給我擦掉。周圍一堆目光刺過來,簡直可以殺人。

  唉,那時人真純啊。課上完了,再也沒和師姐聯系。沒想到這次居然又碰面了。我倆急忙高興的聊開了。沒想到師姐還是某一個地下社團的頭目,叫什么“Forth語言學習研究協會”。她說,Forth是一門偉大的計算機程序設計語言,問我有沒有興趣加入。

  什么?Forth?計算機程序設計語言?我怎么沒聽說過。

  師姐見四下無人注意,便從書包里掏出一本協會登記冊給我看,說已經有好多同學加入了。只見上面一堆簽名,還有紅手印。我吃了一驚。干什么?反清復明的天地會啊。

  師姐說要看看我和Forth有沒有緣份,就隨手出一題考我。

  如何用堆棧數據結構,機械計算一個算術表達式,比如3+2*4。

  靠,也不想想兄弟是什么專業的。我們計算機科學家幾十年前就搞定這個問題了。我熟練的把表達式轉換為后綴形式,即為

  2 4*3 +

  然后從左到右開始入棧,碰到象*這樣的二元操作符,就把已入棧的兩個操作數比如2、4彈出,算出結果8重新入棧。如此下去,最終得到結果11。

  師姐說,不錯,Forth的求值核心就是這樣一個堆棧機,主要的操作都圍繞著堆棧而不是寄存器進行的。Forth的語言長什么樣的呢,她神秘的笑了一下,說就是后綴表達式。

  我差點沒暈死過去。這是給人看的嗎?我一向以為后綴表達式屬于中間代碼一類的東西,居然還有人把它當作一門程序語言。怪不得我們計算機系的老師提都沒提過Forth語言,整一個旁門左道啊!師姐怎么會中意這個東西。不過為了討她喜歡,我只能學韋小寶,先混進去看看究竟再說。

   不過Forth采用的堆棧虛擬機倒是不稀奇。為了便于移植,早期的UCSD系統就設計了一個基于堆棧的虛擬機,作為目標架構。上個世紀80年代,還有人專門設計了堆棧體系結構的CPU芯片,沒成什么氣候。沒想到風水輪流轉,到了21世紀,堆棧體系結構又流行起來了。這首先應歸功于Java語言,其底層的JVM就是一個典型的堆棧虛擬機。實際硬件中,堆棧體系結構效率不如寄存器方式。然而對軟件虛擬機而言,不管寄存器還是堆棧,都實現在內存里,效率差不多。加上很多編譯器程序員喜歡堆棧體系結構,所以它又得勢了。

  師姐還開給我幾本參考書,讓我到圖書館里自修一下,改天通知我參加討論會。

  圖書館里,我連打了十幾個噴嚏,終于從一堆滿是灰塵的故紙堆中,翻出一本《Forth之道》的書。好惡心,書都發黃了,上面還有斑點,估計很多年沒人翻看了。作者是一個美籍華裔工程師,開篇就是一堆文言文,弄得和九陰真經口訣似的,我看得暈頭轉向。

  突然,我看到一個熟悉的字眼“欲練此功,必先……”。我倒吸了一口涼氣。不會吧,師姐!沒說Forth語言男人不能學的,兄弟可還沒有傳宗接代啊!

  我抑制住超過每秒百次的心跳,用顫抖的手翻過了那一頁。去他的,原來是“欲練此功,必先明其機理。”這作者太惡心了,要寫您也得寫個男女雙修之類的心法啊,什么“欲練此功”,搞得這么玄乎。還分兩頁寫,誠心啊,要是心臟不好的,直接就掛了。

  討論會上,來了一堆人,有我校的,也有周邊其他學校的。我帶著計算機系科班出身的優越感,設計了一堆問題,對師姐等前輩進行輪番質問。但是隨著他們的闡述和解釋,我逐漸發現了自己的淺薄,慢慢開始欣賞Forth語言的美。

  Forth系統中除了堆棧機這個執行機構外,還有一個類似簡單數據庫的東西——詞典。其他語言中稱為函數、過程的東西,在Forth中稱為詞,存儲在詞典里。Forth語言中幾乎所有的項,甚至if、while這些控制結構,都以詞的形式實現。程序員可以重新改寫系統預定義詞,也可以發明新的詞,從而改變Forth語言。使用Forth語言開發的過程,就是用新詞來豐富Forth詞典的過程,就是重構舊有Forth系統的過程。最終你得到了一個面向應用領域的dsl。

  把玩Forth系統一段時間后,我有了一個意外收獲。借助Forth系統這個現實模型,我終于聽懂我們哲學大師整天念叨的黑格爾鬼話了。程序員和Forth系統“人劍合一”,就好比黑格爾的絕對精神,即是實體又是主體。在開發過程中,它從一個樸素的基礎出發,通過新詞的加入不斷否定自己,使自己滿足應用領域的需求;但是這種否定是自我否定,自我超越,新詞是在舊詞的基礎上形成的,無需等待語言設計師的恩賜,語言進化的權力給了程序員。

  看了這里,有人會問,那Forth和匯編什么區別?只要夠底層,不是想做什么就能做什么嗎?Forth語言和C語言一樣,在底層機器架構上加了一個薄薄的膠合層,可以不斷向上發展新的抽象,但同時并不忘掉底層機器這個根本。

  如果大家愛看“暗算”、“潛伏”這些諜戰片,可能會知道一種很土但是很實用的加密法——字典加密法。巧的很,在老式Forth系統中,其編譯/解釋方式被稱為threaded code,和這種加密法很相象。

  假設你是打入敵人內部的諜報員,有一段情報要加密,比如“暴露了,行動停止”。這就好比一段待編譯的Forth源程序。

  諜報員拿來一本密碼本字典,開始生成密文。假如“暴”字,在字典的第15頁第11行,它對應的密文就是1511。如此進行下去,就把明文全部變成數字形式的密文了。

  Forth系統對源程序進行處理,分兩個階段,編譯和解釋。首先進行的編譯階段也是這么干的。對源程序中引用的每一個詞,在系統詞典中找到它的地址。用地址編碼代替文本,如此進行下去就可以把文本程序變成了一個有序的地址列表。程序員在Forth編譯階段可以玩很多花招,這種強大的元語言編程能力不輸Lisp語言的宏。

  后方收到密文后,按頁號和行號查字典,就會將密文重新恢復成明文。這對應于Forth系統的解釋階段。解釋過程做什么呢,按次序跳轉到地址所指示的詞定義中去,進行執行。如果是系統預定義詞,則直接執行其機器代碼;如果詞屬于用戶自定義的,則其過程體也是一個地址列表,也使用threaded code解釋方式進行處理。

  一天,師姐打電話說要和我單獨談談,把我激動得不行。我興沖沖跑到約定地點。月上柳梢頭,人約黃昏后,可師姐卻是為Forth協會之事而來的。師姐說,她要畢業離校了,已請示協會高層,準備把派駐我校的香主一職轉給我。

  靠,這種事!不過好歹是個一官半職,我在師姐含情脈脈的攻勢下,只好欣然接受。突然,師姐詭異的一笑,給我一個信封。她說按慣例都有一筆“財富”要轉給新任香主,但是必須等我為協會新發展100個會員才能打開信封。我只好發了毒誓,提前啟封必遭天打五雷轟什么什么的。

  后來一個月,為完成師姐的托付,我真是嘗盡世態炎涼。原以為發展很容易,沒想到在計算機系這個最大目標群體,先遭冷遇。一堆人都以為我瘋了,入了邪教。某一特鐘情于C++語言的哥們差點揍我,說要替我系清理門戶。經我七蒙八騙,又和自動化系機器人制作協會結盟,終于快湊夠數了。

  還差一個,怎么辦?我在家里,流著口水,死死瞪著那個信封。受不了啦!我起身抓起我們家那只卷毛狗,來了個霸王硬上弓,把狗“手”沾上印泥,在登記冊摁上一下,然后代署小名。搞定!

  打開信封,先掉出一個我校歷任Forth協會香主之功名簿,每個人都有照片、姓名、系別、畢業時間等信息。還有師姐的一封信。師姐說,現在我已經證明自己是一個合格的協會負責人,可以把自己的信息寫在簿上了,將來傳給下任香主。我望著簿上師姐的照片,不禁呆了。

0
0
 
標簽:Forth
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()