1. 程式人生 > >程式語言,一路走來

程式語言,一路走來

人類發明了程式語言,本是為了能控制機器。計算機越來越強大,程式語言也不斷革新。於是我大膽地認為,程式語言的意義將超越對機器的控制,它或許是一種文明的出發點——機器人文明。為了能更好地展望程式語言,讓我們先來回顧一下它的發展歷程。

1 程式設計語言的發展經歷了五代:

第一代語言:機器語言

第二代語言:組合語言(亦稱符號語言)

第三代語言:高階語言

                             |__       面向過程(如C、BASIC、Pascal)

                             |__       面向物件(如C++、java、C#)

第四代語言:資料庫程式語言(也叫非過程化語言)

第五代語言:被稱為人工智慧語言

2 程式設計思想的發展:

面向機器

面向過程

面向物件

面向主體

面向應用

面向語言

3 程式設計語言的型別:   

3.1 命令式語言 :

現代流行的大多數語言都是這一型別,比如 Fortran、Pascal、Cobol、C、C++、Basic、Ada、Java、C# 等。 

3.2 函式式語言 :

這種語言非常適合於進行人工智慧等工作的計算。如 Lisp。

3.3 邏輯式語言 :

這種語言主要用在專家系統的實現中。如Prolog。  

3.4 面嚮物件語言 :

現代語言中的大多數都提供面向物件的支援,主要的純面嚮物件語言是 Smalltalk。   

在有了一個概括的印象後,讓我們來細細品味一下那些了不起的智慧結晶。

4 機器語言與組合語言

它們都面向機器,優點效率高,缺點太繁瑣。

機器語言真的是機器的語言,但卻是目前所有程式語言的本質。可以說,它老了,但它的精神猶在。

組合語言略施小計,用符號代替二進位制碼,簡化程式,但治標不治本,它依然是一種低階語言、依然讓人感到繁重不堪。但在我看來,正是它啟發了此後的高階語言。依然是,老了,精神猶在。

現在著重談一下組合語言.

由於具有簡捷、佔用記憶體少、直接控制硬體、執行速度快的優勢,它寶刀還未老,經常與高階語言配合使用。

它能夠完成許多其它語言所無法完成的功能。就拿Linux核心來講,雖然絕大部分程式碼是用C語言編寫的,但仍然不可避免地在某些關鍵地方使用了彙編程式碼,其中主要是在Linux的啟動部分。由於這部分程式碼與硬體的關係非常密切,即使是C語言也會有些力不從心,而組合語言則能夠很好揚長避短,最大限度地發揮硬體的效能。

通過學習和使用匯編語言,能夠感知、體會、理解機器的邏輯功能,向上為理解各種軟體系統的原理,打下技術理論基礎;向下為掌握硬體系統的原理,打下實踐應用基礎。學習組合語言,向上可以理解軟體,向下能夠感知硬體,是我們理解整個計算機系統的最佳起點。

5 高階語言

高階語言,也稱演算法語言,是一種與自然語言相近、面向使用者的語言。計算機並不能直接地接受和執行用高階語言編寫的源程式,源程式在輸入計算機時,通過“翻譯程式”翻譯成機器語言形式的目標程式,計算機才能識別和執行。這種“翻譯”通常有兩種方式,即編譯方和解釋方式。

5.1 FORTRAN1954

亦譯為福傳, 是世界上最早出現的計算機高階程式設計語言,廣泛應用於科學和工程計算領域。FORTRAN語言以其特有的功能在數值、科學和工程計算領域發揮著重要作用。早在1951年,美國IBM公司約翰·貝克斯(John Backus)針對組合語言的缺點著手研究開發FORTRAN語言,並於1954年在紐約正式對外發布。Fortran90,Fortran95,Fortran2003的相繼推出使Fortran語言具備了現代高階程式語言的一些特性. Fortran語言是一種極具發展潛力的語言,在全球範圍內流行過程中,Fortran語言的標準化不斷吸收現代化程式語言的新特性,並且在工程計算領域仍然佔有重要地位。 不可否認,Fortran語言與目前流行的JAVA,C#等高階語言相比,它缺乏創造力。但是,工科學生必須注意到,由於Fortran在工程計算領域長期處於統治地位,很多優秀的工程計算軟體都是運用fortran語言編寫,為了能夠使用這些商業軟體的高階功能,必須先學會fortran語言,才能編寫應用程式介面。

5.2 ALGOL1958

ALGOL是計算機發展史上首批產生的高階語言,當時還是電晶體計算機流行的時代,由於ALGOL語句和普通語言表示式接近,更適於數值計算,所以ALGOL多用於科學計算機。ALGOL是第一個清晰定義的語言,其語法是用嚴格公式化的方法說明的。ALGOL語言並沒有被廣泛的使用,但它是許多現代程式語言的概念基礎。Algol 58(1958), Algol 60(1960), Algol W(1966)都是這一家族的成員.其中,Algol 60是程式設計語言發展史上的一個里程碑,它標誌著程式設計語言成為一門獨立的科學學科,併為後來軟體自動化及軟體可靠性的發展奠定了基礎。

5.3 COBOL1959

在企業管理中,數值計算並不複雜,但資料處理資訊量卻很大。為專門解決經企管理問題,於1959年,由美國的一些計算機使用者組織設計了專用於商務處理的計算機語言COBOL。COBOL語言使用了300多個英語保留字,大量採用普通英語詞彙和句型,COBOL程式通俗易懂,素有“英語語言”之稱。目前COBOL語言主要應用於情報檢索、商業資料處理等管理領域。

5.4 BASIC1964

它誕生於1964年,由於簡單、易學的基本特性,很快地就普遍流行起來。隨後,由微軟研發的Quick BASIC和Visual Basic豐富和完善了這一語言。

它擁有以下特點:

5.4.1 構成簡單。 BASIC語言的最基本語句只有17種,而且它們都是常見的英文單詞或其變形,如READ、END等。

5.4.2 是一種“人機會話”式的語言。通過鍵盤操作,用BASIC語言編寫完的程式,可以在計算機上邊編寫、邊修改、邊執行。

5.4.3 功能較全、適用面廣。BASIC語言除了能進行科學計算和資料處理外,還能進行字元處理、圖形處理、音樂演奏等。

5.5 LOGO1968

LOGO語言是一種早期的程式語言,也是一種與自然語言非常接近的程式語言,它通過“繪圖”的方式來學習程式設計,對初學者特別是兒童進行寓教於樂的教學方式。 LOGO語言創始於1968年,是美國國家科學基金會所資助的一項專案研究,在麻省理工學院(MIT)的人工智慧研究室完成。一名叫佩伯特的心理學家在從事兒童學習的研究中,發現一些與他的想法相反的教學方法,並在一個假日中出外散步時,偶然間看到一個像海龜的機械裝置觸發靈感,於是利用他廣博的知識及聰明的才智而最終完成了LOGO語言的設計。繪圖是LOGO語言中最主要的功能,佩伯特博士就是希望能通過繪圖的方式來培養學生學習電腦的興趣和正確的學習觀念。中文LOGO語言 最近已經有人開發出了flash版LOGO語言,還挻好用,不僅可以實現常用命令,還自行開發了一些機器人智慧命令。LOGO語言之所以是兒童學習計算機程式設計最好的一種語言,就因為它是針對兒童而製作的程式語言,能使兒童在認知與技能上得到較大的發展。

5.6 PASCAL 1971

在講Pascal語言之前,不得不提到軟體發展中第三個里程碑——結構化程式設計。結構化程式設計的三種基本結構是順序結構、選擇結構和迴圈結構。咦,這我們很熟悉啊,if判斷,for迴圈。原來,這也是人類智慧的結晶。為了應對所謂的“軟體危機”,人們開始對程式設計方法進行研究,尋求一種新的,能適應簡明性,可靠性和易修改性要求的程式設計方法。荷蘭著名電腦科學家,圖靈獎得主E.W.Dijkstra提出了“結構化程式設計”這一方法。為適應這一新的程式設計方法,人們在積極研製相應的程式設計語言。Pascal語言就是在這種情況下產生的,並被認為是第一個實現結構化程式設計的語言。(另外,QuickBASIC也是一種結構化程式設計語言)(注軟體危機:60年代中期,大容量、高速度計算機的出現,使計算機的應用範圍迅速擴大,軟體開發急劇增長。高階語言開始出現;作業系統的發展引起了計算機應用方式的變化;大量資料處理導致第一代資料庫管理系統的誕生。軟體系統的規模越來越大,複雜程度越來越高,軟體可靠性問題也越來越突出。原來的個人設計、個人使用的方式不再能滿足要求,迫切需要改變軟體生產方式,提高軟體生產率,軟體危機開始爆發 )PASCAL由瑞士蘇黎世聯邦工業大學的沃斯(N.Wirth)教授研製,於1971年正式發表。PASCAL語言有利於在程式設計方面順利入門,有利於培養學生嚴謹、清晰的程式設計風格和良好的習慣。IOI(國際奧林匹克資訊學競賽)把Pascal語言作為三種程式設計語言之一。

5.7 C語言1972

由美國貝爾研究所的D.M.Ritchie於1972年推出。它把高階語言的基本結構和語句與低階語言的實用性結合起來。C語言是美國AT&T(電報與電話)公司為了實現UNIX系統的設計思想而發展起來的語言工具。C語言的主要特色是兼顧了高階語言和組合語言的特點,簡潔、豐富、可移植。作為一種通用程式語言,C正被越來越多的計算機使用者所推崇。使用C語言編寫程式,既感覺到使用高階語言的自然,也體會到利用計算機硬體指令的直接,而程式設計師卻無需捲入組合語言的繁瑣。它的應用範圍廣泛,具備很強的資料處理能力,不僅僅是在軟體開發上,而且各類科研都需要用到C語言,適於編寫系統軟體,三維,二維圖形和動畫。具體應用比如微控制器以及嵌入式系統開發。適合於多種作業系統,如Windows、DOS、UNIX等等;也適用於多種機型。指標是C語言的一大特色,可以說C語言優於其它高階語言的一個重要原因。就是因為它有指標,可以直接進行靠近硬體的操作,但是C的指標操作不做保護,也給它帶來了很多不安全的因素。C++在這方面做了改進,在保留了指標操作的同時又增強了安全性,受到了一些使用者的支援,但是,由於這些改進增加語言的複雜度,也為另一部分所詬病。Java則吸取了C++的教訓,取消了指標操作,也取消了C++改進中一些備受爭議的地方,在安全性和適合性方面均取得良好的效果,但其本身解釋在虛擬機器中執行,執行效率低於C++/C。一般而言,C,C++,java被視為同一系的語言,它們長期佔據著程式使用榜的前三名。接下來,讓我們看一看,這門盛久不衰的語言是如何建立起來的。C語言的祖先是BCPL語言。1967年,劍橋大學的 Martin Richards 對CPL語言進行了簡化,於是產生了BCPL語言(CPL也是高階語言)。1970年,美國貝爾實驗室的 Ken Thompson以BCPL語言為基礎,設計出很簡單且很接近硬體的B語言(取BCPL的首字母)。並且他用B語言寫了第一個UNIX作業系統。在1972年,美國貝爾實驗室的 D.M.Ritchie 在B語言的基礎上最終設計出了一種新的語言,他取了BCPL的第二個字母作為這種語言的名字,這就是C語言。CPL語言在ALGOL 60 的基礎上接近硬體一些,但規模比較大,難以實現,所以很快被淘汰。C語言即保持 BCPL 語言和 B 語言的優點(精練、接近硬體),又克服了他們的缺點(過於簡單,資料無型別等)。自從被C語言取代之後,B語言幾乎已遭棄置。C語言的缺點主要表現在資料的封裝性上,這一點使得C在資料的安全性上有很大缺陷,這也是C和C++的一大區別。

5.8 C++20世紀80年代)

美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普博士在20世紀80年代初期發明並實現了C++。一開始C++是作為C語言的增強版出現的,從給C語言增加類開始,不斷的增加新特性,如多重繼承。C++語言發展大概可以分為三個階段: 第一階段從80年代到1995年。這一階段C++語言基本上是傳統型別上的面嚮物件語言,並且憑藉著接近C語言的效率,在工業界使用的開發語言中佔據了相當大份額; 第二階段從1995年到2000年,這一階段由於標準模板庫(STL)和後來的Boost等程式庫的出現,泛型程式設計在C++中佔據了越來越多的比重性。當然,同時由於Java、C#等語言的出現和硬體價格的大規模下降,C++受到了一定的衝擊; 第三階段從2000年至今,由於以Loki、MPL等程式庫為代表的產生式程式設計和模板超程式設計的出現,C++出現了發展歷史上又一個新的高峰,這些新技術的出現以及和原有技術的融合,使C++已經成為當今主流程式設計語言中最複雜的一員。(注泛型:泛型是程式設計語言的一種特性。一些強型別程式語言支援泛型,其主要目的是加強型別安全及減少類轉換的次數)

5.9 C# VS JAVA20世紀90年代)

C#是一種最新的、面向物件的程式語言,是微軟為.NET Framework量身訂做的程式語言,C#擁有C/C++的強大功能(微軟C#語言定義主要是從C和C++繼承而來的)以及Visual Basic簡易使用的特性,是第一個元件導向程式語言,和C++與Java一樣亦為物件導向程式語言。JAVA是由Sun公司於1995年5月推出的一種可以撰寫跨平臺應用軟體的面向物件的程式設計語言。Java 技術具有卓越的通用性、高效性、平臺移植性和安全性,廣泛應用於個人PC、資料中心、遊戲控制檯、科學超級計算機、行動電話和網際網路,同時擁有全球最大的開發者專業社群。在全球雲端計算和移動網際網路的產業環境下,Java更具備了顯著優勢和廣闊前景。它最初被命名為Oak,目標設定在家用電器等小型系統的程式語言,來解決諸如電視機、電話、鬧鐘、烤麵包機等家用電器的控制和通訊問題。由於這些智慧化家電的市場需求沒有預期的高,Sun放棄了該項計劃。就在Oak幾近失敗之時,隨著網際網路的發展,Sun看到了Oak在計算機網路上的廣闊應用前景,於是改造了Oak,以“Java”的名稱正式釋出。Java 程式語言的風格十分接近C、C++語言。Java是一個純的面向物件的程式設計語言,它繼承了 C++ 語言面向物件技術的核心,Java捨棄了C ++語言中容易引起錯誤的指標。Java 不同於一般的編譯執行計算機語言和解釋執行計算機語言。它首先將原始碼編譯成二進位制位元組碼(bytecode),然後依賴各種不同平臺上的虛擬機器來解釋執行位元組碼,從而實現了“一次編譯、到處執行”的跨平臺特性。不過,每次的編譯執行需要消耗一定的時間,這同時也在一定程度上降低了 Java 程式的執行效率。與傳統程式不同,Sun 公司在推出 Java 之際就將其作為一種開放的技術。全球數以萬計的 Java 開發公司被要求所設計的 Java 軟體必須相互相容。“Java 語言靠群體的力量而非公司的力量”是 Sun 公司的口號之一,並獲得了廣大軟體開發商的認同。這與微軟公司所倡導的注重精英和封閉式的模式完全不同。C#看起來與Java有著驚人的相似,但是C#與Java有著明顯的不同。下面簡單地把C#和Java的相似處列出來,雖然在這裡我們重點討論的是C#和Java的不同點,但是瞭解一下二者的相同之處也是很有必要的。a.跨平臺 b.消除了指標(在C#中可以使用指標,不過必須註明unsafe關鍵字)c. 所有的類都是從物件派生出來,並且必須使用New關鍵字分配記憶體d  .都具有介面(interface)的概念。C#最引人入勝的地方是它和Java的不同,而不是相似的地方。自C#誕生之日起,關於C#與Java之間的論戰便此起彼伏,至今不輟。雖說兩個語言有著"90%的重疊",但那另外"10%的較量"也往往能夠左右一個天平的方向。但在大刀闊斧地對C++進行改革的同時,C#顯得更為保守,它對很多原來C++中很好的性質予以了保留,在Java中都被很可惜地丟掉了。在基本型別和單根繼承的物件之間的型別統一方面C#提出的box/unbox要比Java的包裝類顯得高明,效率也要好。對C++不安全的指標及記憶體分配方式,C#和Java都提出了託管執行環境。效率問題是託管執行環境一直以來令人詬病的地方,Java虛擬機器(JVM)的解釋執行方式曾經讓很多開發者"慢的不可忍受"。C#的JIT編譯方式為C#在這塊戰場上贏得贊聲一片,在異常處理方面,不管從內建支援,還是從執行效率來講,C#都較Java略勝一籌。"一次程式設計,多處執行"是程式設計一直以來的一個訴求,尤其是在現代網際網路絡時代。在跨平臺方面,Java的支援和實現都是為人稱道的,雖然JVM的速度仍然讓人備感頭疼。而C#雖然在底層構造方面對移植性進行了充分的考慮,但至少目前還沒有成熟的,經過檢驗的產品。在C#中類的宣告與Java很相似.這是合理的因為經驗告訴我們Java模型工作得很好。從純技術角度來講,C#無疑較Java更具競爭力. 但它還太不成熟,不可能擠垮JAVA. C#還需要進化成一種開發者能夠接受和採用的語言。而微軟當前為它的這種新語言大造聲勢也是值得注意的。目前大家的反應是:“這是對JAVA的反擊” 。"語言選擇乃藝術而非技術問題". C#和Java都提出了對傳統C++艱深,晦澀的語法語義的現代改良。JAVA所帶來的巨大影響和大家對它的廣泛接受已經由工作於這種語言和平臺之上的程式設計師數量明顯的說明了(估計世界範圍內共有兩百五十萬程式設計師使用JAVA)。由這種語言寫成的應用程式的數量是令人驚訝的並已經滲透了每一個級別的計算,包括無線計算和行動電話(比如日本發明的JAVA電話)。C#能夠在使用者領域獲得這樣的禮遇嗎?我們必須等待並觀望,就象已經由SSI公司的CEO和主席KALPATHI S. SURESH指出來的那樣:"我發現所有這些都是漸進的。如果C#不存在,我們總能回到JAVA或C和C++。這些都不完全是新技術,它們在更大的意義上來說只是大公司製造的市場噱頭。我們必須給他們時間安頓下來看看這些是不是真的對IT工業有什麼影響。"

5.10 第四代語言(4GL)

目前,程式設計語言及程式設計環境正向面嚮物件語言及視覺化程式設計環境方向發展,出現了許多第四代語言及其開發工具。如:微軟公司(Microsoft)開發的Visual系列(VC++、VB、FoxPro)程式設計工具及Power Builder等。關於第四代語言,主要特徵是 : 只需要告訴計算機需要做什麼, 而如何做,不需要告訴計算機,這是與之前語言的主要區別 。由於近代軟體工程實踐所提出的大部分技術和方法並未受到普遍的歡迎和採用,軟體供求矛盾進一步惡化,軟體的開發成本日益增長,導致了所謂“新軟體危機”。這既暴露了傳統開發模型的不足,又說明了單純以勞動力密集的形式來支援軟體生產,已不再適應社會資訊化的要求,必須尋求更高效、自動化程度更高的軟體開發工具來支援軟體生產。4GL就是在這種背景下應運而生並發展壯大的。這一類語言由於具有“面向問題”、“非過程化程度高”等特點,可以成數量級地提高軟體生產率,縮短軟體開發週期,因此贏得了很多使用者。4GL以資料庫管理系統所提供的功能為核心,進一步構造了開發高層軟體系統的開發環境.它提供了功能強大的非過程化問題定義手段,使用者只需告知系統做什麼,而無需說明怎麼做,因此可大大提高軟體生產率。4GL基本上應該是面向問題的,即只需告知計算機“做什麼”,而不必告知計算機“怎麼做”。當然4GL為了適應複雜的應用,而這些應用是無法“非過程化”的,就允許保留過程化的語言成分,但非過程化應是4GL的主要特色。目前4GL主要面向基於資料庫應用的領域,不宜於科學計算、高速的實時系統和系統軟體開發。4GL雖然功能強大,但在其整體能力上卻與3GL有一定的差距。這一方面是語言抽象級別提高以後不可避免地帶來的(正如高階語言不能做某些組合語言做的事情);另一方面是人為帶來的,許多4GL只面向專項應用。有的4GL為了提高對問題的表達能力,提供了同3GL的介面,以彌補其能力上的不足。如Oracle提供了可將SQL語句嵌入C程式中的工具PRO*C。隨著Internet為代表的網路技術的廣泛普及,4GL又有了新的活動空間。出現類似於Java,但比Java抽象級更高的4GL不僅是可能的,而且是完全必要的。4GL將進一步與人工智慧相結合。目前4GL主流產品基本上與人工智慧技術無關。隨著4GL非過程化程度和語言抽象級的不斷提高,將出現功能級的4GL(目前的4GL流行產品還處於實現級),必然要求人工智慧技術的支援才能很好地實現,使4GL與人工智慧廣泛結合。(小資料:“真正的程式設計師用c,聰明的程式設計師用Delphi”,這句話是對Delphi最經典、最實在的描述。Delphi被稱為第四代程式語言,它具有簡單、高效、功能強大的特點。和VC相比,Delphi更簡單、更易於掌握,而在功能上卻絲毫不遜色;和VB (vb是Visual Basic的簡稱,是由美國微軟公司於1991年開發的一種視覺化的、面向物件和採用事件驅動方式的結構化高階程式設計語言) 相比,Delphi則功能更強大、更實用。可以說Delphi同時兼備了VC功能強大和VB簡單易學的特點。它一直是程式設計師至愛的程式設計工具。)

5.11 第五代語言

第五代語言就是自然語言又被稱為知識庫語言或人工智慧語言,人工智慧語言主要有LISP、Prolog、Smalltalk、C++。目標是最接近日常生活所用語言的程式語言。目前並沒有真正意義上的第五代語言,LISP和PROLOG號稱第五代語言,其實還遠遠不能達到自然語言的要求。人們可能會問,用人工智慧語言解決問題與傳統的方法有什麼區別呢?傳統方法通常把問題的全部知識以各種的模型表達在固定程式中,問題的求解完全在程式制導下按著預先安排好的步驟一步一步(逐條)執行。解決問題的思路與馮.諾依曼式計算機結構相吻合。當前大型資料庫法、數學模型法、統計方法等都是嚴格結構化的方法。對於人工智慧技術要解決的問題,往往無法把全部知識都體現在固定的程式中。通常需要建立一個知識庫(包含事實和推理規則),程式根據環境和所給的輸入資訊以及所要解決的問題來決定自己的行動,所以它是在環境模式的制導下的推理過程。這種方法有極大的靈活性、對話能力、有自我解釋能力和學習能力。這種方法對解決一些條件和目標不大明確或不完備,(即不能很好地形式化,不好描述)的非結構化問題比傳統方法好,它通常採用啟發式、試探法策略來解決問題。Lisp 語言最早是在 20 世紀 50 年代末由麻省理工學院(MIT)為研究人工智慧而開發的。約翰麥卡錫於1960年發表了一篇非凡的論文,他在這篇論文中對程式設計的貢獻有如歐幾里德對幾何的貢獻. 他向我們展示了,在只給定幾個簡單的操作符和一個表示函式的記號的基礎上, 如何構造出一個完整的程式語言. 麥卡錫稱這種語言為Lisp, 意為List Processing, 因為他的主要思想之一是用一種簡單的資料結構表(list)來代表程式碼和資料。值得注意的是,麥卡錫所作的發現,不僅是計算機史上劃時代的大事, 而且是一種在我們這個時代程式設計越來越趨向的模式.我認為目前為止只有兩種真正乾淨利落, 始終如一的程式設計模式:C語言模式和Lisp語言模式.此二者就象兩座高地, 在它們中間是尤如沼澤的低地.隨著計算機變得越來越強大,新開發的語言一直在堅定地趨向於Lisp模式. 二十年來,開發新程式語言的一個流行的祕訣是,取C語言的計算模式,逐漸地往上加Lisp模式的特性,例如執行時型別和無用單元收集。Prolog語言是為處理人工智慧中也是大量出現的邏輯推理問題(首先是為解決自然語言理解問題)而設計的。一般來說,LISP可以稱為人工智慧的組合語言, Prolog是人工智慧更高階的語言。近年來出現了具有人工智慧特色面向物件程式設計,稱為面向主體(Agent,亦稱活體)程式設計。往一個物件中增加更多的智慧,使它能根據環境的變化進行推理並規劃自己的行為,就得到主體(Agent)。面向主體的程式設計語言也已經有了一些,如OZ等(小資料第五代計算機:上個世紀五十年代中期,科學家發明了第一代真空管計算機,緊接著在五十年代末期,科學家們發明了第二代電晶體計算機,在六十年代中期又發明了第三代積體電路計算機,六十年代末期有了第四代的大規模積體電路計算機,短短的十來年,計算機硬體的發展就發展了四代,從真空管發展成了大規模積體電路。但是在後來的時間內,第五代計算機卻遲遲未能出現,即使到現在,三四十年過去了,我們也沒能見到它的影子。什麼是第五代計算機?第五代計算機可以說就是我們前面介紹過的人工智慧機,或者機器人。它能理解人的自然語言,使用它的人不需要編寫程式,不需要敲打鍵盤或移動滑鼠來指揮它,靠講話就能對計算機下達命令,命令它各種工作。它可能是具有淵博知識的專家,它可能成為人們從任何工作的助手和參謀。它還可能"思考",幫助人進行推理、判斷,具有邏輯思維能力。它如果安裝在機器人身上,就成為名副其實的機器人。但是,第五代計算機還是沒能出現,為什麼?因為它在處理人的自然語言的問題上出現了困難,它如何理解人的語言,如何自己說出人的語言(絕對不是錄音),在這些問題上,計算機學家一時手足無措。)

6 尾聲

80年代初開始,在軟體設計思想上,又產生了一次革命,其成果就是面向物件的程式設計。在此之前的高階語言,幾乎都是面向過程的,程式的執行是流水線似的,在一個模組被執行完成前,人們不能幹別的事,也無法動態地改變程式的執行方向。這和人們日常處理事物的方式是不一致的,對人而言是希望發生一件事就處理一件事,也就是說,不能面向過程,而應是面向具體的應用功能,也就是物件(Object)。高階語言的下一個發展目標是面向應用,也就是說:只需要告訴程式你要幹什麼,程式就能自動生成演算法,自動進行處理,這就是非過程化的程式語言。另外,在巴塞羅那舉行的Server Side's Java專題討論會上,Martin Fowler和Neal Ford做了一場展示面向語言程式設計的重要報告。Fowler曾撰文將面向語言程式設計定義為“圍繞一組領域特定語言來構建軟體的程式設計風格”。Fowler和Ford又進一步發展了其中的一些想法,並提出了“超越面向物件程式設計的革命性進步”的可能性。按照Martin Fowler的說法,面向物件的領域建模讓我們得以“彙集詞彙”,但語法——將詞彙組合起來的方法——卻是缺失的;DSL(領域特定語言)補足了語法的方面。因此面向語言程式設計引導我們“從思考詞彙,即物件,走向一種結合了詞彙和語法的語言觀念。” 微軟的Jeffrey 認為,未來程式語言的發展將沿著C#語言的方向,更加自動化,智慧化。程式語言最初的目的是為了讓人可以控制機器,從機器語言、組合語言直到現在的高階語言和執行在虛擬機器上具有更多面向物件和動態特性的語言,程式語言最初的目的一直沒有改變,只是我們現在可以利用高階語言更加方便、輕鬆的開發我們的應用來控制機器。因此,未來的程式語言將會讓開發人員更輕鬆的控制機器,高度的自動化和智慧化將是未來程式語言發展的方向。走向能讓機器人智慧化的程式語言的路還很漫長,但它的趨勢已不言而喻,讓我們相約22世紀,等待那屬於機器人的時代。(小資料:中國計算機應用的發展在經過作業系統漢化顯示環境,中文輸入法的兩次較大跨越後,正在經歷一個重要的歷史時期:中文化程式設計已成為當務之急。好在易語言已經擔當起領頭羊的重任。)