文章目錄
C 語(yǔ)言是一種通用的高級(jí)語(yǔ)言,最初是由丹尼斯·里奇在貝爾實(shí)驗(yàn)室為開(kāi)發(fā) UNIX 操作系統(tǒng)而設(shè)計(jì)的。C 語(yǔ)言最開(kāi)始是于 1972 年在 DEC PDP-11 計(jì)算機(jī)上被首次實(shí)現(xiàn)。
在 1978 年,布萊恩·柯林漢(Brian Kernighan)和丹尼斯·里奇(Dennis Ritchie)制作了 C 的第一個(gè)公開(kāi)可用的描述,現(xiàn)在被稱為 K&R 標(biāo)準(zhǔn)。
UNIX 操作系統(tǒng),C編譯器,和幾乎所有的 UNIX 應(yīng)用程序都是用 C 語(yǔ)言編寫(xiě)的。由于各種原因,C 語(yǔ)言現(xiàn)在已經(jīng)成為一種廣泛使用的專業(yè)語(yǔ)言。
特點(diǎn)
易于學(xué)習(xí)
結(jié)構(gòu)化語(yǔ)言
它產(chǎn)生高效率的程序
它可以處理底層的活動(dòng)
它可以在多種計(jì)算機(jī)平臺(tái)上編譯
關(guān)于C
C 語(yǔ)言是為了編寫(xiě) UNIX 操作系統(tǒng)而被發(fā)明的。
C 語(yǔ)言是以 B 語(yǔ)言為基礎(chǔ)的,B 語(yǔ)言大概是在 1970 年被引進(jìn)的。
C語(yǔ)言標(biāo)準(zhǔn)是于 1988 年由美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI,全稱 American National Standard
Institute)制定的。
截至 1973 年,UNIX 操作系統(tǒng)完全使用 C 語(yǔ)言編寫(xiě)。
目前,C 語(yǔ)言是最廣泛使用的系統(tǒng)程序設(shè)計(jì)語(yǔ)言。
大多數(shù)先進(jìn)的軟件都是使用 C 語(yǔ)言實(shí)現(xiàn)的。
當(dāng)今最流行的 Linux 操作系統(tǒng)和 RDBMS(Relational Database Management System:關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) MySQL 都是使用 C 語(yǔ)言編寫(xiě)的。
為什么要使用C
C 語(yǔ)言最初是用于系統(tǒng)開(kāi)發(fā)工作,特別是組成操作系統(tǒng)的程序。由于 C 語(yǔ)言所產(chǎn)生的代碼運(yùn)行速度與匯編語(yǔ)言編寫(xiě)的代碼運(yùn)行速度幾乎一樣,所以采用 C 語(yǔ)言作為系統(tǒng)開(kāi)發(fā)語(yǔ)言。下面列舉幾個(gè)使用 C 的實(shí)例:
操作系統(tǒng)
語(yǔ)言編譯器
匯編器
文本編輯器
打印機(jī)
網(wǎng)絡(luò)驅(qū)動(dòng)器
現(xiàn)代程序
數(shù)據(jù)庫(kù)
語(yǔ)言解釋器
實(shí)體工具
C++ 是一種中級(jí)語(yǔ)言,它是由 Bjarne Stroustrup 于 1979 年在貝爾實(shí)驗(yàn)室開(kāi)始設(shè)計(jì)開(kāi)發(fā)的。C++ 進(jìn)一步擴(kuò)充和完善了 C 語(yǔ)言,是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。C++ 可運(yùn)行于多種平臺(tái)上,如 Windows、MAC 操作系統(tǒng)以及 UNIX 的各種版本。
特點(diǎn)
C++ 是一種靜態(tài)類型的、編譯式的、通用的、大小寫(xiě)敏感的、不規(guī)則的編程語(yǔ)言,支持過(guò)程化編程、面向?qū)ο缶幊毯头盒途幊獭?/p>
C++ 被認(rèn)為是一種中級(jí)語(yǔ)言,它綜合了高級(jí)語(yǔ)言和低級(jí)語(yǔ)言的特點(diǎn)。
C++ 進(jìn)一步擴(kuò)充和完善了 C 語(yǔ)言,最初命名為帶類的C,后來(lái)在 1983 年更名為 C++。
C++ 是 C 的一個(gè)超集,事實(shí)上,任何合法的 C 程序都是合法的 C++ 程序。
面向?qū)ο蟪绦蛟O(shè)計(jì)
C++ 完全支持面向?qū)ο蟮某绦蛟O(shè)計(jì),包括面向?qū)ο箝_(kāi)發(fā)的四大特性:
封裝
抽象
繼承
多態(tài)
標(biāo)準(zhǔn)庫(kù)
標(biāo)準(zhǔn)的 C++ 由三個(gè)重要部分組成:
核心語(yǔ)言,提供了所有構(gòu)件塊,包括變量、數(shù)據(jù)類型和常量,等等。
C++ 標(biāo)準(zhǔn)庫(kù),提供了大量的函數(shù),用于操作文件、字符串等。
標(biāo)準(zhǔn)模板庫(kù)(STL),提供了大量的方法,用于操作數(shù)據(jù)結(jié)構(gòu)等。
學(xué)習(xí)C++
學(xué)習(xí) C++,關(guān)鍵是要理解概念,而不應(yīng)過(guò)于深究語(yǔ)言的技術(shù)細(xì)節(jié)。
學(xué)習(xí)程序設(shè)計(jì)語(yǔ)言的目的是為了成為一個(gè)更好的程序員,也就是說(shuō),是為了能更有效率地設(shè)計(jì)和實(shí)現(xiàn)新系統(tǒng),以及維護(hù)舊系統(tǒng)。
C++ 支持多種編程風(fēng)格。您可以使用 Fortran、C、Smalltalk 等任意一種語(yǔ)言的編程風(fēng)格來(lái)編寫(xiě)代碼。每種風(fēng)格都能有效地保證運(yùn)行時(shí)間效率和空間效率。
C++的使用
基本上每個(gè)應(yīng)用程序領(lǐng)域的程序員都有使用 C++。
C++ 通常用于編寫(xiě)設(shè)備驅(qū)動(dòng)程序和其他要求實(shí)時(shí)性的直接操作硬件的軟件。
C++ 廣泛用于教學(xué)和研究。
任何一個(gè)使用蘋(píng)果電腦或 Windows PC 機(jī)的用戶都在間接地使用 C++,因?yàn)檫@些系統(tǒng)的主要用戶接口是使用 C++ 編寫(xiě)的。
Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言和Java平臺(tái)的總稱。由James Gosling和同事們共同研發(fā),并在1995年正式推出。
主要特性
Java語(yǔ)言是簡(jiǎn)單的
Java語(yǔ)言的語(yǔ)法與C語(yǔ)言和C++語(yǔ)言很接近,使得大多數(shù)程序員很容易學(xué)習(xí)和使用。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動(dòng)的強(qiáng)制類型轉(zhuǎn)換。特別地,Java語(yǔ)言不使用指針,而是引用。并提供了自動(dòng)的廢料收集,使得程序員不必為內(nèi)存管理而擔(dān)憂。
Java語(yǔ)言是面向?qū)ο蟮?/b>
Java語(yǔ)言提供類、接口和繼承等面向?qū)ο蟮奶匦?,為了?jiǎn)單起見(jiàn),只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實(shí)現(xiàn)機(jī)制(關(guān)鍵字為implements)。Java語(yǔ)言全面支持動(dòng)態(tài)綁定,而C++語(yǔ)言只對(duì)虛函數(shù)使用動(dòng)態(tài)綁定??傊?,Java語(yǔ)言是一個(gè)純的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言。
Java語(yǔ)言是分布式的
Java語(yǔ)言支持Internet應(yīng)用的開(kāi)發(fā),在基本的Java應(yīng)用編程接口中有一個(gè)網(wǎng)絡(luò)應(yīng)用編程接口(java net),它提供了用于網(wǎng)絡(luò)應(yīng)用編程的類庫(kù),包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠(yuǎn)程方法激活)機(jī)制也是開(kāi)發(fā)分布式應(yīng)用的重要手段。
Java語(yǔ)言是健壯的
Java的強(qiáng)類型機(jī)制、異常處理、垃圾的自動(dòng)收集等是Java程序健壯性的重要保證。對(duì)指針的丟棄是Java的明智選擇。Java的安全檢查機(jī)制使得Java更具健壯性。
Java語(yǔ)言是安全的
Java通常被用在網(wǎng)絡(luò)環(huán)境中,為此,Java提供了一個(gè)安全機(jī)制以防惡意代碼的攻擊。除了Java語(yǔ)言具有的許多安全特性以外,Java對(duì)通過(guò)網(wǎng)絡(luò)下載的類具有一個(gè)安全防范機(jī)制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節(jié)代碼檢查,并提供安全管理機(jī)制(類SecurityManager)讓Java應(yīng)用設(shè)置安全哨兵。
Java語(yǔ)言是體系結(jié)構(gòu)中立的
Java程序(后綴為java的文件)在Java平臺(tái)上被編譯為體系結(jié)構(gòu)中立的字節(jié)碼格式(后綴為class的文件),然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。這種途徑適合于異構(gòu)的網(wǎng)絡(luò)環(huán)境和軟件的分發(fā)。
Java語(yǔ)言是可移植的
這種可移植性來(lái)源于體系結(jié)構(gòu)中立性,另外,Java還嚴(yán)格規(guī)定了各個(gè)基本數(shù)據(jù)類型的長(zhǎng)度。Java系統(tǒng)本身也具有很強(qiáng)的可移植性,Java編譯器是用Java實(shí)現(xiàn)的,Java的運(yùn)行環(huán)境是用ANSI C實(shí)現(xiàn)的。
Java語(yǔ)言是解釋型的
如前所述,Java程序在Java平臺(tái)上被編譯為字節(jié)碼格式,然后可以在實(shí)現(xiàn)這個(gè)Java平臺(tái)的任何系統(tǒng)中運(yùn)行。在運(yùn)行時(shí),Java平臺(tái)中的Java解釋器對(duì)這些字節(jié)碼進(jìn)行解釋執(zhí)行,執(zhí)行過(guò)程中需要的類在聯(lián)接階段被載入到運(yùn)行環(huán)境中。
Java是高性能的
與那些解釋型的高級(jí)腳本語(yǔ)言相比,Java的確是高性能的。事實(shí)上,Java的運(yùn)行速度隨著JIT(Just-In-Time)編譯器技術(shù)的發(fā)展越來(lái)越接近于C++。
Java語(yǔ)言是多線程的
在Java語(yǔ)言中,線程是一種特殊的對(duì)象,它必須由Thread類或其子(孫)類來(lái)創(chuàng)建。通常有兩種方法來(lái)創(chuàng)建線程:其一,使用型構(gòu)為Thread(Runnable)的構(gòu)造子類將一個(gè)實(shí)現(xiàn)了Runnable接口的對(duì)象包裝成一個(gè)線程,其二,從Thread類派生出子類并重寫(xiě)run方法,使用該子類創(chuàng)建的對(duì)象即為線程。值得注意的是Thread類已經(jīng)實(shí)現(xiàn)了Runnable接口,因此,任何一個(gè)線程均有它的run方法,而run方法中包含了線程所要運(yùn)行的代碼。線程的活動(dòng)由一組方法來(lái)控制。Java語(yǔ)言支持多個(gè)線程的同時(shí)執(zhí)行,并提供多線程之間的同步機(jī)制(關(guān)鍵字為synchronized)。
Java語(yǔ)言是動(dòng)態(tài)的
Java語(yǔ)言的設(shè)計(jì)目標(biāo)之一是適應(yīng)于動(dòng)態(tài)變化的環(huán)境。Java程序需要的類能夠動(dòng)態(tài)地被載入到運(yùn)行環(huán)境,也可以通過(guò)網(wǎng)絡(luò)來(lái)載入所需要的類。這也有利于軟件的升級(jí)。另外,Java中的類有一個(gè)運(yùn)行時(shí)刻的表示,能進(jìn)行運(yùn)行時(shí)刻的類型檢查。
Python是一種解釋型、面向?qū)ο?、?dòng)態(tài)數(shù)據(jù)類型的高級(jí)程序設(shè)計(jì)語(yǔ)言。
Python由Guido van Rossum于1989年底發(fā)明,第一個(gè)公開(kāi)發(fā)行版發(fā)行于1991年。
像Perl語(yǔ)言一樣, Python 源代碼同樣遵循 GPL(GNU General Public License)協(xié)議。
特點(diǎn)
易于學(xué)習(xí):Python有相對(duì)較少的關(guān)鍵字,結(jié)構(gòu)簡(jiǎn)單,和一個(gè)明確定義的語(yǔ)法,學(xué)習(xí)起來(lái)更加簡(jiǎn)單。
易于閱讀:Python代碼定義的更清晰。
易于維護(hù):Python的成功在于它的源代碼是相當(dāng)容易維護(hù)的。
一個(gè)廣泛的標(biāo)準(zhǔn)庫(kù):Python的最大的優(yōu)勢(shì)之一是豐富的庫(kù),跨平臺(tái)的,在UNIX,Windows和Macintosh兼容很好。
互動(dòng)模式:互動(dòng)模式的支持,您可以從終端輸入執(zhí)行代碼并獲得結(jié)果的語(yǔ)言,互動(dòng)的測(cè)試和調(diào)試代碼片斷。
可移植:基于其開(kāi)放源代碼的特性,Python已經(jīng)被移植(也就是使其工作)到許多平臺(tái)。
可擴(kuò)展:如果你需要一段運(yùn)行很快的關(guān)鍵代碼,或者是想要編寫(xiě)一些不愿開(kāi)放的算法,你可以使用C或C++完成那部分程序,然后從你的Python程序中調(diào)用。
數(shù)據(jù)庫(kù):Python提供所有主要的商業(yè)數(shù)據(jù)庫(kù)的接口。
GUI編程:Python支持GUI可以創(chuàng)建和移植到許多系統(tǒng)調(diào)用。
可嵌入: 你可以將Python嵌入到C/C++程序,讓你的程序的用戶獲得"腳本化"的能力。
免費(fèi)、開(kāi)源 : Python 是 FLOSS(自由/開(kāi)放源碼軟件)之一。簡(jiǎn)單地說(shuō),你可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中。FLOSS 是基于一個(gè)團(tuán)體分享知識(shí)的概念。這是為什么 Python 如此優(yōu)秀的原因之一——它是由一群希望看到一個(gè)更加優(yōu)秀的 Python 的人創(chuàng)造并經(jīng)常改進(jìn)著的。
缺點(diǎn)
運(yùn)行速度,有速度要求的話,用 C++ 改寫(xiě)關(guān)鍵部分吧。
國(guó)內(nèi)市場(chǎng)較?。▏?guó)內(nèi)以 Python 來(lái)做主要開(kāi)發(fā)的,目前只有一些 web2.0 公司)。但時(shí)間推移,目前很多國(guó)內(nèi)軟件公司,尤其是游戲公司,也開(kāi)始規(guī)模使用他。
中文資料匱乏(好的 Python 中文資料屈指可數(shù),現(xiàn)在應(yīng)該變多了)。托社區(qū)的福,有幾本優(yōu)秀的教材已經(jīng)被翻譯了,但入門級(jí)教材多,高級(jí)內(nèi)容還是只能看英語(yǔ)版。
構(gòu)架選擇太多(沒(méi)有像 C# 這樣的官方 .net 構(gòu)架,也沒(méi)有像 ruby 由于歷史較短,構(gòu)架開(kāi)發(fā)的相對(duì)集中。Ruby on Rails 構(gòu)架開(kāi)發(fā)中小型web程序天下無(wú)敵)。不過(guò)這也從另一個(gè)側(cè)面說(shuō)明,python比較優(yōu)秀,吸引的人才多,項(xiàng)目也多。
PHP 是一種創(chuàng)建動(dòng)態(tài)交互性站點(diǎn)的強(qiáng)有力的服務(wù)器端腳本語(yǔ)言。
PHP 是免費(fèi)的,并且使用非常廣泛。同時(shí),對(duì)于像微軟 ASP 這樣的競(jìng)爭(zhēng)者來(lái)說(shuō),PHP 無(wú)疑是另一種高效率的選項(xiàng)。
PHP能做什么?
PHP 可以生成動(dòng)態(tài)頁(yè)面內(nèi)容
PHP 可以創(chuàng)建、打開(kāi)、讀取、寫(xiě)入、關(guān)閉服務(wù)器上的文件
PHP 可以收集表單數(shù)據(jù)
PHP 可以發(fā)送和接收 cookies
PHP 可以添加、刪除、修改您的數(shù)據(jù)庫(kù)中的數(shù)據(jù)
PHP 可以限制用戶訪問(wèn)您的網(wǎng)站上的一些頁(yè)面
PHP 可以加密數(shù)據(jù)
通過(guò) PHP,您不再限于輸出 HTML。您可以輸出圖像、PDF 文件,甚至 Flash 電影。您還可以輸出任意的文本,比如 XHTML 和 XML。
為什么使用PHP?
PHP 可在不同的平臺(tái)上運(yùn)行(Windows、Linux、Unix、Mac OS X 等)
PHP 與目前幾乎所有的正在被使用的服務(wù)器相兼容(Apache、IIS 等)
PHP 提供了廣泛的數(shù)據(jù)庫(kù)支持
PHP 是免費(fèi)的,可從官方的 PHP 資源下載它:?www.php.net
PHP 易于學(xué)習(xí),并可高效地運(yùn)行在服務(wù)器端
缺點(diǎn)
函數(shù)命名不規(guī)范 駝峰法和下滑線,傳參位置不一
單線程 PHP本身,一直以來(lái)php就是個(gè)單進(jìn)程的程序,雖然php的pthreads擴(kuò)展早就有了。但是它不夠穩(wěn)定,運(yùn)行運(yùn)行著就會(huì)莫名其妙的自己掛掉,php的擴(kuò)展都是C寫(xiě)的,這也就意味著任何一個(gè)擴(kuò)展出現(xiàn)線程競(jìng)爭(zhēng)資源控制問(wèn)題都能讓整個(gè)掛掉
核心異步網(wǎng)絡(luò)不支持(當(dāng)然在linux只有同步非阻塞網(wǎng)絡(luò)模型)。卻少了這個(gè)使得很難開(kāi)發(fā)一個(gè)能夠承受大并發(fā)的網(wǎng)絡(luò)應(yīng)用。傳統(tǒng)的網(wǎng)絡(luò)模型和io都阻塞的。這樣基本的編程的做法就是一個(gè)進(jìn)程(或者線程)響應(yīng)一個(gè)用戶鏈接請(qǐng)求。因此無(wú)法完成像實(shí)時(shí)網(wǎng)游那樣需要成千上萬(wàn)網(wǎng)絡(luò)連接的任務(wù)。盡管php也有Libevent、eio擴(kuò)展對(duì)此算是某種程度上面的彌補(bǔ),但是感覺(jué)都不是那么完善
只支持web開(kāi)發(fā),不方便做 .exe文件,不方便做桌面應(yīng)用程序. 不方便做手機(jī)程序.
不適合做爬蟲(chóng)、自動(dòng)運(yùn)行腳本.科學(xué)運(yùn)算項(xiàng)目,這語(yǔ)言基本構(gòu)架就不適合,雖然有很多方法實(shí)現(xiàn)。
后期維護(hù)困難。后期提速空間局限性較大。
JSP全稱Java Server Pages,是一種動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)。它使用JSP標(biāo)簽在HTML網(wǎng)頁(yè)中插入Java代碼。標(biāo)簽通常以<%開(kāi)頭以%>結(jié)束。
JSP是一種Java servlet,主要用于實(shí)現(xiàn)Java web應(yīng)用程序的用戶界面部分。網(wǎng)頁(yè)開(kāi)發(fā)者們通過(guò)結(jié)合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來(lái)編寫(xiě)JSP。
JSP通過(guò)網(wǎng)頁(yè)表單獲取用戶輸入數(shù)據(jù)、訪問(wèn)數(shù)據(jù)庫(kù)及其他數(shù)據(jù)源,然后動(dòng)態(tài)地創(chuàng)建網(wǎng)頁(yè)。
JSP標(biāo)簽有多種功能,比如訪問(wèn)數(shù)據(jù)庫(kù)、記錄用戶選擇信息、訪問(wèn)JavaBeans組件等,還可以在不同的網(wǎng)頁(yè)中傳遞控制信息和共享信息。
JSP的優(yōu)勢(shì)
與ASP相比:JSP有兩大優(yōu)勢(shì)。首先,動(dòng)態(tài)部分用Java編寫(xiě),而不是VB或其他MS專用語(yǔ)言,所以更加強(qiáng)大與易用。第二點(diǎn)就是JSP易于移植到非MS平臺(tái)上。
與純 Servlet 相比:JSP可以很方便的編寫(xiě)或者修改HTML網(wǎng)頁(yè)而不用去面對(duì)大量的println語(yǔ)句。
與SSI相比:SSI無(wú)法使用表單數(shù)據(jù)、無(wú)法進(jìn)行數(shù)據(jù)庫(kù)鏈接。
與JavaScript相比:雖然JavaScript可以在客戶端動(dòng)態(tài)生成HTML,但是很難與服務(wù)器交互,因此不能提供復(fù)雜的服務(wù),比如訪問(wèn)數(shù)據(jù)庫(kù)和圖像處理等等。
與靜態(tài)HTML相比:靜態(tài)HTML不包含動(dòng)態(tài)信息。