高階語言

作品

書籍

課程

程式集

小說集

論文集

散文集

影片集

編輯雜誌

程式人

電子書

JavaScript

計算語言學

微積分

Blender 動畫

C# 語言

系統程式

高等 C 語言

Java

Android

Verilog

Wikidot

R 統計軟體

機率統計

計算機數學

組合語言

人工智慧

開放原始碼

網路資源運用

計算機結構

相關訊息

常用工具

友站連結

在家教育

RSS

最新修改

網頁列表

簡體版

English

簡介

為了說明常見的高階語言之間的關係,我們在圖 7.1當中列出了高階語言的發展歷史年表,以便讓讀者對現今的高階語言能有一個整體性的概念。讀者閱讀本節後續的語言歷史時也請參考此一年表,這有助於釐清高階語言之間的關係。

ProgrammingLanguageHistory.JPG

圖 7.1高階語言的歷史年表

Fortran 可以說是最早出現的程式語言,由John W. Backus在 1954 年於 IBM提出,目的是為了取代組合語言,用以提升程式設計師的生產力而設計的。然而,在當時,Backus 對語法的掌握尚未成熟,後來,Backus 又持續設計Algol 58 與 Algol 60語言,以探索高階語言的設計方式。Algol 的設計在當時具有相當大的影響力,啟發了後續許多語言的設計,像是 Pascal、PL/I、Smalltalk、C、C++ 等程序導向式語言都深受其影響。

1963 年,Peter Naur延續 Backus 的語法理論奠定了程式語言的語法基礎,後來,這個語法理論的表達方式就被稱為 Backus-Naur Form,簡稱 BNF。然而,BNF語法中有一個相當難處理的左遞迴的問題,於是,Pascal 的發明人 Niklaus Wirth 提出了一個可以消除大部分左遞迴的表達法,以處理這個問題,這個新的表達法就被稱為 Extended Backus-Naur Form,簡稱 EBNF。我們將在0節當中詳細說明如何以 BNF 描述程式語言的語法,以及如何用 EBNF 消除其中的左遞迴等主題。

BNF後來成為描述程式語法的有效工具,直到現在,我們仍然用 BNF 與 EBNF描述程式的語法。BNF 的描述方式與當時語言學界的泰斗 Norm Chomsky 於 1956 年所提出的生成語法 (Gererative Grammar) 的表示法相當類似,或許有受到生成語法的影響。然而,生成語法主要是用來描述自然語言,像是英文的語法,而 BNF 則主要用來描述程式語言,像是 Fortran、Algol 等程式的語法。

Fortran 與 Algol 的後繼者所形成的這個類語言,也被稱為命令式的 (imperative) 或程序式的 (procedural) 程式語言,甚至後來發展出一種以此類語言為主的系統分析方式,稱為結構化程式設計,這是一個以循序結構、條件判斷以及迴圈結構為主的程式設計方式。幾乎大部分的程式語言都屬於這一個族群,但是,仍有少數的例外。

除了 Algol 之外,Lisp (1958) 也是早期程式語言當中的佼佼者,其獨樹一格以遞迴為主的設計方式,讓 Lisp 這個語言看起來是如此的特別,對習慣使用程序導向語言的人而言,Lisp 有點像外星人的語言,但對許多人工智慧程式的設計者而言,則會感覺到如獲至寶。

ML (1973) 也是一個以遞迴為主的語言,然而其語法比起 Lisp 更為乾淨,Lisp常被初學者詬病的一點是有太多的括號,而且語法一律採用運算在前的形式,比較不容易閱讀與理解,這點在 ML 當中有相當大的改善,這也使得 ML 吸引了不少後續的語言設計者追隨,成為程式語言族群當中相當獨特的一支。

最獨樹一格的語言可以說非 Prolog 莫屬了,Prolog (1972) 語言採用邏輯推論的方式,只要描述基本的邏輯事實與規則,程式就會自動推導出結果,這個語言深受邏輯推論研究者的青睞,也經常被使用在自然語言處理的領域當中。

即便有這麼多不同類型的程式語言,程序式 (procedural) 的語言仍然是目前的主流語言,在這個族群當中,對產業實務造成最大影響的,那應該就是 C 語言了,C 語言在 1972 年由 Dennis Ritchie 等人於貝爾實驗室提出之後,逐漸擴大其影響力。1973 年,整個 Unix 作業系統被使用 C 語言重寫了一遍,這使得 Unix 作業系統得以擺脫組合語言的束縛,逐漸成為跨越各種 CPU 的可攜式開放系統。其他的作業系統設計者也逐漸發現使用 C 語言撰寫的好處,這個現象使得 C 語言逐漸成為作業系統設計者的標準語言,直到今日,C 語言仍然是作業系統設計者最常用的語言,這也是產業界為何如此喜愛 C 語言的原因之一。

1978 年,Brian Kernighan與 Dennis Ritchie 合著的 The C Programming Language,也就是被後來的 C 語言程式師稱為 K&R 的那本書,更奠定了 C 語言的龍頭地位。由於 C 語言的程式設計人員越來越多,後續的程式語言往往會模仿 C 語言的語法,以便讓這些程式人員能快速的熟悉新的程式語言,這點在C++, C#, Obj-C, Java, JavaScript, Perl以及 PHP等語言當中,都可以清楚的看到類似 C 語言的語法。

C++ (1983) 是與 C 語言相容度極高的一個語言,可以說是 C 語言的物件導向版,物件導向的概念乃是從 Smalltalk 這個語言的設計當中擷取出來的,由於物件導向在程式設計上可以補強原先結構或程式設計上的弱點,讓資料與程式合併成為一種稱為物件的結構,這樣的結構特別適合用在圖形導向的視覺化界面上。因此,在 1980 年代後期是視窗介面逐漸成為主流之後,新一代的語言無不企圖納入物件導向的設計方式,C++ 就是企圖將 C 語言物件導向化的一個廣為使用的語言。

然而,企圖將 C 語言物件導向化的,不是只有 C++ 語言。Obj-C、Java 與 C# 都企圖將 C 語言物件導向化。其中,Java (1990) 在網路風潮時,由於昇陽 (sun) 公司的強力行銷與在瀏覽器上執行的可行性,吸引了許多著重網路前景的公司與程式設計師。C# (2002) 則是微軟 (Microsoft) 公司仿造 Java 的理念,然後再加以改良的新型語言,也是微軟近來力推的主要程式語言。

Java 與 C# 非常類似,兩者都是在虛擬機器上執行的,此種虛擬機器稱為堆疊式虛擬機 (Stack Machine)。Java 通常在昇陽的 Java Virtual Machine (JVM) 上執行,C# 則通常在微軟的 .NET 平台上執行。雖然,語言與平台並不一定要綁在一起,但是在商業公司的力挺之下,通常這些語言與平台會緊密搭配,因為 Java 與 C# 都是由商業公司所主導的語言。

即便如此,Java 仍然可以在其他平台上執行,像是 GNU 的 gcj 編譯器,就可以將 Java 程式編譯成執行檔。另外,像Google 手機上則有一款專屬的虛擬機器,名稱是 Dalvik Virtual Machine (DVM),其設計方法採用暫存器式的虛擬機 (Register Machine),這與 JVM 的堆疊式虛擬機器相當不同,但也同樣採用 Java 語言,作為平台的指定語言。

Objective-C (簡稱 Obj-C) (1986) 是蘋果公司的 Mac OS X,iPhone 等裝置上的主要程式語言,當然,也可以在其他平台上使用。然而,程式語言之間的競爭往往與系統平台有關,這些大公司之間誰也不願意使用對方所主導的語言,在可見的未來,或許這樣的狀況會一直持續下去也說不定。

另外,在網際網路技術與開放原始碼運動的影響之下,近來出現了許多影響力強大的語言,像是 Perl (1987)、Python (1991)、Ruby (1995)、PHP (1995) 等,這些幾乎都是直譯式的動態語言,由於直譯式的語言比編譯式語言更有彈性,往往可以用更少的程式碼達成同樣的功能,甚至創造出新的語法典範,因此近來廣受高階程式設計人員的喜愛,成為最活躍的一群程式語言。

Perl 語言的設計理念是隨性的,只要有需要隨時都可以加入新的語法。Python 語言則採用了相反的方式,其創造者的名言『作一件事情只允許一種方式』,使得 Python較不容易出錯。Ruby 則致力於讓程式設計師能快樂的寫程式,PHP 則幾乎都是在網站設計時,作為內嵌在apache伺服器當中的語言,在網站設計上的常被與微軟的 ASP 相提並論。

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License