Archives

Programming Linguistics – David Gelernter and Suresh Jagannathan

早前因工作上的需要,要設計一個新的程式語言,在網上找參考資料時,遇上了這本早已絕版的奇書。差不多每篇有關程式語言設計的論文,必定引用這本書。這引發我的好奇心,於是我大學的圖書館中,找來這本書借來一讀。不看猶自可看罷方知自已井蛙觀天,雖然自中學以來寫了程式超過二十多年,卻從來沒有思考過何謂程式這個最基本的問題。一直還以為自已寫程式功夫不錯,原來不過是學到幾個招式套拳的外功,這本書說的卻是寫程式的易筋經心法。讀過這本書,面對任何程式語言,也都可以一理通百理明。

一般教寫程式的書藉,通常從程式的文法和應用例子作教材,學生跟著練習題去學,慢慢便可以寫出像樣的程式,可是始終有點兒像鸚鵡學舌,沒錯能夠寫程式,但卻不明白程式是什麼。但這本書沒有教任何一種特定的程式語言,而是從語言學的角度,去分析歷史上重要的程式語言,到底新的文法帶來什麼的轉變,而同時亦指出不論什麼轉變,也都是萬變不離其中的基本觀念。

書本一開始便澄清什麼是程式,程式不是軟件或硬件的分別,甚至電腦本身是否存在也不重要,程式是一個抽像的機器,只是知訊的某一種狀態。程式語言只是代表程式的符號,任何程式語言在抽像的層面也是共通和等同的,只是不同語言設計的重點取向,有意無意左右了程式編寫員的思考模式。整本書的靈魂便是第二章中,提出的完美程式機器的模型。不論任何程式,也可以用時間(函數)和空間(記憶)去表達,而這兩者是可以互相轉換。靜止的程式源碼和運行中的程式,在抽像層面是同一樣東西,不過是時間和空間的關係改變了。

接下來的所有章節,都是回顧程式語言的發展,把每一個重要里程碑的語言,用完美程式機器去分析作比較。書中提及的程式語言,隨了做學術研究外,現今已沒有什麼人用。反觀現在最流行的幾種語言,本身並沒有獨創性可言,只是在走前人開發出來的路。這本書寫於一九九零年,超過二十年前。可是過去二十年,程式語言的發展卻停滯不前,只是不斷建立更多的程式庫,但最在基本的程式語言的思考方法上,與二十年前比較沒有多少突破。

始終這是一本大部頭的學術書,我很難在此以有限的文字,用三言兩語把書中慨念表達清楚。我特別想說的是,當我讀到完美程式機器的理論,我感到叮一聲開竅的感覺,多年來寫程式不明所以的地方,就在這一刻豁然領悟了。若果寫程式也有禪的話,這無異便是頓悟的境界。讀電腦的朋友,靠寫程式維生的朋友,這是一本會改變你想法的書。這書本學校不會教亦無法教,因為要寫程式多年,心中產生無數問號,才可以看懂程式的玄妙。

2 comments to Programming Linguistics – David Gelernter and Suresh Jagannathan

  • Hi Horace,

    Interesting observation and realization re “完美程式機器的理論”. By that, are you referring to Universal Turing machine (UTM)? http://en.wikipedia.org/wiki/Universal_Turing_machine
    May be thats one difference between engineering grad and comp sci grad. At U of Toronto, we studied UTM much earlier on. In fact, they named our own pascal-like language “Turing” in honour of the man.

    Anyway, why would your company want you to 設計一個新的程式語言? In the old old days, almost each new mainframe, or computer has its own computer language. But I guess if you are dealing in the machine/chip level and if the instructions set are innovative enough that no one has implemented before, it may make sense to add a few new instructions. Still it looks odd to create a brand new language. Can you email me? I’m just curious.

  • Nope. The ideal software machine is more like an universal space-time-shifting von neumann machine. The fundamental concept is procedures and memory space are inter-changeable. memory space can collapse into result from procedures in future time, vice versa.

    We need a language to describe a network and there is nothing out there meet our requirements. Yeah. It turns out creating a new language is totally overkill. We end up just hard coding what we need in a very large Perl script.

Leave a Reply