各種程序語言

簡介各種程式語言 注︰在程式語言前劃有☆號者,表示它有重大影響,但不代表它優良 適合編寫商業程序、對效能有所要求 編寫商業程序的程式語言,最基本的要求就是不是直譯的,令使用者不能看到源碼;第二就是有良好的性能、語法,適合編寫大程序而效率不會過慢。 ☆C/C++ 自從C發明了以後,它就取代了彙編語言在操作系統編程的領導地位。從性能上說,除了彙編語言,C語言是最接近機器的語言。各種操作系統的編程接口的默認語言都是C語言。因此,用C語言編程,可以最大限度發揮操作系統的能力。同時,由於絕大部分的商品軟件都是C或與C相容的C++實現的,都有C編程接口,可以說,沒有C不能實現的功能。 C++是C語言的加強版,C++增加了面向對象和其他有用的功能,但它的效能並沒有大減,編程更方便輕鬆;而C++亦支援大部分C的程式,令C++和C變得近乎不可分割,大部分的C編譯器也支援C++。假如要在學C或學C++選擇,學C++是明智的選擇。 在Unix-like的操作系統中,C具有很好的開放源代碼的條件,它有統一的編譯器gcc,有強大但比較難掌握的編程環境emaCs,有統一的API:posix和Linux接口。並且大部分編譯器和API是開放源代碼的。 在Unix-like上編寫圖形界面程序,有兩個選擇KDE和Gnome∶KDE更成熟,但它使用了不是開源的Qt函式庫;Gnome支持多語言和麪向對象的程序間的協同,有它的GUI工具GTK。 在Windows環境中,現在通常使用vC,但有一個缺點,Windows的升級換代太快,從dos環境到Windows31 ,從Windows31到Windows95,到Windows2000,到.NET。API常常變換,這樣,在Windows上的程序代碼的壽命會比較短。並且vC的編譯器和API太複雜,難於掌握,並非開放源代碼的工具。其他選擇有從Unix-like系統移植過來的djgpp、mingw。 由於C/C++具有現代語言的大量特徵,現在常常代替Pascal作爲教學的編程語言。 實際上,如果不深入學習,C也是一種很簡單的語言。不學Basic,直接學C完全沒有問題。 和其他語言相比,雖然C和C++都已經定下了其標準,但編譯器、函式庫、操作系統API五花八門,有些又未必全面支援最新的標準,造成學習的難度大、統一性差的問題。 ☆Visual Basic(簡稱VB) VB是快速的界面生成語言,是快速的數據庫程序開發語言。vba是vb的應用版,嵌入在MS office中。編寫MS office上的程序很好用。缺點是只能在Windows平臺運作。 Delphi/Kylix 和vb一樣是快速開發環境,但性能更好,功能更強大,亦可以用於Linux平臺。語法建基於Pascal,是面向對象的程式語言。 ☆Java 相對C,Java作爲現代語言,具有非常豐富的語法特徵,如模塊和類,不像C隨操作系統和編譯器的不同有極大差異,Java是一個公司的產品,具有唯一的API,因此,Java程序員沒有語言隔閡。有人認爲Java根本是一個平臺,並非真正的跨平臺。 相對跨平臺的語言來說,Java具有最好的圖形界面編程API。 Java所有的API都是類庫,相對C的函數來說,是非常大的進步。Java具有現代語言幾乎所有的特徵。 Java最大的缺點,是它被一所公司控制着。 Ada Ada語言和C/C++是一種編譯語言,他們最後編譯出的執行文件的機器碼都很小。因此現在衆多的語言只有C/C++能夠與Ada相提並論。 和C/C++相比,Ada的特點是可靠、可移植。 他的可靠是通過比其他語言都強大的類型,每種類型還都可以象數據庫字段一樣進行強類型、範圍的檢查。以此來保證在編譯中就發現錯誤。 它有強大的標準化組織,嚴格認證Ada編譯器的標準。有多線程能力。 適於編寫實時程序。 但和C/C++相比太複雜、羅嗦,因此註定不能流行。 Scripting Language 如果不在乎商業機密,應用目標也不是太苛刻的話,編寫大型跨平臺程序的最佳就是腳本語言。有些腳本語言具有全面的庫的支持,有和C語言的方便的交互能力。他們和Java相比,編程效率更高。同時因爲沒有編譯,程序更方便修改。因爲他們的庫都是C實現的,也比Java有更高性能。同時,他們都是開源的,都是對商業應用友好的,也是簡單的、方便定製的。也是不滿意Java的不可控制的越來越龐大的庫的又一個選擇。 Basic 現在最着名的Basic版本是vb,Basic是簡單的初級語言。Basic的醜陋在於參數還是默認傳地址。太危險。 ☆Perl Perl的最大特點是有強大的字符串模式匹配,是最好的文本文件的讀取和生成語言,亦是Unix系統管理者的好幫手,因爲它吸收了awk、sed、grep等工具的功能。Perl具有很大的自由性,象英語一樣有很大的隨意性,在Perl裏基本上無Type Error這回事,它的”Type”就是純量和串行。Perl有一個強大的數據庫接口和其他各種接口。Perl有大量的程序庫(CPAN)。 因爲Perl較早出現,某些功能是後期加上去,顯得不協調,例如它的面向對象功能就被視爲不是真正的面向對象。Perl有個着名的缺點是難讀懂,維護困難,被認爲不適合編寫大程序,只適合一千行以下的程式,也有個著名的優點是簡練。 Python 首先,Python是和Basic一樣面向初學者的語言,和英語一樣容易懂。 Python有和Perl類似的簡單性,但沒有模式匹配。 Python有和Lisp相似的地方,它有將字符串作爲程序執行的eval函數,可以對一個對象的所有數據進行保存,可以把函數作爲參數傳給另一個函數。 Python具有非常好的擴充性,Python程序可以和C程序,以及Java程序很好地結合。 Tcl Tcl具有最簡單的語法,最好的和其他程序交互的能力,有編寫圖形界面程序的Tk。基本上已經沒有個人用戶學習Tcl語言,但是中國一些大型的軟件公司至今一直使用該語言進行軟件測試工作,而且Tcl的工具包Tk也是很多Scripting Language的GUI工具。 Ruby Ruby是吸取了所有語言精華的語言。Ruby雖然是純面嚮對象語言,但可以”扮成”程序式的程式語言;它的文件主要都是日文和英文。 Ruby有 * Perl的正則表達式 * Python的語言的簡單性可讀性、最容易的擴展能力,強大的可移植性。 * PHP的嵌入功能和多種客戶端 * smalltalk的純面向對象語法和單繼承 * Lisp的無窮嵌套的語法,也就是函數式的語法。 * 用“塊”來實現更快捷的數據結構的處理。不知道是不是sCheme的宏功能。用塊能更清楚的實現Python的表處理功能。 * Java和Ada的線程編程 * Java的安全編程 不得不承認Ruby確實是個精彩的語言,它完全學會了Lisp的所有編程都是函數的思想,smalltalk的所有東西都是對象的思想,Perl的一個目的多種手段的方法,Python的簡單化的“最少驚喜”的原則,Java的多線程和安全控制的功能,Tcl的容易擴展的功能,PHP的嵌入功能和強大客戶端的功能,最方便的shell命令的調用。 Lua Lua是一個小巧強大的腳本語言。第一眼看到Lua的介紹,感覺它象Tcl的替代品,因爲它的主要目的是作爲腳本語言。但接下來就看到它不是象Tcl那樣是命令行式的函數語言,它和其它語言一樣有語句結構。它實現和C程序互動的方式和Python類似,具有和Python一樣的和C結合的能力。並且Lua全部是用ansi C實現的,可以實現完全的跨平臺。 然後,看到Lua的一個顯着的特點就是具有對象數據庫功能,可以實現變量的永恆存儲。這個特點讓人首先聯想到fish,fish的最重要的特點也是語言內含一個對象數據庫,不過fish有outline的可視界面,和數據庫瀏覽能力。但fish不是開源的,因此,如果需要一個非內存的變量存儲空間可以選擇Lua。這種對象數據庫都是不但能存儲數據,也能存儲操作數據的函數。實際Python也具有一個將整個內存存儲在一個磁盤文件的功能,另外,還有zope的zodb可以實現專業的永恆變量功能。另外,sCheme天然具有永恆存儲能力,它只要把表變量輸出到一個文件中就可以了。因爲sCheme是不分數據和程序的,因此可以實現將程序和數據同樣存儲在文件中。 Lua和Python相比規模比較小,因爲它是和C緊密結合的,可以完全使用各種C庫,就不需要有自己的庫。Lua給人的印象是小規模的Python。Lua也是動態數據類型,也有內存管理功能。只是Python自帶強大的庫,而Lua只攜帶一個小型的庫,具有字符串和數學計算能力,同時Lua標準攜帶一個對象數據庫。另外,可以把C庫隨時編譯到Lua中。Lua引以自豪的是它的速度很快。 Lua的語法比較簡單,它把數組、字典、結構等複雜的數據結構都統一爲表。另外,Lua具有正則表達式功能。 網頁編寫∶客戶端程序 JavaScript 編寫動態網頁的最佳工具,可以造到很多效果,亦是Mozilla擴充套件的語言。 VBScript VBScript是vb的腳本語言,可以產生服務器端和客戶端的動態網頁。客戶端的動態網頁暫時只有IE系列瀏覽器支援,所以VBScript相容性很低,不及JavaScript。 服務器端程序 PHP PHP是專門寫網頁程式的語言,它的語法和Perl極之接近。PHP可以嵌入HTML,更容易編寫服務器端程序。PHP天然和web服務器以及mysql數據庫相結合。PHP可以動態生成圖像。 我一直認爲PHP是一個垃圾,因爲它只是實現了腳本語言得嵌入,卻單獨實現一種語言、實現大量得函數庫,浪費了大量得開發人員得寶貴時間來重複其他腳本已經實現了得功能,也浪費了PHP開發人員得大量學習時間,還要單獨學一種只能存在於web服務器得語言,浪費了Perl、Python得已有得使用經驗。相似得還有pike,一種C得腳本語言,沒什麼新東西,還不如仍然用C編譯器。 但我最近看書才瞭解PHP獨特的開發目標。 PHP爲什麼不直接用Perl作腳本語言。是因爲Perl是一種Unix語言,帶有Unix傳統得字符神祕高深,讓人難於學習。而編動態網頁得人不見得會用Perl這種Unix工具,他們可能只有HTML知識。PHP就簡化了Perl得語言,變成了一種簡單友好得語言,免去了人們學習Perl得困難。 PHP爲什麼不選Python作腳本。因爲Python是一種面向對象的語言,大量得功能都要涉及面向對象概念,而web應用只是簡單得實現客戶機邏輯和顯示功能。沒必要涉及面向對象得複雜概念。函數是最簡單,最容易理解得,因此,PHP傾向於所有得功能都用函數來解決,而不是用對象來解決。這有點象C和C++之爭。應該承認,函數在實現簡單功能得時候是最有利得工具,它得語句量最少。 PHP定位於以HTML爲用戶界面,充當各種服務器得客戶端,實現得是傳統得客戶端編程得任務。它有pop、smtp、ftp、多種數據庫等各種服務器得客戶端得函數,也有圖片、pdf生成,XML處理等這種必要得功能。這些都是其他腳本比不上PHP得地方。 其他專門寫網頁程式的語言有ASP、JSP和CGI,但它們都不及PHP強大。 Java、.NET、Zope 在商業開發中流行的是Java和.NET,其實zope也是選擇之一,zope的特點就是全部開源,層次少,簡單。並且集成一個內容管理器和衆多的附加產品。附加產品多是開源軟件必然的優勢。zope之前的一些缺點在zope3中將得到解決。另外,zope的組件架構和Cmf開發架構,並不必Java的組件開發環境差多少(我沒接觸很多Java,只是評感覺說,其他人可以有不同意見)。 PHP雖然看起來不適合大程序開發,但在PHP平臺上已經有了很多大規模的程序,比如puke。tiki。 另外,web服務器已經被很多程序缺省支持,用很多語言都能編寫出獨立的web服務器程序。 其他 Lisp Lisp的語法非常簡單統一,只有簡單的函數和參數的語句結構。Lisp用上極多括號,不太方便。Lisp數據和程序的界限模糊。Lisp可以深度嵌套。 prolog prolog是由R. Kowalsk首次提出,全稱是Programming in Logic。1972年誕生世界上第一個Prolog系統。它基於邏輯程序設計,能自動實現模式匹配和回溯,且適合於並行處理。PROLOG以一階謂詞演算爲基礎。由於採用了合一、置換、回溯和匹配等機制來搜索解答,所以用戶不必要編寫求解搜索程序,只要把待解決的問題輸入計算機系統就可以了。PROLOG的功能還不如LISP強,但它具有較好的發展前景,曾被用作第五代計算機開發研究的核心語言。 .NET 支持多種語言的統一的API類庫, 可以編寫webform程序,即所有的邏輯都在服務器端,傳到客戶端的是標準的HTML3.0,可以被各種瀏覽器支持。各程序組件間通過soap交換消息。 其他編程概念 Turing-complete programming: Brainfuck ☆Functional Programming: Haskell、Clean 平行處理: Fortran 各種語言的選擇 如果編寫對性能要求苛刻,或和操作系統結合緊密的程序,必然選擇C。 如果編寫到處可用的程序,選Java。 如果編寫大程序,可能的話儘量用腳本語言如Python、Ruby,不行了再用Java和C。因爲腳本語言帶來了生產力。 編寫文本的處理程序用Perl或Ruby。 編寫知識的處理程序用prolog。 編寫最靈活,最模糊的程序用Lisp。 編寫office程序用vba。 編寫服務器端程序,PHP、(採用自己熟悉的語言來寫,例如Perl、Python、Ruby)CGI、ASP、(熟悉Java就用)JSP都是選擇。 編寫數據庫程序用vb或delphi。 各種語言的選擇 如果要追求性能和程序的能力,要完全發揮操作系統的能力,使用C/C++語言是合適的。在Windows環境下用VC,在Unix-like環境下用gcc。 如果不是追求和操作系統完美結合,而只是性能,又要追求跨平臺性,那麼仍然選擇C,但可以選擇跨平臺的庫,如qt、gtk、fox、wxWindows。如果要編寫遊戲也有跨平臺選擇:SDL。 如果不滿意C領域標準的不統一,不滿意C的容易出錯,不滿意C的面向對象特徵不徹底。如果不在乎跨平臺,Windows平臺可以選擇C#,maC平臺可以選擇CoCo。如果需要跨平臺,可以選擇Java。 如果需要跨平臺,又要廣泛的支持的話,選擇Java。 在Unix-like下,最方便的工具語言是Perl,它有強大的社區和代碼庫的支持。 如果只作爲簡單應用的工具語言,Python和Ruby是更好的選擇,他們的跨平臺移植性好,應用也比較廣泛。其中Python更適合入門和交流,長期使用也不錯。Ruby是對Python不滿意的另一個選擇,它提供了很多額外的功能。 如果要選擇一個程序的嵌入語言,原來有Lisp、Basic和Java,現在還可以選擇Python和Ruby。 如果在要求動態解釋執行語言,而又不想學其他語言的話,C程序員的選擇是pike,Java程序員的選擇是beanshell。 在Java平臺,又想用腳本語言的話,可以用jython。 最正統的基於文檔的語言或叫動態頁面語言是JavaScript。 最專門的服務器端語言是PHP,當然也有很多其他選擇。 XML語言以XUL爲最着名,dtml也算一個,你自己也可以用XML作爲自己特殊用途的語言。比如jedit就用XML作爲一種模式定製語言。XML語言是一種比較先進的趨勢,比現有的語言在特殊領域更高效。 要找容易實現的語言,Lisp和Tcl是選擇。 Lisp的數據和程序融爲一體的能力和自由是其他語言都沒有的。現在出現了一個Lisp的現代化的變種:REBOL。 如果有基於事實的編程的需要的話,prolog和Clips是必然。 我爲什麼選擇了Python 首先聲明,我編程只編應用程序,就是代替自己工作的小程序。如果編寫系統程序總會用到C或Java的。 我喜歡腳本語言,腳本語言不用編譯就可以運行,非常便於修改,而編程序是一種經常性的活動,程序編完後總在不斷的修改中,沒必要搞的很隆重,還要編譯。另外,腳本程序每個使用的人都可以隨手拿來修改,不會出現還要去找源代碼的情況。因此,C/C++和Java就被排除了。 我喜歡簡單的語言,不喜歡爲了編寫簡單的程序而去學習大量複雜的規定,需要大量的學習纔會的語言不是好語言,是把人當機器看。C/C++和Java都有嚴格但羅索的語法,有永遠學不完的函數、類、庫。讓人看到就頭大。而Perl有各種怪里怪氣的速記符號,程序常常讓人頭暈。簡單的含義除了容易學,還要功能豐富,常用到的東西要早就準備好,不用每個人都去寫同樣的數據結構程序等。Python有豐富的數據類型,有完備的面向對象的結構,有規則表達式等各種方便編程的模塊。這個邏輯就是程序做的多,人做的就少,如果程序做的少,就要人做的多。這就是界面友好的問題。容易上手,功能豐富是程序設計的很重要的目標,Windows就是靠這個流行的。而Python也很好的體現了這點。而Perl象Unix的emaCs之類其它工具一樣,功能強大,但太難學,太難懂。是比較違揹人性的。 關於性能。現在Cpu已經很強大了。除了很大的程序和系統程序,沒必要關心性能。 關於功能。如果不是編寫系統程序和貼近系統的程序,沒必要使用操作系統特別提供的功能。C是可以幹任何事情,但它編程效率低,複雜。 至於我爲什麼不用vb,因爲vb太龐大了。我沒必要實現一個小功能啓動這麼龐大的程序。太誇張。另外,vb沒有類繼承,雖然是應用編程,但如果要編稍微大的程序,總會用到類繼承的。 Python得強大得擴展能力使對Python得學習不會浪費。Python經過簡單得處理能使用各種得C和C++庫,也可以被C和C++調用。Python可以直接使用Java得類,也可以直接被Java調用。這樣,對Python、Java、C得學習和使用經驗都不會被浪費,還能相互補充。Python可以提高Java和C得編程效率,Java和C可以補充Python功能上得不足。Python還可以和Tcl直接交互,這種功能是內置得。期待Python能簡單的調用Perl和PHP得功能。能使用Lisp和prolog更好。 Ruby和Python的比較 Python和Ruby的相同點 * 都強調語法簡單,都具有更一般的表達方式。Python是縮進,Ruby是類Basic的表達。都大量減少了符號。 * 都是動態數據類型。都是有豐富的數據結構。 * 都具有C語言擴展能力,都具有可移植性,比Perl的可移植性更好。也都可以作爲嵌入語言。 * 都是面向對象的語言,都可以作爲大項目的開發工具。 * 都有豐富的庫支持。 * 也有最寬鬆的版權許可,除了一些工具屬於GNU世界。 * 都有Lisp特色的eval函數,也都能把函數作爲參數。 * 也有圖形界面的Ruby的專門編輯器。 * 都獲得了廣泛的C庫的支持。如qt、gtk、tk、SDL、FOX等,Ruby計劃實現SWIG接口。 * 都有完善的文檔。 和Python相比Ruby的優點 * 具有正則表達式和嵌入HTML的功能。Python也有正則表達式,但沒有Ruby的應用方便和廣泛。Python的嵌入HTML項目纔剛起步。Ruby還有apaChe的mod模塊。Ruby本身也實現和很多Unix工具,如raCC,doCtools。比Python更親近Linux。 * 比Python功能更完整的面向對象的語法。 * Ruby的整個庫都是具有類繼承的結構。 * 他的基本的數據類型和運算符都是可以重載的。 * Ruby主要的功能都是通過對象的方法調用來實現的,而不是函數。Python也在向這方面發展,但沒有Ruby做的徹底。 * Ruby的類是更規範的單繼承,還有接口等概念的實現。 * Python可以實現在列表內的條件語句、循環語句,而Ruby用“塊”的方式來實現這個功能,比Python的更靈活,更具有通用性。 * Ruby具有類似Lisp的徹底的函數方式的條件語句、循環語句等。語句的表達能力更強。 * 附帶一些Unix工具,如raCC等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章