發展歷程
前期
二十世紀四十年代當計算機剛剛問世的時候,程式設計師必須手動控制計算機。當時的計算機十分昂貴,唯一想到利用程式設計語言來解決問題的人是德國工程師楚澤(konradzuse)。不久後,計算機的價格大幅度下跌,而電腦程式也越來越複雜。也就是說,開發時間已經遠比運行時間來得寶貴。於是,新的集成、可視的開發環境越來越流行。它們減少了所付出的時間、金錢(以及腦細胞)。只要輕敲幾個鍵,一整段代碼就可以使用了。這也得益於可以重用的程式代碼庫。隨著c,pascal,fortran,等結構化高級語言的誕生,使程式設計師可以離開機器層次,在更抽象的層次上表達意圖。由此誕生的三種重要控制結構,以及一些基本數據類型都能夠很好的開始讓程式設計師以接近問題本質的方式去思考和描述問題。隨著程式規模的不斷擴大,在60年代末期出現了軟體危機,在當時的程式設計模型中都無法克服錯誤隨著代碼的擴大而級數般的擴大,以至到了無法控制的地步,這個時候就出現了一種新的思考程式設計方式和程式設計模型-----面向對象程式設計,由此也誕生了一批支持此技術的程式設計語言,比如eiffel,c++,java,這些語言都以新的觀點去看待問題,即問題就是由各種不同屬性的對象以及對象之間的訊息傳遞構成。
面向對象語言由此必須支持新的
程式設計技術,例如:
數據隱藏,數據抽象,用戶定義類型,繼承,
多態等等。
現狀
如今通用的程式語言有兩種形式:彙編語言和高級語言。彙編語言和機器語言實質是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的標識符,容易識別和記憶。源程式經彙編生成的執行檔不僅比較小,而且執行速度很快。
高級語言是絕大多數編程者的選擇。和彙編語言相比,它不但將許多相關的機器指令合成為單條指令,並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆疊、暫存器等,這樣就大大簡化了程式中的指令。同時,由於省略了很多細節,編程者也就不需要有太多的專業知識。
高級語言主要是相對於低級語言而言,它並不是特指某一種具體的語言,而是包括了很多程式語言,如流行的vb、vc、foxpro、delphi等,這些語言的語法、命令格式都各不相同。
高級語言所編制的程式不能直接被計算機識別,必須經過轉換才能被執行,按轉換方式可將它們分為兩類:解釋類和編譯類。
趨勢
面向對象程式設計以及數據抽象在現代程式設計思想中占有很重要的地位,未來語言的發展將不在是一種單純的語言標準,將會以一種完全面向對象,更易表達現實世界,更易為人編寫,其使用將不再只是專業的編程人員,人們完全可以用訂製真實生活中一項工作流程的簡單方式來完成編程。
簡單性:提供最基本的方法來完成指定的任務,只需理解一些基本的概念,就可以用它編寫出適合於各種情況的應用程式。
面向對象:提供簡單的類機制以及動態的接口模型。對象中封裝狀態變數以及相應的方法,實現了模組化和信息隱藏;提供了一類對象的原型,並且通過繼承機制,子類可以使用父類所提供的方法,實現了代碼的復用。
安全性:用於網路、分布環境下有安全機制保證。
平台無關性:與平台無關的特性使程式可以方便地被移植到網路上的不同機器、不同平台。
計算機語言之父
“計算機語言之父”尼蓋德幫助網際網路奠下了基礎,為計算機業做出了巨大貢獻。
尼蓋德是
奧斯陸大學的教授,因為發展了simula程式語言,為ms-dos和網際網路打下了基礎而享譽國際。克里斯汀·尼蓋德於1926年在奧斯陸出生,1956年畢業於奧斯陸大學並取得數學碩士學位,此後致力於計算機計算與編程研究。
1961年~1967年,尼蓋德在
挪威計算機中心工作,參與開發了面向對象的程式語言。因為表現出色,2001年,尼蓋德和同事奧爾·約安·達爾獲得了2001年a.m.圖靈機獎及其它多個獎項。當時為尼蓋德頒獎的計算機協會認為他們的工作為java,c++等程式語言在個人電腦和家庭娛樂裝置的廣泛套用掃清了道路,“他們的工作使軟體系統的設計和編程發生了基本改變,可循環使用的、可靠的、可升級的軟體也因此得以面世。”
尼蓋德因其卓越的貢獻,而被譽為“計算機語言之父”,其對計算機語言發展趨勢的掌握和認識,以及投身於計算機語言事業發展的精神都將激勵我們向著計算機語言無比燦爛的明天前進。
分類
計算機語言的種類非常的多,總的來說可以分成機器語言,
彙編語言,高級語言三大類。
電腦每做的一次動作,一個步驟,都是按照已經用計算機語言編好的程式來執行,程式是計算機要執行的指令的集合,而程式全部都是用我們所掌握的語言來編寫的。所以人們要控制計算機一定要通過計算機語言向計算機發出命令。
(1)解釋類:執行方式類似於我們日常生活中的“同聲翻譯”,應用程式
原始碼一邊由相應語言的
解釋器“翻譯”成目標代碼(
機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的執行檔,應用程式不能脫離其解釋器,但這種方式比較靈活,可以動態地調整、修改應用程式。
(2)編譯類:編譯是指在套用源程式執行之前,就將程式原始碼“翻譯”成目標代碼(機器語言),因此其目標程式可以脫離其語言環境獨立執行,使用比較方便、效率較高。但應用程式一旦需要修改,必須先修改原始碼,再重新編譯生成新的目標檔案(*.OBJ)才能執行,只有目標檔案而沒有原始碼,修改很不方便。如今大多數的程式語言都是編譯型的,例如VisualBasic、VisualC++、VisualFoxpro、Delphi等。
低級語言
機器語言、彙編語言和符號語言。
彙編語言源程式必須經過彙編,生成目標檔案,然後執行。
專用語言
CAD系統中的繪圖語言和DBMS的資料庫查詢語言。
機器語言
機器語言是指一台計算機全部的指令集合
電子計算機所使用的是由"0"和"1"組成的二進制數,二進制是計算機的語言的基礎。計算機發明之初,人們只能降貴紆尊,用計算機的語言去命令計算機幹這乾那,一句話,就是寫出一串串由"0"和"1"組成的指令序列交由計算機執行,這種計算機能夠認識的語言,就是機器語言。使用機器語言是十分痛苦的,特別是在程式有錯需要修改時,更是如此。
因此程式就是一個個的二進制檔案。一條機器語言成為一條指令。指令是不可分割的最小功能單元。而且,由於每台計算機的
指令系統往往各不相同,所以,在一台計算機上執行的程式,要想在另一台計算機上執行,必須另編程式,造成了重複工作。但由於使用的是針對特定型號計算機的語言,故而運算效率是所有語言中最高的。機器語言,是第一代計算機語言。
彙編語言
為了減輕使用機器語言編程的痛苦,人們進行了一種有益的改進:用一些簡潔的英文字母、符號串來替代一個特定的指令的二進制串,比如,用"ADD"代表加法,"MOV"代表數據傳遞等等,這樣一來,人們很容易讀懂並理解程式在乾什麼,糾錯及維護都變得方便了,這種
程式設計語言就稱為彙編語言,即第二代計算機語言。然而計算機是不認識這些符號的,這就需要一個專門的程式,專門負責將這些符號翻譯成二進制數的機器語言,這種
翻譯程式被稱為彙編程式。
彙編語言同樣十分依賴於機器硬體,移植性不好,但效率仍十分高,針對計算機特定硬體而編制的彙編語言程式,能準確發揮計算機硬體的功能和特長,程式精煉而質量高,所以至今仍是一種常用而強有力的軟體開發工具。
彙編語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的
標識符,更容易識別和記憶。它同樣需要編程者將每一步具體的操作用命令的形式寫出來。
彙編程式的每一句指令只能對應實際操作過程中的一個很細微的動作,例如移動、自增,因此彙編源程式一般比較冗長、複雜、容易出錯,而且使用彙編語言編程需要有更多的計算機專業知識,但彙編語言的優點也是顯而易見的,用彙編語言所能完成的操作不是一般高級語言所能實現的,而且源程式經彙編生成的
執行檔不僅比較小,而且執行速度很快。
高級語言
高級語言有:BASIC(True basic、Qbasic、Virtual Basic)、C、C++、PASCAL、FORTRAN、智慧型化語言(LISP、Prolog、
CLIPS、OpenCyc、Fazzy)、動態語言(Python、PHP、Ruby、Lua)等等。- 高級語言源程式可以用解釋、編譯兩種方式執行。通常用後一種。
高級語言是絕大多數編程者的選擇。和彙編語言相比,它不但將許多相關的機器指令合成為單條指令並且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆疊、暫存器等,這樣就大大簡化了程式中的指令。由於省略了很多細節,所以編程者也不需要具備太多的專業知識。 高級語言主要是相對於彙編語言而言,它並不是特指某一種具體的語言,而是包括了很多程式語言,流行的VB、VC、FoxPro、Delphi等,這些語言的語法、命令格式都各不相同。
高級語言的發展
特別要提到的:在C語言誕生以前,系統軟體主要是用彙編語言編寫的。由於彙編語言程式依賴於計算機硬體,其可讀性和可移植性都很差;但一般的高級語言又難以實現對計算機硬體的直接操作(這正是彙編語言的優勢),於是人們盼望有一種兼有彙編語言和高級語言特性的新語言——C語言。
高級語言的發展也經歷了從早期語言到
結構化程式設計語言,從面向過程到非過程化程式語言的過程。相應地,軟體的開發也由最初的個體手工作坊式的封閉式生產,發展為產業化、流水線式的工業化生產。
高級語言的下一個發展目標是面向套用,也就是說:只需要告訴程式你要乾什麼,程式就能自動生成算法,自動進行處理,這就是非過程化的程式語言。
常見語言
C語言
C語言是Dennis Ritchie在七十年代創建的,它功能更強大且與ALGOL保持更連續的繼承性,而ALGOL則是COBOL和FORTRAN的結構化繼承者。C語言被設計成一個比它的前輩更精巧、更簡單的版本,它適於編寫系統級的程式,比如作業系統。在此之前,作業系統是使用彙編語言編寫的,而且不可移植。C語言是第一個使得系統級代碼移植成為可能的程式語言。
優點:有益於編寫小而快的程式。很容易與彙編語言結合。具有很高的標準化,因此其他平台上的各版本非常相似。
缺點:不容易支持
面向對象技術。語法有時會非常難以理解,並造成濫用。
移植性:C語言的核心以及ANSI函式調用都具有移植性,但僅限於流程控制、
記憶體管理和簡單的檔案處理。其他的東西都跟平台有關。比如說,為Windows和Mac開發可移植的程式,用戶界面部分就需要用到與系統相關的函式調用。這一般意味著你必須寫兩次用戶界面代碼,不過還好有一些庫可以減輕工作量。
C++
C++語言是具有面向對象特性的C語言的繼承者。
面向對象編程,或稱OOP是結構化編程的下一步。OO程式由對象組成,其中的對象是數據和函式離散集合。有許多可用的對象庫存在,這使得編程簡單得只需要將一些程式“建築材料”堆在一起(至少理論上是這樣)。比如說,有很多的GUI和資料庫的庫實現為對象的集合。
優點:組織大型程式時比C語言好得多。很好的支持面向對象機制。通用數據結構,如鍊表和可增長的陣列組成的庫減輕了由於處理低層細節的負擔。
缺點:非常大而複雜。與C語言一樣存在語法濫用問題。比C慢。大多數
編譯器沒有把整個語言正確的實現。
移植性:比C語言好多了,但依然不是很樂觀。因為它具有與C語言相同的缺點,大多數可移植性用戶界面庫都使用C++對象實現。
彙編語言
彙編是第一個計算機語言。彙編語言實際上是你
計算機處理器實際運行的指令的命令形式表示法。這意味著你將與處理器的底層打交道,比如暫存器和堆疊。如果你要找的是類英語且有相關的自我說明的語言,這不是你想要的。 特別注意:語言的名字叫“彙編”。把彙編語言翻譯成真實的機器碼的工具叫“彙編程式”。把這門語言叫做“彙編程式”這種用詞不當相當普遍,因此,請從這門語言的正確稱呼作為起點出發。
優點:最小、最快的語言。彙編高手能編寫出比任何其他語言能實現的快得多的程式。你將是利用處理器最新功能的第一人,因為你能直接使用它們。
缺點:難學、語法晦澀、堅持效率,造成大量額外代碼—不適於心臟虛弱者。
移植性:接近零。因為這門語言是為一種單獨的處理器設計的,根本沒移植性可言。如果使用了某個特殊處理器的擴展功能,你的代碼甚至無法移植到其他同類型的處理器上(比如,AMD的3DNow指令是無法移植到其它奔騰系列的處理器上的)。
Pascal語言
Pascal語言是由NicolasWirth在七十年代早期設計的,因為他對於FORTRAN和COBOL沒有強制訓練學生的結構化編程感到很失望,“空心粉式代碼”變成了規範,而當時的語言又不反對它。Pascal被設計來強行使用結構化編程。最初的Pascal被嚴格設計成教學之用,最終,大量的擁護者促使它闖入了商業編程中。當Borland發布IBMPC上的TurboPascal時,Pascal輝煌一時。集成的編輯器,閃電般的編譯器加上低廉的價格使之變得不可抵抗,Pascal編程了為
MS-DOS編寫小程式的首選語言。然而時日不久,C編譯器變得更快,並具有優秀的內置編輯器和調試器。Pascal在1990年Windows開始流行時走到了盡頭,Borland放棄了Pascal而把目光轉向了為Windows編寫程式的C++。TurboPascal很快被人遺忘。
基本上,Pascal比C簡單。雖然語法類似,它缺乏很多C有的簡潔操作符。這既是好事又是壞事。雖然很難寫出難以理解的“聰明”代碼,它同時也使得一些低級操作,如位操作變得困難起來。
優點:易學、平台相關的運行(Dephi)非常好。
缺點:“世界潮流”面向對象的Pascal繼承者(Modula、Oberon)尚未成功。語言標準不被編譯器開發者認同。
.移植性:很差。語言的功能由於平台的轉變而轉變,沒有移植性工具包來處理平台相關的功能。
VisualBasic
優點:整潔的編輯環境。易學、即時編譯導致簡單、迅速的原型。大量可用的
外掛程式。雖然有第三方的DirectX外掛程式,DirectX7已準備提供VisualBasic的支持。
缺點:程式很大,而且運行時需要幾個巨大的運行時動態連線庫。雖然表單型和對話框型的程式很容易完成,要編寫好的圖形程式卻比較難。調用Windows的API程式非常笨拙,因為VB的數據結構沒能很好的映射到C中。有OO功能,但卻不是完全的面向對象。
移植性:非常差。因為VisualBasic是微軟的產品,你自然就被局限在他們實現它的平台上。
Java
Java是由Sun最初設計用於嵌入程式的可移植性“小C++”。在網頁上運行小程式的想法著實吸引了不少人的目光,於是,這門語言迅速崛起。事實證明,Java不僅僅適於在網頁上內嵌動畫—它是一門極好的完全的軟體編程的小語言。“
虛擬機”機制、垃圾回收以及沒有指針等使它很容易實現不易崩潰且不會泄漏資源的可靠程式。雖然不是C++的正式續篇,Java從C++中借用了大量的語法。它丟棄了很多C++的複雜功能,從而形成一門緊湊而易學的語言。不像C++,Java強制面向對象編程,要在Java里寫非面向對象的程式就像要在Pascal里寫“空心粉式代碼”一樣困難。
優點:二進制碼可移植到其他平台。程式可以在網頁中運行。內含的類庫非常標準且極其健壯。自動分配合垃圾回收避免程式中資源泄漏。網上數量巨大的代碼例程。
缺點:使用一個“虛擬機”來運行可移植的位元組碼而非本地機器碼,程式將比真正編譯器慢。有很多技術(例如“即時”編譯器)很大的提高了Java的速度,不過速度永遠比不過機器碼方案。早期的功能,如AWT沒經過慎重考慮,雖然被正式廢除,但為了保持向後兼容不得不保留。越高級的技術,造成處理低級的機器功能越困難,Sun為這門語言增加新的“受祝福”功能的速度實在太慢。
移植性:最好的,但仍未達到它本應達到的水平。低級代碼具有非常高的可移植性,但是,很多UI及新功能在某些平台上不穩定。
創作工具
多數創作工具有點像VisualBasic,只是它們工作在更高的層次上。大多數
工具使用一些拖拉式的流程圖來模擬流程控制。很多內置解釋的程式語言,但是這些語言都無法像上面所說的單獨的語言那樣健壯。
優點:快速原型—如果你的遊戲符合工具製作的主旨,你或許能使你的遊戲跑得比使用其他語言快。在很多情況下,你可以創造一個不需要任何代碼的簡單遊戲。使用
外掛程式程式,如Shockware及IconAuthor播放器,你可以在網頁上發布很多創作工具生成的程式。
缺點:專利權,至於將增加什麼功能,你將受到工具製造者的支配。你必須考慮這些工具是否能滿足你遊戲的需要,因為有很多事情是那些創作工具無法完成的。某些工具會產生臃腫得可怕的程式。
移植性:因為創作工具是具有專利權的,你的移植性以他們提供的功能息息相關。有些系統,如Director可以在幾種平台上創作和運行,有些工具則在某一平台上創作,在多種平台上運行,還有的是僅能在單一平台上創作和運行。
C#
C#是一種精確、簡單、類型安全、面向對象的語言。其是.Net的代表性語言。什麼是.Net呢?按照微軟總裁兼執行長Steve Ballmer把它定義為:.Net代表一個集合,一個環境,它可以作為平台支持下一代Internet的可程式結構。
C#的特點:
1.完全面向對象。
2.支持分散式。
3.自動管理記憶體機制。
4.安全性和可移植性。
5.指針的受限使用。
6.多執行緒。和Java類似,C#可以由一個主進程分出多個執行小系統的多執行緒。
C#是在Java流行起來後所誕生的一種新的程式開發語言。
特點
在沒有程式語言以前,計算機科學家們寫程式都是以開關電閘(即用二進制)來實現(表示)的,後來有了彙編,在後來有了C,直到今天有了C++、JAVA、VB、Delphi等等各種各樣的程式語言層出不窮。 可就在計算機語言不斷的演化過程中,每一種語言都有一些共性是不變的.。這些共性可概括為以下三點:
其一是:記憶體電位的設定.(置1或0)
其二是:條件判斷(if,else)該功能可通過邏輯門實現.
其三是:循環,也就是程式下一條指令地址可設定。