發展曆程
前期
二十世紀四十年代當計算機剛剛問世的時候,程序員必須手動控制計算機。當時的計算機十分昂貴,唯一想到利用程序設計語言來解決問題的人是德國工程師楚澤(konradzuse)。不久後,計算機的價格大幅度下跌,而計算機程序也越來越複雜。也就是說,開發時間已經遠比運行時間來得寶貴。于是,新的集成、可視的開發環境越來越流行。它們減少了所付出的時間、金錢(以及腦細胞)。隻要輕敲幾個鍵,一整段代碼就可以使用了。這也得益于可以重用的程序代碼庫。
随着C,Pascal,Fortran等結構化高級語言的誕生,使程序員可以離開機器層次,在更抽象的層次上表達意圖。由此誕生的三種重要控制結構,以及一些基本數據類型都能夠很好的開始讓程序員以接近問題本質的方式去思考和描述問題。
随着程序規模的不斷擴大,在60年代末期出現了軟件危機,在當時的程序設計模型中都無法克服錯誤随着代碼的擴大而級數般的擴大,以至到了無法控制的地步,這個時候就出現了一種新的思考程序設計方式和程序設計模型——面向對象程序設計,由此也誕生了一批支持此技術的程序設計語言,比如eiffel,c++,java,這些語言都以新的觀點去看待問題,即問題就是由各種不同屬性的對象以及對象之間的消息傳遞構成。面向對象語言由此必須支持新的程序設計技術,例如:數據隐藏,數據抽象,用戶定義類型,繼承,多态等等。
現代趨勢
面向對象程序設計以及數據抽象在現代程序設計思想中占有很重要的地位,未來語言的發展将不在是一種單純的語言标準,将會以一種完全面向對象,更易表達現實世界,更易為人編寫,其使用将不再隻是專業的編程人員,人們完全可以用訂制真實生活中一項工作流程的簡單方式來完成編程。
簡單性:提供最基本的方法來完成指定的任務,隻需理解一些基本的概念,就可以用它編寫出适合于各種情況的應用程序。
面向對象:提供簡單的類機制以及動态的接口模型。對象中封裝狀态變量以及相應的方法,實現了模塊化和信息隐藏;提供了一類對象的原型,并且通過繼承機制,子類可以使用父類所提供的方法,實現了代碼的複用。
安全性:用于網絡、分布環境下有安全機制保證。
平台無關性:與平台無關的特性使程序可以方便地被移植到網絡上的不同機器、不同平台。
計算機語言之父
尼蓋德幫助因特網奠下了基礎,為計算機業做出了巨大貢獻。
尼蓋德是奧斯陸大學的教授,因為發展了simula編程語言,為ms-dos和因特網打下了基礎而享譽國際。克裡斯汀·尼蓋德于1926年在奧斯陸出生,1956年畢業于奧斯陸大學并取得數學碩士學位,此後緻力于計算機計算與編程研究。
1961年~1967年,尼蓋德在挪威計算機中心工作,參與開發了面向對象的編程語言。因為表現出色,2001年,尼蓋德和同事奧爾·約安·達爾獲得了2001年a.m.圖靈機獎及其它多個獎項。當時為尼蓋德頒獎的計算機協會認為他們的工作為java,c++等編程語言在個人電腦和家庭娛樂裝置的廣泛應用掃清了道路,“他們的工作使軟件系統的設計和編程發生了基本改變,可循環使用的、可靠的、可升級的軟件也因此得以面世。”
尼蓋德因其卓越的貢獻,而被譽為“計算機語言之父”,其對計算機語言發展趨勢的掌握和認識,以及投身于計算機語言事業發展的精神都将激勵我們向着計算機語言無比燦爛的明天前進。
分類
計算機語言的種類非常的多,總的來說可以分成機器語言,彙編語言,高級語言三大類。
機器語言
機器語言是指一台計算機全部的指令集合。
電子計算機所使用的是由"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)等等。-
高級語言源程序可以用解釋、編譯兩種方式執行,通常用後一種。
(1)解釋類:執行方式類似于我們日常生活中的“同聲翻譯”,應用程序源代碼一邊由相應語言的解釋器“翻譯”成目标代碼(機器語言),一邊執行,因此效率比較低,而且不能生成可獨立執行的可執行文件,應用程序不能脫離其解釋器,但這種方式比較靈活,可以動态地調整、修改應用程序。
(2)編譯類:編譯是指在應用源程序執行之前,就将程序源代碼“翻譯”成目标代碼(機器語言),因此其目标程序可以脫離其語言環境獨立執行,使用比較方便、效率較高。但應用程序一旦需要修改,必須先修改源代碼,再重新編譯生成新的目标文件(*.OBJ)才能執行,隻有目标文件而沒有源代碼,修改很不方便。如今大多數的編程語言都是編譯型的,例如VisualBasic、VisualC++、VisualFoxpro、Delphi等。
高級語言是絕大多數編程者的選擇。和彙編語言相比,它不但将許多相關的機器指令合成為單條指令并且去掉了與具體操作有關但與完成工作無關的細節,例如使用堆棧、寄存器等,這樣就大大簡化了程序中的指令。由于省略了很多細節,所以編程者也不需要具備太多的專業知識。高級語言主要是相對于彙編語言而言,它并不是特指某一種具體的語言,而是包括了很多編程語言,流行的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++對象實現。
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)該功能可通過邏輯門實現。
其三是:循環,也就是程序下一條指令地址可設置。



















