MAURICE V. WILKES Cambridge University, Cambridge, England

我預想在我之後的許多圖靈講座講者中,不會有很多是認識 Alan Turing 的人。他在 1936 年發表了計算數的工作,這項工作讓他聲名遠播,而當時數位計算機尚未存在。後來,他成為首批為計算機領域做出貢獻的傑出數學家之一,他們相繼而來,貢獻卓著。在英國數位計算機發展的早期,他是個引人注目的人物,如果我不提及他,我很難談論那個時期。

Pioneering Days

對我來說,發生在我生命中的一個首要重要事件是在 1946 年,當時我收到一封電報,邀請我在那年夏末參加在 Philadelphia 的 Moore School of Electrical Engineering 舉辦的一個關於計算機的課程。我得以參加了課程的後半部分,那是一次美妙的經歷。以前從未舉辦過這樣的課程,Moore School 和其他計算機先驅的成就鮮為人知。有來自 20 個機構的 28 名學員。主要講師是 John Mauchly 和 Prosper Eckert。他們剛完成設計 ENIAC 的壯舉,ENIAC 是第一台電子數位計算機,儘管它不是基於儲存程式原則運作。這台機器的規模即使在今天也會令人印象深刻——它用了超過 18,000 個真空管。

儘管 ENIAC 在計算彈道表格方面非常成功——而且速度非常快——這是協商該專案時的應用目標,但它有嚴重的限制,極大地限制了它作為通用計算設備的應用。首先,程式設定是通過插頭、插座和開關完成的,從一個問題切換到另一個問題需要很長時間。其次,它的內部儲存容量只有 20 個數字。Eckert 和 Mauchly 意識到主要問題在於儲存,因此他們為未來的機器提出了使用超音波延遲線的建議。指令和數字將像我們現在習慣的那樣混合在同一個記憶體中。

一旦新的原則被闡明,人們就發現可以用十分之一的設備建造比 ENIAC 擁有更強大能力的計算機。

當時,von Neumann 以顧問身份與 Moore School 團隊相關聯,儘管我直到稍晚才親自認識他。計算領域欠 von Neumann 巨大的債務。他立即領會了後來被稱為邏輯設計的可能性,以及儲存程式原則所蘊含的潛力。 von Neumann 帶來他的巨大聲望和影響力非常重要,因為新思想對一些人來說過於革命性,且當時有人強烈質疑超音波記憶體不會足夠可靠,以及將指令和數字混合在同一記憶體中是違背自然的。

隨後的發展決定性地證明了 Eckert 和 Mauchly 在 1946 年教授給我們這些幸運參加課程的人的原則是正確的。然而,在 1950 年代早期有一段艱難時期。第一批運作中的儲存程式計算機自然是實驗室模型;它們沒有完全工程化,也遠未充分利用當時的技術能力。第一批更具雄心且完全工程化的計算機完成並在實際運作中證明自己所需的時間比人們預期長得多。回想起來,這段時期似乎很短;在當時,這是一段充滿內心掙扎甚至相互指責的時期。

在過去一年裡,我經常覺得我們正經歷一個與分時非常相似的階段。這是一項發展,伴隨著許多關於計算機與個人使用者和社群關係的深遠影響,並且激發了許多人的想像。先驅系統展示出來已經好幾年了。再一次地,從實驗系統過渡到充分利用現有技術的高度發展系統,所需時間比人們預期要長。結果是出現一段不確定和質疑的時期,這與我先前提到過的早期時期非常相似。當這一切結束時,我們將很快忘記我們現在正在經歷的磨難。

在超音波記憶體中,習慣上在同一條延遲線中首尾相接儲存多達 32 個字。脈衝率相當高,但人們非常擔心等待正確字元出現所需的時間。因此,大多數延遲線計算機的設計使得程式設計師可以運用巧妙的方法,將他們的指令和數字放置在記憶體中,以最小化等待時間。 Turing 本人就是這類邏輯設計的先驅。後來類似的方法也應用於使用磁鼓作為記憶體的計算機,總而言之,這種所謂的最佳化編碼是一個蓬勃發展的領域。我覺得這種人類的巧思作為長期投資是放錯了地方,因為遲早我們會擁有真正的隨機存取記憶體。因此,我們在 Cambridge 沒有參與任何最佳化編碼相關的工作。

儘管是數學家,Turing 對計算機設計的工程方面相當感興趣。 1947 年,人們曾討論是否能找到比水銀更便宜的物質作為超音波延遲介質。 Turing 對這次討論的貢獻是倡導使用琴酒(gin),他說琴酒包含酒精和水,比例恰到好處,能在室溫下提供零溫度的傳播速度係數。

早期力量的來源是世界各地的小組願意建造實驗性計算機,而不必將它們視為系列生產的原型。結果是累積了關於什麼可行、什麼不可行、什麼值得做、什麼不值得做的知識體系。雖然環顧當今市售的計算機,不能覺得所有的教訓都已學會,但毫無疑問,早期研究的多樣性已經帶來了豐厚的回報。我認為,當我們正在學習如何建造大型、多用戶、多程式、多處理器計算機系統時,今天我們也需要類似的多樣性。我們現在不再是組裝元件和真空管來製造一台計算機,而是必須學習如何組裝記憶體模組、處理器和周邊設備來組成一個系統。我希望會有資金來資助僅用於研究的大型系統建設。

許多數位計算機的早期工程開發是在大學裡進行的。幾年前,普遍的觀點是大學在計算機設計方面的作用已經發揮完畢,這件事現在可以放心地交給工業界了。我認為並非所有大學都需要進行計算機設計方面的工作,但我很高興有一些大學仍然活躍在這個領域。除了大學在傳播知識和將原本可能隱藏的資料保持在公共領域的顯然功能外,大學由於不受商業考慮的束縛,包括不受追趕潮流的束縛,可以做出特殊的貢獻。

Good Language and Bad

漸漸地,關於計算機設計本身的爭論平息了,我們都開始爭論複雜程式設計技術的優劣;關於自動程式設計,或者我們現在應稱之為使用高階程式語言的戰鬥已經開始。我清楚地記得在一次早期的 ACM 會議上——大概是 1953 年左右——參加了一場關於這個主題的辯論。 John Carr 也是發言者之一,他將程式設計師分為兩類;第一類是「primitives」,他們認為所有指令都應該以八進制、十六進制或其他類似形式編寫,並且對他們稱之為花俏方案的東西不屑一顧,而第二類是「space cadets」,他們視自己為新時代的先驅。我趕緊將自己歸類為「space cadet」,儘管我記得曾發出警告,不要依賴當時頗為流行的直譯系統,而應依賴編譯器。(我認為當時「compiler」這個詞還沒有普遍使用,儘管實際上它是由 Grace Hopper 引入的。)

反對自動程式設計的嚴肅論點與效率有關。編譯程式的執行時間不僅比手寫程式長,而且,當時更嚴重的是,它需要更多的記憶體。換句話說,做同樣的工作需要一台更大的計算機。我們都知道這些論點雖然有效,但並未被證明是決定性的,人們發現使用自動程式設計對他們來說是有好處的。事實上,計算領域過去幾年的爆炸性擴張,否則是不可能實現的。我們現在對於分時也展開了非常相似的辯論,而反對分時提出的論點與先前反對自動程式設計的論點非常相似。在這裡,我再次站在「space cadets」一邊,我預計辯論也會有類似的結果。

順帶一提,我擔心在那場自動程式設計辯論中,Turing 肯定會站在「primitives」一邊。他在 Manchester University 設計的先驅計算機的程式設計系統極其奇特。他本人思維敏捷,認為無需向能力較弱的人做出讓步。我記得他曾決定——大概是因為有人給他在示波器上展示了一串脈衝——編寫二進位數字的正確方法是反向的,最低有效位在左邊。他有時會將這個習慣帶到十進制記數法中。我清楚地記得有一次在講座中,當他在黑板上將一些十進制數字相乘,以說明程式檢查的要點時,我們都無法跟上他的演算過程,直到我們意識到他把數字寫反了。我不認為他是在開玩笑,或試圖刁難我們;只是他無法理解這種微不足道的事情會以任何方式影響別人的理解。

我相信在二十年後,人們會回顧我們現在所處的時期,認為這是程式語言設計原則剛剛開始被理解的時期。當我聽到善意的人建議是時候標準化一種或兩種語言時,我感到遺憾。我們確實需要臨時標準來指導我們前進,但我們還不能期望在一段時間內達到穩定狀態。

The Higher Syntax

過去幾年的一個顯著成就是對語法和語法分析有了更深入的理解。這導致了編譯器建構方面的實際進步。這個領域的一個早期成就,當時沒有得到充分認識的,是 Brooker 和 Morris 的 Compiler-Compiler。

人們現在已經開始意識到並非所有問題都是語言性的,並且是時候更多地關注資料在計算機中的儲存方式,即資料結構了。 Alan Perlis 在他去年發表的圖靈講座中已經提請人們注意這個主題。目前,選擇一種程式語言相當於選擇一種資料結構,如果該資料結構不適合您想處理的資料,那就太糟糕了。從某種意義上說,更合乎邏輯的做法是首先選擇適合問題的資料結構,然後尋找或使用一套提供的工具構建一種適合操作該資料結構的語言。人們有時會談論高階和低階程式語言,卻沒有非常清楚地定義它們的含義。如果高階程式語言是資料結構固定且不可更改的語言,而低階語言是在資料結構的選擇上有一些靈活性的語言,那麼我認為我們可能會在某些方面看到向低階程式語言的轉變。

但是,我想提出以下評論。在高階語言中,大部分語法以及編譯器的很大一部分都與宣告機制、從簡單陳述組成複合陳述、以及條件陳述的機制有關。所有這些都完全獨立於真正操作資料的陳述做了什麼或資料結構是什麼樣子。事實上,我們有兩種語言,一個在另一個裡面;一個關於控制流程的外部語言,和一個操作資料的內部語言。或許有理由擁有一個標準的外部語言——或少數幾個可供選擇的——以及一些可以像插件一樣插入的內部語言。如有必要,為了滿足特殊情況,可以構建一個新的內部語言;插入後,它可以利用外部語言提供的控制流程組織能力。當我想到我們開始需要的許多特殊語言時——例如,用於即時控制、電腦繪圖、作業系統編寫等等——我就越覺得我們應該採用一種系統,這樣就可以避免每次都設計和學習使用一種新的外部語言。

資料結構的根本重要性可以通過考慮設計一種單一語言的問題來說明,該語言既適合純算術工作也適合符號處理工作。為此類目標而設計的語言嘗試一直令人失望。困難在於,在這兩種情況下,為了高效實現所需的資料結構完全不同。也許我們應該認識到這個困難是根本性的,並放棄尋求一種能滿足所有人的萬用語言。

在軟體領域有一個發展,或許沒有得到應有的關注。這就是語言系統從一台計算機到另一台的移動性日益增強。長期以來,通過完全用某種廣泛使用的高階程式語言(如 ALGOL 或 FORTRAN)編寫系統,就可以實現這種移動性。然而,這種方法強制使用了宿主語言內部的資料結構,這顯然限制了效率。

為了使一個系統可以輕鬆地從一台計算機轉移到另一台,而不是通過宿主語言,該系統首先必須以機器無關的形式編寫。這不是詳細介紹可用於轉移適當構建系統的各種技術的地方。它們包括引導(bootstrapping)等技術,以及使用原始操作(primitives)和巨集(macros)。轉移操作通常涉及在系統已在運行的計算機上進行一些工作。 Harry Huskey 在這個領域利用 Neliac 系統進行了許多早期的開創性工作。

有理由希望這種新發現的移動性將擴展到作業系統,或者至少是它們的很大一部分。總而言之,我覺得我們正在進入一個新的時期,基本的機器程式碼不相容所帶來的不便將會減少。內部檔案系統的使用日益增加,其中資訊可以以字母數字的形式在系統內保存,從而本質上是機器無關的,這將加劇這種趨勢。如此保存的資訊可以通過演算法轉換為任何其他所需的格式。我們必須習慣於將機器無關的形式視為基本形式。然後我們將樂於將現在被視為根本不相容的設備群組連接到我們的計算機系統中;特別是,我相信在未來的大型系統中,處理器不一定來自同一製造商。

Design and Assembly

過去幾年的一個特點是對電腦繪圖的濃厚興趣。我相信我們計算機領域的人很久以前就意識到圖形溝通方式在適當情況下與計算機溝通的實用性,但我認為我們許多人對這個主題對機械工程師的吸引力感到驚訝。工程師習慣於通過圖表和草圖相互溝通,一旦他們在陰極射線管表面看到圖表被繪製出來,他們許多人就斷定使用計算機進行工程設計的所有問題都已解決。當然,我們知道事實遠非如此,而且在顯示器的潛在實用性得以實現之前,還需要付出大量努力。然而,工程師的最初反應向我們展示了兩件我們不應忘記的事情。一是,在設計工程師看來,與計算機溝通的普通方式完全不足。二是,某種形式的圖形溝通在當前的工程實務中至關重要;我們必須在我們的計算機系統中提供這種能力,否則就承擔不可能完成的任務,即培養一代以不同方式思考的未來工程師。

有跡象表明,最近電腦繪圖興趣的增長即將隨後出現對通過計算機操作物件的相應興趣增長。一些這方面的專案已經啟動。這些專案背後的主要動力是人工智慧的興趣。選擇的任務和採用的程式設計策略都反映了這種興趣。

然而,我個人對這個主題的興趣更為實際。我相信計算機控制的機械處理裝置在工廠和其他地方有巨大的未來。工程元件的生產已經自動化到令人驚訝的程度,數控機床的出現使得即使是相當複雜的元件也能以相對小的批量自動生產。相比之下,將元件組裝成完整產品的自動化進展要慢得多。

人工智慧方法可能不是設計自動組裝裝置問題的完全正確方法。動物和機器是由完全不同的材料並以完全不同的原理建造的。當工程師試圖從研究動物的運作方式中汲取靈感時,他們通常會被誤導;早期嘗試建造拍打翅膀的飛行機器的歷史非常清楚地說明了這一點。我個人認為,我們很快就會看到計算機控制的組裝帶,旁邊排列著一排排自動處理機,並由同一個計算機系統控制。我相信這些處理機將更像機床而不是手指和大拇指,儘管它們結構更輕,並且將嚴重依賴各種感測元件的回饋。

The Next Breakthrough

我想我們都在問自己,我們現在所知的計算機是否會一直存在下去,或者是否會有根本性的創新。考慮這個問題時,最好弄清楚我們究竟取得了什麼成就。接受處理器一次只做一件事的想法——至少從程式設計師的角度來看——使得程式設計在概念上非常簡單,並為我們所看到的層層複雜性發展鋪平了道路。我曾觀察過人們嘗試為早期計算機編寫程式,在那些計算機中乘法和其他操作是平行進行的,我相信這個原則的重要性怎麼強調都不為過。

從硬體角度來看,同一原則導致了系統的發展,在這些系統中,硬體利用率可以在非常廣泛的問題範圍內保持較高的因子,換句話說,就是發展出真正通用的計算機。相比之下,ENIAC 包含大量硬體,其中一部分用於計算,一部分用於程式設計,然而在一般問題上,任何給定時間只有一小部分硬體在使用。

革命性的進步,如果有的話,必須通過利用積體電路將使高度平行成為可能。問題是如何確保令人滿意的高硬體利用率因子,因為如果沒有這個,平行處理就不會給我們帶來更大的能力。高度平行的系統往往只在設計者考慮到的問題上高效;在其他問題上,硬體利用率因子往往下降到這樣的程度,以至於從長遠來看,傳統計算機更有效率。我認為在高度平行的系統中,我們將不可避免地要接受比我們現在習慣的更高程度的專業化以應對特定的問題領域。積體電路的絕對成本當然是一個重要的考慮因素,但應該注意的是,成本的顯著下降也會使傳統設計的處理器受益。

我認為我們必須將希望寄託在高度平行的領域之一是二維圖形識別。目前的計算機在這個領域效率非常低。我並不是只考慮文字字元識別等任務。許多符號處理問題中包含大量的圖形識別元素,一個很好的例子就是語法分析。我不會排除在圖形識別方面可能會有重大的概念性突破,徹底改變整個計算領域的可能性。

Summary

我已經從計算機領域的早期談到了現在。我不是從最開始談起,因為第一批先驅者使用的是機械和機電裝置,而不是電子裝置。然而,我們對他們負有巨大的債務,我認為即使在現在,他們的工作仍然值得研究。審視計算機科學家興趣的轉變以及那些依賴計算機工作的人日益擴大的群體,我們不能不被計算機將不同動機的人綁定在一起,形成一個真正的利益共同體的力量所打動。這正是我們協會活力和生命力的來源。如果將來認為需要更改名稱,我希望「computing machinery」或某些普遍公認的同義詞能夠保留。因為將我們聯繫在一起的不是某些抽象事物,如圖靈機或資訊,而是我們每天工作的實際硬體。