程序设计、数据结构、编译相关图灵奖得主简介之二
7、?肯尼思 · 艾弗森(Kenneth Eugene lverson)
????1979年度的圖靈獎首次授予一位加拿大學者、時在IBM公司沃森研究中心工作的肯尼思·艾弗森。他是因為在開發交互式程序設計語言APL中作出開創性工作,從而為程序設計語言的理論和實踐作出卓越貢獻而獲此殊榮的。
????艾弗森1920年12月17日生于加拿大艾伯塔省的卡姆羅斯(Camrose,Alberta)。第二次世界大戰期間他被應征入伍而中斷學業。1946年退伍后艾弗森進入位于安大略湖畔的城市金斯頓(Kingstown)的昆士大學(Queen’s University)學習,兼修數學和物理,1950年大學畢業獲得學士學位時艾弗森年已30。但他立志繼續深造,進了美國哈佛大學研究生院,先后于1951年和1954年拿下了應用數學的碩士學位和博士學位。他攻讀博士學位時的導師是著名的數學家和計算機科學家、在20世紀30年代末40年代初設計了世界上第一臺現代的自動計算機Mark I的艾肯教授(Howard Aiken,1900—1973)。當時的IBM總裁托馬斯·沃森(Thomas Watson)正是由于支持艾肯的Mark I計劃而把IBM從制造商業機器的公司引向計算機產業而發展成為“藍色巨人”的。艾弗森的博士論文課題是用計算機求解線性微分方程時如何建立經濟的I/0模型,這個論文課題誘導他設計與實現了著名的程序設計語言APL(A Programming Language)。APL以現有的成熟的數學符號為基礎,加入許多基于數組(array,這是APL中唯一的數據類型)的基本運算符,就可以用極少、極緊湊的語句定義非常復雜的表達式。APL的兩大與眾不同的特點是:
????1.變量沒有顯式定義的類型。變量類型是由變量的具體用途確
定的,這就是APL首創的所謂“彈性數據結構”(elastic data structure)。
????2.沒有一般語言所常用的控制結構,如while,for,if-then-else等。這類控制結構在APL中被遞歸函數、數組操作及控制轉移符“→”所代替(APL中的“一”相當于其他語言中的goto)。此外,APL中所有的運算符都具有相同的優先級,一律按從右到左的順序進行計算,這也是同一般語言很不一樣的。
????APL從構思到實現經歷了一個比較曲折和長期的過程。艾弗森在完成其博土論文的過程中就提出了APL的初稿,最初僅是為了清晰而精確地表達問題以利于書寫和教學而提出的。博土論文答辯以后艾弗森留校工作,對APL進行完善與發展,并試圖在計算機上實現,但一直缺乏支持和客觀條件。因此艾弗森于1960年離開哈佛到IBM的沃森研究中心,在這里他說服了他的一些同事和他一起在IBM的主機上實現了APL,這已經是他提出APL以后約10年的事了。有趣的是,艾弗森實現APL的經歷和他的導師艾肯實現Mark I的經歷十分相似:艾肯設計出Mark工以后,也是由于在哈佛沒有得到足夠的支持而轉向私人企業尋求支持最后與IBM簽訂合作協議的。
????最早的APL版本采用解釋方式而非編譯方式,有人機交互功能,類似于臺式的袖珍計算器,用起來很方便,因此在科學與工程計算,統計分析,財會等人員中很受歡迎。
在程序設計語言發展的歷史上,曾經出現這樣一件轟動一時的大事:1969年,IBM在其總部紐約州阿爾蒙克(Armonk)舉行APL大會,出乎組織者意料來了500多人,而且群情激昂,要求IBM分發APL的拷貝,使IBM措手不及。這件事后來被人們稱為“進軍Armonk'(march to Armonk)。
雖然作為一種通用程序設計語言,總的來說它不像Fortran、Pascal、C等那樣獲得廣泛采用,但它在早期程序設計語言的發展中起了積極的作用;此外,作為具有向量處理能力的一種語言,它也是后來對Fortran語言進行擴充,使之成為具有向量和矩陣處理能力的語言——VECTRAN(VECTORFORTRAN)的重要基礎。而Fortran 90則是VECTRAN的進一步發展。由此可見APL在計算機程序設計語言發展史上的地位和功勞。
????在開發APL的過程中,艾弗森還發明了一組特殊的符號以描述計算機語言的形式結構,這組特殊的符號就被叫做“艾弗森記號”(Iverson notation)。艾弗森記號中運算符特別多,能對整個數組直接進行各種各樣的運算。
????艾弗森在接受圖靈獎后的第二年,即1980年就離開IBM,返回他的祖國,加盟多倫多的I.P.Sharp Associates公司,這家公司主要提供APL的產品和服務。1987年艾弗森從I.P.Sharp公司退休。
????艾弗森是在1979年10月29日于密歇根州的底特律召開的ACM年會上接受圖靈獎的。艾弗森發表了題為“作為思維工具的符號”(Notation as a Tool of Thought)的長篇圖靈獎演說,詳細論述了APL的設計思想與特點,還給出了許多例子。演說全文刊載于Communications of ACM,1980年8月,444-465頁,也可見《前20年的ACM圖靈獎演說集》(ACM Turing Award Lectures??The First 20 Years:1966—1985,ACM Pr.),339-390頁。
8、?查爾斯 · 霍爾(Charles A.R. Hoare)
????1980年的圖靈獎授予了英國牛津大學計算機科學家查爾斯 · 霍爾。
????他不僅提出了QUICKSORT、CASE,而且在程序設計語言的定義和設計、數據結構和算法、操作系統許多方面都起了重要作用。由霍爾和他的同事們設計與實現的ALGOL 60 一個子集的版本 Elliott ALGOL 60,在效率、可靠性和方便性等方面都是首屈一指的。
????霍爾是英國人,1934年1月11日生于斯里蘭卡的科倫坡。小時候的理想是當個作家,喜歡蕭伯納和羅素的作品。因為勤奮好學、少言寡語,他被同學稱為“教授”。中學畢業后,他進入牛津的莫頓學院學習,對數理邏輯產生了興趣,并首次接觸到了計算機。他的第一個程序用Mercury Autocode的語言編寫,解決了諾依曼書中的兩人博弈問題。
????1960年,霍爾進入Elliott兄弟倫敦公司,成為一名程序員。他接到的第一個任務,就是為Elliott 803計算機編寫一個庫程序,實現新發明出來的Shell排序算法。在此過程中,霍爾對不斷提升代碼的效率著了迷,他不僅很好地完成了任務,還發明了一種新算法,比Shell還快,而且不會多耗費太多空間——Quicksort誕生了。
隨后,霍爾又接到了新任務——在公司新機型Elliott 503上實現Algol 60語言。Elliott Algol的開發非常順利,大獲成功,霍爾本人也從此受到國際學術界的重視。當然,對他來說,另一件事情更為重要,他和項目中另一位當時比自己更專業的女程序員Jill Pym相識相知,并最后結婚。
????1968年他到北愛爾蘭女王大學從事教學和研究,1977年轉入牛津大學至今,目前還同時擔任微軟研究院的研究員。他全身心地投入到計算機科學理論的研究中,作出了許多創造性的重大貢獻,尤其是程序設計理論和操作系統設計等方面,目前許多廣泛流行與應用著的概念都源于霍爾的工作。
????1969年10月,霍爾在Communications of the ACM上發表了有里程碑意義的論文“計算機程序設計的公理基礎”。在這篇論文中,霍爾提出了公理語義學,這是繼1963年用遞歸函數定義程序,以及在1967年基于程序流程圖的歸納斷言法以后,程序邏輯研究中所取得的又一個重大技術進展。
????20世紀70年代后期,霍爾深入研究并實現了程序設計語言CSP,后來成為著名的并行處理語言Occam的基礎。80年代中期,霍爾和S. Brools等人合作,提出了“CSP理論”,開創了用代數方法研究通信并發系統的先河,形成了“進程代數”這一新的研究領域。1995年他還和我國學者、中科院院士何積豐合作,提出了統一程序設計理論。
????霍爾發表過許多高水平的論著。ACM在1983年評選出最近25年中發表在Communications of the ACM上的有里程碑式意義的25篇經典論文,只有2名學者各有2篇論文入選,霍爾就是其中之一。1972年他與O.J. Dahl和E. W. Dijkstra三位圖靈獎得主合著的Structured Programming一書,更是難以逾越的高峰。
9、?丹尼斯·里奇(Dennis MacAlistair Ritchie)和肯尼斯· 湯普森(Kenneth Lane Thompson)
????在計算機的發展史上,大概沒有哪個程序設計語言像C那樣得到如此廣泛地流行;也沒有哪個操作系統像UNIX那樣獲得計算機廠家和用戶普遍青睞和厚愛。它們對整個軟件技術和軟件產業都產生了深遠的影響。
而C和UNIX兩者都是美國貝爾實驗室的丹尼斯·里奇和肯尼斯· 湯普森設計、開發的,因此,他們在1983年共同獲得圖靈獎。
????丹尼斯·麥卡利斯泰爾·里奇(Dennis MacAlistair Ritchie,1941年9月9日生),出生于美國紐約布朗克斯維爾(Bronxville)。著名的美國計算機科學家,對C語言和其他編程語言、Multics和Unix等操作系統的發展做出了巨大貢獻。
????里奇在哈佛大學學習物理學和應用數學畢業,1967年他進入貝爾實驗室,主管貝爾實驗室位于新澤西州的計算機科學研究中心的系統軟件研究部門,目前他是朗訊技術公司系統軟件研究部門的領導人。
????當有人問里奇為什么使用他使用的方式開發了C語言的時候,里奇回答說“這樣做看上去很好”,他說任何人在同一地方、同一時間會像他那樣做的。但是其他許多人認為這只不過反映出了里奇的謙虛。C++的開發者和設計師、里奇在貝爾實驗室的同事比雅尼·斯特勞斯特魯普說:“假如里奇決定在那十年里將他的精力花費在稀奇古怪的數學上,那么Unix將胎死腹中?!?/span>
????事實上,丹尼斯·里奇與肯·湯普遜兩人發展了C語言,同時發展了Unix操作系統,在電腦工業史上占有重要的席位。至今為止C語言在發展軟件和操作系統時依然是一個非常常用的電腦語言,它對許多現代的編程語言如C++、C#、Objective-C、Java和JavaScript擁有極大的影響。在操作系統方面Unix也具有極大的影響:今天市場上有許多不同的Unix方言如AIX、Solaris、Mac OS X和BSD等,以及與Unix非常相似的系統如Minix和非常普及的Linux操作系統。甚至其Microsoft Windows操作系統與Unix相競爭的微軟為他們的用戶和開發者提供了與Unix相容的工具和C語言編譯器。
????里奇還參加發展了Unix和C語言的兩個后繼軟件:Plan 9和Inferno操作系統以及Limbo語言。兩者均是基于他以前的工作上發展的。
????在技術討論中,他常被稱為dmr,這是他在貝爾實驗室的Email地址。值得注意的是,雖然丹尼斯·里奇是C語言的作者,他本人最喜歡的程序語言卻是Alef。
?
10、?尼克勞斯 · 沃思 (Niklaus Wirth)
?
????1984年的圖靈獎授予了瑞士學者和計算機科學家尼克勞斯 · 沃思,由于他是結構化程序設計語言PASCAL之父及結構話程序設計的首創者,他提出的著名公式“數據結構 + 算法 = 程序,廣為人知。
????凡是學過一點計算機知識的人大概都知道“數據結構十算法=?程序”這一著名公式。提出這一公式并以此作為其一本專著的書名的瑞士計算機科學家尼克勞斯·沃思(Niklaus Wirth)由于發明了多種影響深遠的程序設計語言,并提出結構化程序設計這一革命性概念而獲得了1984年的圖靈獎。他是至今惟一獲此殊榮的瑞士學者。
沃思1934年2月15日生于瑞士北部離蘇黎世不遠的溫特圖爾(Winterthur),其父瓦爾特是一位地理學教授。沃思小時就喜歡動手動腦,組裝飛機模型是他的最大愛好。中學畢業以后,沃思進入在歐洲甚至全世界都很有名氣的蘇黎世工學院(ETH),1958年取得學士學位。之后他遠渡大西洋到加拿大的萊維大學深造(Laval是和加拿大名城魁北克隔圣勞倫斯河相望的一座城市),于1960年取得碩士學位。之后他又一次遷移,到美國加利福尼亞,進入加州大學伯克利分校,于1963年獲得博士學位。
????學成以后,沃思受聘到斯坦福大學剛剛成立的計算機科學系工作。著名的斯坦福大學門檻極高,怎么會看中了這個來自歐洲小國的毛頭小伙子呢?原來在20世紀50年代末、60年代初的情況下,沃思的計算機經驗和成就相當引人注目:在蘇黎世工學院時,他曾聽過瑞士的計算機先驅斯帕塞(A.P.Speiser,他曾出任IFIP的主席)的課,用過由斯帕塞開發的計算機ERMETH(雖然作為學生,機會并不多);在萊維大學時,沃思學了數值分析,用過 Alvac III E計算機(雖然這臺計算機經常出故障而不能開機);在伯克利時,沃思先是有一臺Bendix G-15計算機可用,后來又參加了為IBM 704開發 NELIAC語言編譯程序器的科研小組。 NELIAC的全稱是 Navy Electronics Laboratory International Algol Compiler,即美國海軍電子學實驗室國際 Algol編譯程序語言,該語言用于數值計算和一些邏輯處理,其特點是用自己的語言寫自己的編譯程序,然后進行自編譯,是一個類似于 Aled 58但具有開創性意義的語言。沃思在撰寫博士論文時,Algol 60報告已經發表。這是第一個清晰定義的語言,其語法是用嚴格公式化的方法說明的。當時已有一些學者認識到,清晰的規格說明對于可靠而有效的實現是必需的,但是并不充分:Aled 60報告中還存在一些缺陷和不足。
????沃思在和 Algol的設計者之一、荷蘭人范·維京格爾藤(Andrian van Wijingaarden,他曾任阿姆斯特丹數學中心計算部主任,在開發Algol 68中提出了二級文法,又叫w文法以解決上下文有關這一難題。他曾啟發1972年圖靈獎獲得者狄克斯特拉走上計算機科學之路)多次接觸和討論以后,決定對 Algol 60作進一步改進,并以此作為自己的博士論文課題。這就誕生了由沃思所設計的第一個語言——Euler。Euler雖然在實用性上考慮并不十分周到,但在學術上卻非常優美,為編譯器的系統設計創造了一個很好的基礎。此外,它還對 Algo l60進行了若干擴充,主要是增加了表處理能力。正是由于以上原因,斯坦福大學看中了沃思。與此同時,IFIP也注意到了Euler語言,決定吸收沃思參加對Algol語言進行完善與擴充的工作小組。當時,這個小組中有兩派,一派主張設計一個新語言,以便樹立一個新的里程碑;另一派則覺得時間太緊,主張對 Algol 60進行適當擴充。沃思參加進去以后,自稱同時屬于這兩派,并提交了一份建議書。這份建議書經過霍爾(Tony Hoars)等人的修改、完善以后獲得通過,這就是Aigol W(W是沃思名字的首字母)。
????第二年,也就是1966年,Algol W在斯坦福大學的第一臺 IBM 360上成功實現并正式應用。這中間還有一個小插曲:IBM 360當時只提供匯編語言和 FORTRAN語言,但沃思和他的學生都覺得這兩者并不適宜于作為設計編譯器的工具。于是,沃思用了兩個星期時間寫出了一個用來描寫Algol編譯器的新的語言的定義,然后用了4個月時間在寶來公司的B-5000計算機上完成了交叉編譯程序,而沃思的一個學生則把這個交叉編譯程序移植到 IBM 360上去。這些額外的工作極大地加快了 Algol W編譯器的開發,同時催生了一個新的語言 PL 360。 PL 360雖然是作為輔助工具而設計、開發的,但后來卻在許多地方獲得應用,取得了意想不到的成功。
????Algol W及 PL 360奠定了沃思作為世界級程序設計語言大師的地位,一舉成名。但沃思是一個具有強烈愛國心的人,成名后的他謝絕了斯坦福大學的挽留,于1967年回到祖國,先在蘇黎世大學任職,但第二年就回到他的母校蘇黎世工學院。在這里,他首先設計與實現了 PASCAL語言(Philips Automatic Sequence CAlculator Language的縮寫),這是在 CDC 6600上開發成功的。 PASCAL在數據結構和過程控制結構方面都有很多創造。對于前者,除一般的整型、實型、布爾型數據外,PASCAL還增加了字符型、子域類型、記錄結構類型、文件類型、集合類型和指針類型;對于后者,除保留了無條件轉移的GOTO語句外,又增加了if-then-else、case、while、repeat和for等多種控制結構,還允許復合語句和處理記錄變量的分量使用with語句這種編寫形式??梢哉f,現代程序設計語言中常用的數據結構和控制結構絕大多數都是由PASCAL語言奠定基礎的,因此它在程序設計語言的發展史上具有承上啟下的重要里程碑意義。
????說來有趣,沃思開發PASCAL的初衷是為了有一個適合于教學的語言,并沒有想到商業應用。但一經推出,由于它的簡潔明了,它所提供的豐富的數據結構和控制結構為程序員提供了極大的方便與靈活性,也由于它特別適合于由微處理器所組成的計算機系統,竟然大受歡迎,廣泛地流傳開來。在C語言問世以前,PASCAL是風靡全球、最受歡迎的語言之一,創下了發行拷貝數最多的世界記錄。單是沃思的一個學生菲力浦·凱恩(Phillipe Kahn),從 ETH畢業以后,在美國加利福尼亞州辦了一個軟件公司,就賣出了100多萬個PASCAL拷貝,成為百萬富翁。
????1971年,沃思基于其開發程序設計語言和編程的實踐經驗,在4月份的 Communications of ACM上發表了論文“通過逐步求精方式開發程序’(Program Development by Stepwise Refinement),首次提出了“結構化程序設計”(structure programming)的概念。這個概念的要點是:不要求一步就編制成可執行的程序,而是分若干步進行,逐步求精。第一步編出的程序抽象度最高,第二步編出的程序抽象度有所降低…… 最后一步編出的程序即為可執行的程序。用這種方法編程,似乎復雜,實際上優點很多,可使程序易讀、易寫、易調試、易維護、易保證其正確性及驗證其正確性。結構化程序設計方法又稱為“自頂向下”或“逐步求精”法,在程序設計領域引發了一場革命,成為程序開發的一個標準方法,尤其是在后來發展起來的軟件工程中獲得廣泛應用。有人評價說沃思的結構化程序設計概念“完全改變了人們對程序設計的思維方式”,這是一點也不夸張的。1983年1月,ACM在紀念 Communications of ACM創刊 25周年時,從其 1/4個世紀發表的大量論文中評選出有“里程碑意義的研究論文” 25篇,每年1篇,沃思的這篇論文就是其中之一。
????PASCAL的成功也罷,結構化程序設計思想的巨大影響也罷,都沒有停止沃思繼續創造性的研究與開發工作。20世紀70年代中期,為適應并發程序設計的需要,沃思又成功開發了一個獲得廣泛應用的語言Modula。M0dula除了提供并發程序設計功能之外,另外一個重要特征是引進了模塊概念(這也是這個語言叫做Modula的原因)。此外,它還引進了“進程”(process)這一和并發程序相聯系而產生的重要概念。Modula語言還特別適合于書寫系統程序。但是,比Modula具有更加重大得多意義的卻是它的第二個版本Modula.2。這是 1976年,沃思再次赴美國,到 Xerox公司的 Palo Alto研究中心參與Alto計算機的設計與開發工作。Alto是世界上第一個具有圖形用戶界面的個人計算機系統(可惜Xerox公司沒有把它商品化,而由Apple公司學去了它的技術而推出 Macintosh)。
????沃思回到瑞士以后,參考Alto的經驗,設計、開發Lilith個人計算機系統。為了和Lilith的體系結構相配合,沃思決定在Modula的基礎上開發新版本,作為整個系統的開發語言。Modula-2與Modula相比,語法更加簡潔,更加強調界面設計,模塊的可重用性更好。它共有3個編譯單元,即程序模塊、定義模塊和實規模塊。在定義模塊(definition module)中,只給出那些和模塊外部交往所必需的信息。例如,對模塊內部的子程序說明而言,在定義模塊中只給出子程序名、參數名及其類型等,而不給出子程序體本身,也就是說,在定義模塊中只給出模塊外部可見的信息。在實規模塊(implementation module)中,則給出那些在模塊外部不可見的信息,例如,在模塊內部定義的子程序說明的子程序體。這樣的安排既提高了可讀性,又有助于分別編譯。M0dula-2在優美性(elegance)和簡潔性(simplicity)兩方面都比Modula更進一步。
????Lilith的操作系統、圖形軟件包、數據庫系統、網絡協議套件、文件服務器等基本系統和大量應用模塊全都是用M0dula-2開發的。目前世界上已經開發了近百個Modula-2的編譯系統,北美和歐洲的許多大學已經用Modula-2代替PASCAL作為計算機系本科生的第一門程序設計課程。Modula-2的標準化工作則早在1984年就已由英國開始進行,ISO則于1987年對它進行標準化,并采用由IBM的維也納實驗室提出的VDM-SL和經過沃思本人加以擴充的BNF(即EBNF,見下)表達語言的語法與語義,在形式化方面達到了一個新的水平。在Lilith項目中,沃思堅持將計算機體系結構、語言、操作環境這三者統一起來考慮,實行集成化、一體化設計的成功經驗是具有革命性的創舉,從而使這個項目在計算機科學史上占有重要地位。
????近年來沃思致力于一個新的計劃,即Oberon計劃。Oberon是將程序設計語言和操作系統結合在一起的、面向單用戶的個人工作站的一個系統。因為沃思認為,在因特網日益普及的情況下,今后聯網的計算機主要將是個人工作站,因此如何使個人工作站功能更加強大、更加方便使用是一個十分重大的課題。沃思把這個計劃取名為Oberon是寓意深長的,因為Oberon是希臘神話中的仙境之王和女神Titania的丈夫。沃思的目標是要使Oberon語言超越PASCAL和Modula,設計出的操作系統和編譯器功能更加強勁。1992年他寫了兩本書向讀者推薦Oberon,可見其對這個計劃的重視。
????除了程序設計語言之外,沃思在其他方面也有許多創造。為了定義和描述語言,沃思對著名的“巴科斯-諾爾范式”BNF進行了擴充,成為EBNF(Extended BNF)。我們目前所看到的許多語言的 BNF實際上是EBNF,不過人們往往忽略掉這個E字。和BNF一起出現的,還常常有一些看上去像鐵路圖那樣的圖形,稱作“語法圖”(syntax chart或 syntax diagram)或“鐵路圖”(railroad diagram),這也是由沃思所設計與發明的,這種圖形標記法的描述能力等價于BNF,但當然更易于閱讀與理解,更加直觀。在語法圖中,用圓圈表示終結符,用方框表示非終結符,用有向弧表示走向,圖上一條通路就表示該語法結構的一種正確定義方法。
????在對上下文無關文法的研究中,一個很重要的問題是如何確定兩個符號之間的優先關系。現在一般采用的辦法也是由沃思和他的同事韋伯提出來的,就叫沃思-韋伯優先關系(Wirth- Weber precedence relation),或叫簡單優先關系。
????ACM除了1984年授予沃思圖靈獎外,1987年又授予他“計算機科學教育杰出貢獻獎”。另一重要的國際學術組織IEEE也授予過沃思兩個獎項: 1983年的 Emanual Piore獎和 1988年的計算機先驅獎(Computer Pioneer Award)。1992年,加州大學伯利分校命名沃思為“杰出校友”。
????沃思是在1984年10月于舊金山舉行的ACM年會上接受圖靈獎的。沃思發表了題為“從程序設計語言設計到計算機建造”(From Programming Language Design to Computer Construction)的圖靈獎演說,回顧了自己在計算機領域所做的工作。演說全文刊載于Communications of ACM,1985年 2月,159- 164頁,也可見《前 20年的 ACM圖靈獎演說集》(ACM Turing Award Lectures——The First 20 Years:1966-1985,ACM Pr.),179-196頁。沃思在演說中強調了程序設計語言簡結性的重要意義,也討論了它所需的硬件和軟件環境(因為沃思一直很重視語言的實現問題)。他介紹了在設計Modula-2和Lilith中的經驗,指出第一手經驗和選擇良好開發工具的無比價值。
11、?羅賓 · 米爾納 (Robin Milner)
????1991年的圖靈獎授予給了愛丁堡大學計算機科學系教授羅賓·米爾納(RobinMilner)。
他是繼威爾克斯(M.V.Wilkes,1967)、威爾金森(J.H.Wilkinson,1970)和霍爾(C.A.R.Hoare,1980)之后第四位獲此殊榮的英國科學家,這也使英國成為除美國之外獲得圖靈獎的學者最多的國家。米爾納的主要貢獻在計算機程序設計語言方面,他提出了形式化邏輯系統的一個數學模型LCF,又主持開發了元語言ML并使之標準化。米爾納還利用代數方法為并發與并行計算創建了一種概念框架系統CCS,推動并促進了并發與并行計算的發展。
????米爾納生于1934年1月13日,先后在埃頓學院(EtonCollege)、國王學院(King’sCollege,圖靈也曾在這個學院上學)和劍橋大學接受了高等教育,專業是數學,1957年獲得學士學位。他上大學期間曾經接觸過由威爾克斯主持研制的世界上第一臺存儲程序式電子計算機EDSAC,在它上面編寫過程序。但當時米爾納對計算機并沒有重視,也沒有表現出很大的興趣。大學畢業以后,米爾納當了幾年中學數學教師,更是把計算機全拋在腦后。直到1960年米爾納重新規劃自己的未來,到倫敦著名的Ferranti公司求職。Ferranti公司當時正需要計算機編程人員,對有過編程經歷的米爾納表示歡迎,但要求他“把一生都獻給計算機”。
????20世紀60年代初,計算機還沒有十分普及。計算機的深刻含意是什么,從事計算機工作有多大前途和機會,這些問題對于絕大多數人來說都是不甚清楚的。因此,對于Ferranti公司這一要求,米爾納也深感迷茫和困惑。所幸的是,米爾納作出了正確的選擇,進入Ferranti公司,從而重返計算機領域,并幸運地與計算機科學同步成長起來。
????但米爾納在Ferranti公司只干了3年,以后就轉人大學從事教學與研究。他呆過的大學包括倫敦城市大學,威爾土南部海港城市的斯旺西(Swansea)大學,美國的斯坦福大學,但長期與最后的落腳點則是愛丁堡大學,這是英國最著名、歷史最悠久的高等學府之一,有優良的學術傳統,在計算機科學,尤其是人工智能領域,其研究工作曾長期處于世界領先水平。
????在計算機程序設計語言方面,米爾納和戈頓(M.J.Gordon)等人一起提出了形式化邏輯系統的數學模型,實現了他稱之為LCF的一個系統——“可計算函數的邏輯”(LogicforComputableFunc-tions)。LCF不但是一種有效的建模工具,還是一種強有力的驗證工具,利用它可以方便地驗證計算機程序的正確性。由于在利用計算機解決各種各樣的具體問題時,建立正確的形式化系統在理論上和實踐上都具有重要的意義,因此米爾納的LCF受到學術界的高度評價。實際上,米爾納是受斯科特(D.Scott,1976年圖靈獎獲得者)的影響和啟發才從事這一研究的。我們前面已經介紹過,斯科特是研究自動機理論,和拉賓(M.O.Rabin)一起提出了“非確定性”有限狀態自動機的著名學者,后來在20世紀60年代又和斯特雷奇(C.Stra-chey,1916—1975)合作,提出了程序設計語言的“標志語義模型”,為“標志語義學”(又稱“指稱語義學”或“數學語義學”)奠定了基礎,對計算機程序設計語言的發展產生了重大的影響。斯科特曾到牛津大學訪問、講學,米爾納聽了他的講演,看了他的著作,引起了對這個問題的極大興趣,從而深入進行研究,并獲得成果。20世紀70年代初,米爾納在斯坦福大學的人工智能實驗室作訪問學者時,曾用LCF證明了那里的一個很復雜的編譯器的正確性,受到有“人工智能之父”之稱的麥卡錫(J.McCarthy,1971年圖靈獎獲得者)的高度評價。
????在斯坦福大學期間,米爾納學習了由麥卡錫主持開發的函數式人工智能程序設計語言LISP,這使他受到很大啟發,進一步打開了他的思路和智慧之窗。回到愛丁堡大學以后,他借鑒LISP的經驗,在LCF的基礎上,花了幾年的時間,開發成功了一個更加重要的系統,即ML,也就是元語言(metalanguage),一種用來描述、表達與驗證其他語言的語言。ML是一種強多態類型的語言,一個ML程序也就是一個包含變量定義和函數作用的表達式序列,具有比LCF更強的推理能力。ML有時也被稱為函數式語言,但與純函數式語言有所不同,因為它具有引用的概念,即變量是可以賦值的。此外,它的輸入/輸出系統也引入了副作用。
????ML取得成功以后,米爾納致力于使它國際化和標準化。在他的努力下,1984年成立了一個包括愛丁堡大學、劍橋大學和貝爾實驗室等知名高等學府和研究機構的專家在內的15人工作小組,采取通過電子郵件交換意見進行設計的方式工作。20世紀90年代初標準ML即SML問世。SML具有高階函數功能、I/0機制、參數化的模塊系統和完善的類型系統。
????米爾納另一方面的貢獻是關于并發計算(concurrentcomputing)和并行計算(parallelcomputing)的。由于并發與并行計算與傳統的串行計算(sequential computing)有著本質上的不同,其復雜程度大大增加,無法用后者的方法和術語表達前者的意義。嚴格說來,所謂兩個事件是“并發”的,是指一個系統內部發生的這兩個事件之間沒有因果關系,并非先后關系(當然,有因果關系者必有先后關系,但有先后關系者不一定有因果關系)。并發概念由發明著名的“佩特里網”的C.A.Petri于1962年首先嚴格定義并建立了模型。至于“并行”,指的是利用多個處理機或其他功能部件同時工作以提高系統性能或可靠性,馮·諾伊曼在20世紀40年代提出細胞自動機可認為是并行計算思想的開端。米爾納經過深入研究,提出了一種新的觀點,把可以按任意次序在系統內發生的兩個事件定義為并發事件,稱之為“交疊式并發”,而佩特里定義的嚴格并發則稱為“真并發”。在交疊式并發概念的基礎上,米爾納利用代數方法創造了一種用于建立并發與并行計算的概念框架的系統叫“通信系統演算”CCS(Calculusfor,Com- municatingSystems)。CCS與霍爾(C.A.R.Hoare,1980年圖靈獎獲得者)所創建的“通信順序進程"CSP(CommunicatingSequentialProcess)是最典型的兩個描述性并發模型,即進程代數模型,都以進程及進程間的通信為主要描述對象,系統中的事件就是進程通信,特別適合于描述分布式系統。CCS已經成功地用來解釋用于書寫通信協議規約的國際標準語言Lotos,而Lotos則已用于面向對象的ROOA方法中,用來描述面向對象需求定義中的抽象數據類型和進程定義。CCS本身雖然只有交疊式語義,但利用一些特殊的方法,如多層佩特里網方法,也可以建立起一個完整的真并發語義,因此具有很重要的價值。
????米爾納在學術上的一個特點是十分注意打好基礎,精益求精。他主持開發和標準化的ML被認為是定義得最完善,最無懈可擊,結構最優美、和諧而又最短小、精悍的語言之一。在作風上,米爾納謙虛謹慎,從善如流,非常注意聽取和吸收合作者的意見。例如,標準ML有允許設計“大模塊”程序的功能,就是米爾納根據貝爾實驗室的麥克奎因(D.MacQueen)所提出的構思實現的。ML原先是一個專用語言,意大利學者魯卡·凱德利(Luca Cardelli)實現了ML的一個擴充版本,使之更適合于教學。米爾納看到以后十分贊賞,在它的基礎上把ML進一步發展為一個通用語言。米爾納的成功與他的這些優秀品格是分不開的。
????此外,1996年,米爾納和旺德(1.Wand)還合編了一本《明天的計算:計算機科學未來的研究方向》 (Computing Tomorrow:Future Research Directionsin Computer Science,CambridgeUnipr),書中有包括米爾納自己撰寫的一篇文章在內的總共16篇文章,都是計算機科學各方面的專家撰寫的,論述了在計算復雜性、軟件工程、并行計算、自然語言處理、數據庫、知識重用、實時計算、安全、通信、交互計算、人工智能等各分支中未來研究的方向和重要課題,很值得重視。
????米爾納在接受圖靈獎時發表了題為“交互的原理”(Elements of Interaction)的演說,并接受了記者的采訪。演說全文以及與記者的對話刊載于1996年1月的CommunicationsofACM,78~97頁。在與記者的談話中,米爾納表達了這樣一個觀點,即計算機科學既是理論性很強的科學,又是與應用和實踐密切聯系著的科學。因此,任何希望在這一領域取得成功的年輕人,必須十分重視把理論與實踐結合起來。
????米爾納在愛丁堡大學任教20多年,并于1986年創建了該校的計算機科學基礎實驗室(LaboratoryforFoundationsofComputersci-ence),并出任主任,英國科學與工程研究院對該所有長期的支持。最近米爾納已離開愛丁堡,轉至劍橋大學的計算實驗室。
12、?約翰 · 戴爾(Ole-Johan Dahl)和克利斯登·奈加特(Kristen Nygaard)
????2001年的圖靈獎授予挪威計算機科學家奧爾-約翰·戴爾和克利斯登·奈加特。因為他們在20世紀60年代開發Simula I 和Simula 67時首先引入了類(class)、對象(object)、繼承(inheritance)和動態綁定(dynamic binding)等重要概念,為面向對象(Object oriented)這一當前最流行、最重要的程序設計技術奠定了基礎。
????挪威是一個北歐小國,而且上世紀中葉的挪威政府對信息技術不太重視,在這種情況下,戴爾和奈加特怎么可能作出這一創造性的重大貢獻呢?說來這里有一段曲折而有趣的故事。
????奈加特1926年生于奧斯陸,1948年大學畢業,進入挪威國防研究院NDRE(Norwegian Defence Research Establishment),從事有關計算、程序設計和運籌學方面的工作。1956年他在職完成了碩士學業,以《蒙特卡洛法的若干理論問題》(Theoretical Aspects of Monto Carlo Methods)為題提交了學位論文,并在奧斯陸大學通過答辯,取得數學碩士學位。1959年他創建了挪威運籌學學會NORS(Norwegian Operation Research Society),并出任學會首任主席(1959-1964),1960年他從NDRE轉至挪威計算中心NCC(Norwegian Computing Center),1962年出任其研究部主任(Director of Research)。
????當時,奈加特的研究興趣主要在運籌學方面。所謂運籌學是用數學方法研究軍事、經濟活動中的計劃與管理問題的一個學科,其目的是對系統中涉及的人力、物力進行統籌安排,實現最佳調度,以提高系統的整體效率。它包括線性與非線性規劃、整數規劃、動態規劃、網絡優化、對策論、排隊論等內容,有十分廣泛而重要的應用。運籌學研究中的首要問題是為實際系統建立數學模型,而模型要解決的首要問題是如何描述系統中的不同組成部分及其運行。20世紀50年代時,這種模型通常通過符號標記(Symbol notation)實現,例如用流程圖(flow diagram)加上若干系統運行規則,然后用蒙特卡洛法加以分析,使模型逐步修改并完善。這種方法很不方便,效率不高。奈加特不太滿意,他要尋求一種新的有效方法。到1961年前后,奈加特經過潛心研究,對如何改進已經形成了一些清晰的概念。但在把這些概念付諸實現上,奈加特遇到了困難:他的計算機知識和經驗不足以設計出新的計算機模擬語言去實現他的設想。幸好,他在NDRE時的老朋友戴爾這時也來到了NCC。
????戴爾1931年10月12日生于挪威最南端瀕臨北海的港口城市曼達爾(Mandal),比奈加特小5歲,其經歷幾乎和奈加特一模一樣:大學畢業后也是進了NDRE(1952年);也是在職完成了碩士學業,1957年以《數值數學》(Numerical Mathematics)為題的論文通過了奧斯陸大學的論文答辯,取得數學碩士學位。但是戴爾的研究方向偏重于計算機,他的碩士論文主要討論多維矩陣在有二級存儲器的計算機上如何表示和處理,因此,戴爾在程序設計語言方面有相當豐富的經驗和深厚的根底。這樣,奈加特和戴爾這對“最佳搭檔”經過深入討論和緊密合作,終于在1962年推出了基于Algol60的Simula的第一個版本。Simula是Simulation Language即模擬語言的詞頭縮寫。在第二次世界大戰中,科學家利用運籌學成功地解決了諸如雷達站的最優選址、反潛炸彈的最佳引爆時間、水雷的最佳布陣、安全程度最高的轟炸機戰斗機組合等問題。戰后,科學家又正在試圖用運籌學解決工業生產和管理中的問題,幫助提高生產率與利潤,增強競爭能力。因此,Simula特別適用于研究售票系統、生產線組織、程序開發、神經網絡、并發程序處理這類離散事件。
????1964年3月,奈加特和戴爾完成了Simula的最后設計,這個最后設計在兩個美國軟件工程師瓊斯(Ken Jones)和斯派羅尼(Joeseph Speroni)的協助下由戴爾于1964年12月在NCC新購置的UNIVA 1107上完成,從而誕生了世界上第一個Simula I編譯器,也就是世界上第一個能對離散事件系統進行模擬的程序設計語言。
Simula I推出以后,在生產計劃、庫存管理、交通運輸、建筑物的翻修等諸多方面獲得成功應用。隨后Simula在瑞典、德國、前蘇聯等許多國家被廣泛采用。除UNIVAC版本外,1968年在寶來公司的B5500上,在前蘇聯的烏拉爾-16計算機上也都實現了Simula。
????奈加特和戴爾對所取得的成績并不滿足,在開發過程中,他們已經意識到了Simula還存在一些缺陷,如缺乏跟蹤和調試功能,缺乏必要的工具去表達相關進程共有的性質,以及Algol 60編譯器本身所帶來的限制等等。
????1965年秋天,位于特隆赫姆(Trondheim)的挪威理工學院NIT(Norwegian Institute of Technology)和NCC接觸,希望為1107開發一個專門用于Simula的Algol編譯器,這正中奈加特和戴爾的下懷,雙方很快達成協議,建立了合作關系。NIT方面為首的專家是克努特·斯考克(Knut Skog)?!皩ο蟆?#xff08;Objcet)和“類”(class)以及“子類”(subclass)等基本概念正是在這個時期(1966年末)出現和形成的。在這個過程中,他們的目標也由專用語言逐漸轉向通用語言,從而誕生了第一個面向對象的程序設計語言Simula 67。
????Simula 67首次同公眾見面是在1967年5月于奧斯陸郊外的小鎮莉沙布(Lysebu)舉行的IFIP TC-2 工作會議上。兩個星期以后,即1967年6月又召開了另一次會議,為Simula 67制定標準,以使今后在不同機器上實現的Simula程序可以兼容,1968年2月形成了Simula 67的正式文本。
????在程序設計語言的發展史上,20世紀60年代下半期是承上啟下的重要時期。這個時期有3種重要的語言問世,即我們這里介紹的Simula 67,由IFIP組織歐美一批頂尖計算機科學家共同設計的Algol 68,以及由IBM公司為和360系列機配套而聯合兩大計算機用戶組織SHARE和GUIDE共同開發的PL/I。這三個語言各有特色,均有所創新,都對后來的程序設計語言產生了重大影響。但客觀地說,Simula 67的面向對象概念影響是最巨大而深遠的。它本身雖由于比較難學、難用而未能廣泛流行,但在它的影響下所產生的面向對象技術卻迅速傳播開來。70年代Xerox公司推出了Smalltalk,80年代Bell實驗室推出了C++,美國交互軟件公司推出了Eiffel……從此在全世界掀起了一股OO(Object oriented)熱潮,至今盛行不衰,成為程序設計的主流。因此OO的奠基人奈加特和戴爾獲得新世紀的第一個圖靈獎可說是當之無愧。
總結
以上是生活随笔為你收集整理的程序设计、数据结构、编译相关图灵奖得主简介之二的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简易漫画网站搭建-漫画喵Server版
- 下一篇: 上dj是什么意思_彩超上显示“乳腺结节”