彭民德:《電子計算60年》(21) 全國第一屆C語言交流會

彭民德發表於2016-09-05

UNIX及C語言的發明者D.M.Ritchie和D.M.Kernighan於1978年寫了《The C programming language》。以後標準化組織把這本書中附的語言文字,作為制定C語言標準的藍本。我國《計算機工程與應用》雜誌1982年第1、3期及時翻譯登載了該書的中譯本。它正好配合全國一些同仁閱讀UNIX V6原始碼和在UNIX環境下開發程式的需要。全國出現了學習C語言的第一個熱潮

enter image description here

1984年11月16-18日,在蘇州東山,由我國計算機與資訊處理標準化技術委員會主辦和主持,召開了“全國第一屆C語言認識交流會”。鑑於C語言還是剛推出不久的語言,這次會議的主題放在對C的認識交流上,這也反映舉辦方定調低下的謙虛態度。說是第一屆,其實沒有第二屆,後來並沒有繼續召開。會議代表60人,出席會議的有中科院計算所孫玉芳、史忠植,計算中心劉玉梅,中科院研究生院魏元瑞;上海計算機軟體開發中心朱三元;北京大學張乃孝、復旦大學羅文化,上海交大尤晉元;上海造船工藝研究院夏道衷;武漢709所徐寶文;來自高校的還有北京資訊工程學院孟慶昌、南京理工大學孫志輝等。尤晉元老師等一批學者都是剛從美國工作和學習回國的,跟C語言打了幾年交道了。孫玉芳、尤晉元老師剛剛分析過UNIX V6,並且都發表了分析報告。劉玉梅、夏道衷剛分析過UNIX的語法分析程式自動生成器YACC。

關於對C的認識,許多報告都論述了C的特點,涉及C與UNIX的關係。孫玉芳在其“UNIX系統與C語言”報告中講,C與UNIX有極為緊密的聯絡。UNIX第5版開始用C寫,這是有決定性意義的事。本來UNIX可以全部用C寫,僅僅是考慮效率,才有大約10%程式碼用匯編語言寫。UNIX的流行是在1983年AT&T公司放棄了把C用於通訊,取得了可以作為商品的權利後,C才跟隨UNIX推廣的。朱三元講,C在美國已經很普及,美國把C和FORTRAN、COBOL、Ada一起確定為第二代計算機程式語言。剛從美國馬里蘭大學回來的夏道衷作了“C語言及其不同版本的特點評述”報告,並說搞C和UNIX的人在美國很受歡迎,年薪至少3萬美元,而州長也不過2萬5千。孟慶昌的報告是“C語言特點及其各種版本”,張乃孝就有關C語言語法形式化中若干問題進行了探討。

我在會上報告了“從UNIX看C語言”,側重從C語言與UNIX的密切關係,相互促進的事例看C語言的發展。基本觀點是,C語言適應UNIX的需要而產生和發展,與UNIX互相促進,它有與UNIX的目標和思想相一致的特點,其中最主要的是它追求簡潔、靈活而又高效的表達方式;它是結構化的程式語言;既已成功地用於系統設計,又有通用性;C語言與UNIX一起向使用者提供了良好的程式設計環境。注意到C是為了寫UNIX,在寫UNIX的過程中發展的。比如UNIX第五版本中,為了縮短書寫賦值語句“x=x-a;”,曾經用“x=-a;”表示。這種表示方法雖然縮短了一個字元,但有時減號運算子左邊必須要有至少一個空格,要靠這個空格來區別,x按上述表示式從當前值減去a,即“x=x-a;”,還是直接取負a,即“x=-a;”。有空格就是後者,沒有空格才是前者。但是C是自由格式語言,有否空格應該無所謂,這裡卻特別要求一個空格,與C的整體風格不一致。實際運用時很難執行上述區分。後來到了UNIX第六版本就改成了用“x-=a;”代替“x=x-a;”,把實際的運算子減號放在賦值號左邊,較好地解決了書寫簡潔又沒有二義性。同時產生了一類新運算子“op=”,把實際的運算子放在賦值號左邊,從UNIX第五版用=-、=+、=*、=/調整為-=、+=、*=、/=等等。這明顯地反映了C隨著UNIX版本推進的發展過程。

由UNIX推動C語言發展的又一個例子是,關於絕對地址的表示,UNIX第六版的做法是,首先定義一個整型常數,
#define sw 0177570
令變數sw獲得八進位制值177570,這是準備隨後用於要表示的某個地址值。其次,為了把它當做地址用,又定義一個無名結構
struct {
int integ;
}
最後施行指標運算sw→integ,才達到sw表示指向177570地址單元的目的。到我們本次學術會議前的UNIX第七版,C文字已經明確接受“s→”作為地址的表示,較之此前簡潔多了。

賦初值的方法到第七版也有改變。原先賦初值時不出現賦值號,
int swplo 4000;
表示將swplo賦初值4000。第七版改為
int swplo=4000;
之所以這樣改變,是因為初始化
int f[表示式];
或者
int f{表示式};
類似於函式說明,容易混淆,將使編譯程式為難。這種改進可以看做是語言在發展中由於本身的要求所致。
我在報告中同時指出,跟ALGOL, FORTRAN等程式語言比較,C語言表達簡潔,執行高效,有結構、陣列、指標、暫存器變數等新的資料型別,眾多的控制流結構,有很方便的字位操作和邏輯操作。它很適合系統程式設計和用於工業過程控制。因為有上述許多特點,除了系統程式設計,在其它運用領域,也一定會有很好的前景。

一些報告論及了C在我國的推廣以及C在高校的地位。尤晉元的報告“論C在程式設計語言教學中的地位”,他出去兩年,學了七、八種程式語言。在美國學C不從文字開始,而是著眼於“C語言”,從它與其它語言差異上去學。學一種語言並不需要很多課時,主要靠學生自己看書和上機實踐。上海交大隻用8個學時,結合UNIX教C語言,學生反映容易學,效果好。我在自己的學校也是這樣做的。我認為,這次會上與會者介紹的教程式語言的這種有效的方法,今天都還很值得我們一些高校借鑑。本次會議上,孫玉芳、尤晉元分別介紹了他們正在撰寫的《C語言程式設計》教程的編寫情況,史忠植、孫志輝也在策劃寫C語言教材。

全國計算機與資訊處理標準化技術委員會主任委員,華北計算所吳慶寶,就國內外程式語言標準化程式作了介紹。國際上,標準化機構已經制定了COBOL、FORTRAN 77、ALGOL、PASSCAL、BASIC標準,C語言還沒有,在ISO中只有個非正式的工作組。1983年6月這個非正式的工作組開了會,以C發明者Ritchie的《C語言參考手冊》作為標準的建議稿。同年9月又開了第2次會議。我國向相關國際機構提出,想參與C的標準化工作,得到美、英和歐共體支援,希望能夠合作來搞。

我也把B.W.Kernighan等當年發表的新書《The UNIX Programming Environment》拿到會上,與會同仁對譯本寄於期待,有的還希望原版膠印分享。會上還流傳一本哪位剛從國外帶回來的,1982年英文版C語言新書《The C puzzle Book》,作者是Alan R•Feuer,其中有許多以前沒有見過,又好又難的題目,都有詳細分析解答。教師同行們如獲至寶,我們連夜傳看抄錄,人停書不停。輪到我的時候,不但壓了睡眠時間,還擠了部分遊覽太湖的時間。那時沒有影印和照相條件,只能筆記,我抄錄了其中的20多道題目及解答,它於我提高對C的認識和教學都有幫助。

會上還成立了“全國C語言通訊協會”,孫玉芳、尤晉元、史忠植都被推選為委員,我也在他們幾位的提名下,被選為委員。不過這個組織後來沒有開展具體工作。

以本次會議為標誌,我國出現了學習C語言的高潮。此後為推動C語言的普及,尤晉元、史忠植、孫玉芳等,分別編寫出版了C語言教材。
enter image description here

由於C語言成功地寫了UNIX的事實,國內亦有了一批執行UNIX的新機器,使用時能夠接觸一些優秀的C實用程式,由於國內當時有一批人擁有和分析了UNIX的原始碼,以及有了一批關於C語言的學習資料,加上這次會議的推動等因素,隨後C語言的運用在國內陸續掀起一波高潮。中科院計算所、長沙鐵道學院、成都電訊工程學院、合肥工大等都有相關成果報導。

(與本文相關的更多內容,可參看 彭民德《電子計算60年》第4章 三代計算併發共享 電子工業出版社)

相關文章