之前我發(fā)表了如何用C++開(kāi)發(fā)ASP.NET,很多人懷疑用C++開(kāi)發(fā)ASP.NET有什么好處?執(zhí)行速度上有任何優(yōu)勢(shì)嗎?第一個(gè)問(wèn)題將在本篇隨筆解答,至于執(zhí)行速度,我認(rèn)為既然都是managed code,C++/CLI、C#、VB應(yīng)該都一樣快,但C++/CLI有個(gè)特色,就是能在managed code中寫unmanaged code,類似C#的unsafe code,假如在C++/CLI中使用unmanaged code,是否能在速度上占便宜呢?我寫了以下的程序作測(cè)試。為了克服array必須事先宣告大小的不便,STL和.NET都有解決的方式,在STL的container當(dāng)中,速度最快的就是std::vector,而.NET當(dāng)中就是ArrayList,所以我想測(cè)試在同樣的程序中,若使用unmanaged 的std::vector是否會(huì)比managed ArrayList快。
執(zhí)行結(jié)果
執(zhí)行結(jié)果令我訝異,我原本預(yù)期unmanaged的std::vector應(yīng)該會(huì)比較快,但結(jié)果卻是managed的ArrayList較快,我覺(jué)得可能的原因是,managed的數(shù)據(jù)放在CLR內(nèi),而unmanaged數(shù)據(jù)放在不同的地方,當(dāng)unmanaged的std::vector要在managed的執(zhí)行環(huán)境中顯示時(shí),還要經(jīng)過(guò)marshaling的動(dòng)作,所以浪費(fèi)了一些時(shí)間,類似在.NET中使用COM的dll時(shí),也必須經(jīng)過(guò)marshaling,所以速度較慢。回到我第一個(gè)問(wèn)題,用C++開(kāi)發(fā)ASP.NET有什么好處?在這個(gè)簡(jiǎn)單的程序里可以發(fā)現(xiàn),C++/CLI的最大特色,讓你可以將managed和unmanaged程序?qū)懺谝黄穑瑫r(shí)使用.NET Framework和傳統(tǒng)C++的library,如STL、boost,這是C#所做不到的,假如你的工程領(lǐng)域已經(jīng)有很多l(xiāng)ibrary,是用C/C++寫的,可能是10幾年前的東西,目前根本沒(méi)有C#版本的library,而你又急需這些library的function開(kāi)發(fā).NET程序,C++/CLI就很方便了,讓你同時(shí)擁抱C/C++ library和.NET Framework,這也是Microsoft開(kāi)發(fā)C++/CLI的原因。結(jié)論在C++/CLI開(kāi)發(fā)managed code,執(zhí)行速度不會(huì)比C#、VB快,雖然C++/CLI可以開(kāi)發(fā)unmanaged code,但若.NET Framework有相對(duì)應(yīng)的支持時(shí),應(yīng)先考慮.NET Framework,然后再考慮其它C++自己的library,當(dāng)然C++/CLI不見(jiàn)的適合所有開(kāi)發(fā)人員,但對(duì)于一些開(kāi)發(fā)人員是很方便的。
A.?為什么要在Linux使用Eclipse開(kāi)發(fā)C/C++程序?? Linux是一個(gè)以C/C++開(kāi)發(fā)為主的平臺(tái),無(wú)論是Kernel或是Application,主要都使用C/C++開(kāi)發(fā)。傳統(tǒng)在Linux下開(kāi)發(fā)程序,是在文字模式下,利用vi等文字編輯器撰寫C/C++程序存盤后,在Command line下使用gcc編譯,若要debug,則使用gdb。
這種開(kāi)發(fā)方式生產(chǎn)力并不高,若只是開(kāi)發(fā)學(xué)習(xí)用的小程序則影響不大,但若要開(kāi)發(fā)大型項(xiàng)目時(shí),程序檔案?jìng)€(gè)數(shù)眾多,需要用project或solution的方式管理;且debug時(shí)breakpoint的加入,單步執(zhí)行,觀察變量變化等,都需要更可視化的方式才能夠增加生產(chǎn)力;最重要的,由于現(xiàn)在的程序語(yǔ)言皆非常的龐大,又有復(fù)雜的函式庫(kù),要程序員熟記所有的程序語(yǔ)法和function名稱,實(shí)在很困難,所以語(yǔ)法提示(Intellisense)的功能就非常重要,這些就必須靠IDE來(lái)達(dá)成。
在Windows平臺(tái)上,若要開(kāi)發(fā)C/C++程序,我們有Microsoft Visual Studio、Borland C++ Builder可用,這些都是很好用的IDE,但可惜僅能在Windows下使用,但是在Linux平臺(tái)呢?基于以下理由,我推薦使用Eclipse開(kāi)發(fā)C/C++程序:1.?Eclipse是一個(gè)用Java所撰寫IDE,因此可跨平臺(tái),所以在Linux和Windows平臺(tái)下皆可使用Eclipse,可降低程序員熟析IDE的學(xué)習(xí)曲線。2.?Eclipse雖然主要拿來(lái)開(kāi)發(fā)Java程序,但事實(shí)上Eclipse為一個(gè)『萬(wàn)用語(yǔ)言』的IDE,只要掛上plugin后,就可以在Eclipse開(kāi)發(fā)各種語(yǔ)言程序,所以我們只要掛上CDT(C/C++ Development Toolkit)后,就可以在Eclipse開(kāi)發(fā)C/C++程序,除此之外,目前的主流程序語(yǔ)言,如C/C++、C#、Java、PHP、Perl、Python、Ruby、Rebol、JavaScript、SQL、XML、UML等,皆可在Eclipse上撰寫,所以只要熟析Eclipse的IDE環(huán)境,將來(lái)若開(kāi)發(fā)其它語(yǔ)言程序,就不用再重新學(xué)習(xí)IDE環(huán)境了。3.?最重要的,Eclipse和CDT是Open Source且完全免費(fèi),取得相當(dāng)容易,事實(shí)上Fedora 5已經(jīng)包含Eclipse和CDT了,雖然預(yù)設(shè)Fedara 5安裝時(shí)并沒(méi)有含Eclipse,只要手動(dòng)另外加選即可。
B.?如何在Linux下安裝Eclipse和CDT?? i.?由Linux Distribution安裝Eclipse,F(xiàn)edora 5就內(nèi)含Eclipse和CDT。ii.?手動(dòng)安裝? 1.?下載檔案??? A、?下載JRE(Java Runtime Environment) 。(http://java.sun.com/javase/downloads/index.jsp)??? B、?下載Eclipse SDK。(http://www.eclipse.org/downloads/)??? C、?下載CDT。(http://www.eclipse.org/cdt/downloads.php)? 2.?安裝??? A、?安裝JRE????? i.?[root@localhost ~]#mkdir /usr/local/java????? ii.?(將檔案jre-1_5_0_09-linux-i586-rpm.bin下載到/usr/local/java目錄下)????? iii.?(超級(jí)用戶模式)????? [root@localhost ~]#su????????????????? iv.? [root@localhost ~]#cd /usr/java????? v.?(將您所下載的檔的權(quán)限更改為可執(zhí)行)????? [root@localhost java]#chmod a+x jre-1_5_0_09-linux-i586-rpm.bin?????? vi.?(啟動(dòng)安裝過(guò)程) ????? [root@localhost java]#./jre-1_5_0_09-linux-i586-rpm.bin????? (此時(shí)將顯示二進(jìn)制許可協(xié)議,按控格顯示下一頁(yè),讀完許可協(xié)議后,輸入 『yes』繼續(xù)安裝。此時(shí)會(huì)將解壓縮,產(chǎn)生jre-1_5_0_9-linux-i586.rpm)????? vii. (安裝jre-1_5_0_9-linux-i586.rpm)????? [root@localhost java]#rpm –ivh jre-1_5_0_9-linux-i586.rpm ????? (此時(shí)會(huì)將JRE裝在/usr/java/jre1.5.0_09目錄下)????? viii.?(設(shè)定環(huán)境變量,讓Linux能找到JRE)????? [root@localhost java]#vi /etc/profile????? (將以下內(nèi)容加入在檔案后面)
????? (存盤后,重新啟動(dòng)Linux)????? ix.?(測(cè)試Java是否安裝成功)????? [root@localhost ~]#java –version??? B、?安裝Eclipse SDK????? i.?(將檔案eclipse-SDK-3.2.1-linux-gtk.tar.gz下載到桌面)????? ii.?[root@localhost ~]#cd /usr/local????? iii.?[root@localhost local]#cp ~Desktop/eclipse-SDK-3.2.1-linux-gtk.tar.gz .????????? iv.?(將eclipse-SDK-3.2.1-linux-gtk.tar.gz解壓縮)????? [root@localhost local]#tar –zxvf eclipse-SDK-3.2.1-linux-gtk.tar.gz????? v.?[root@localhost local]#cd eclipse????? vi.?(執(zhí)行Eclipse)????? [root@localhost eclipse]#./eclipse????? vii.?(Select a workspace)????? (將Use this as the default and do not ask again打勾,以后就不會(huì)出現(xiàn)這個(gè)窗口)????? (第一次執(zhí)行Eclipse會(huì)出現(xiàn)此error,因?yàn)闆](méi)有任何Eclipse設(shè)定檔,所以無(wú)法讀取,第二次執(zhí)行Eclipse就無(wú)此錯(cuò)誤訊息,按OK繼續(xù)。)????? (Eclipse主畫面)??? C、 安裝CDT????? i. (將檔案org.eclipse.cdt-3.1.1-linux.x86.tar.gz下載到桌面)????? ii. [root@localhost ~]#cp ~/Desktop/org.eclipse.cdt-3.1.1-linux.x86.tar.gz . ????? iii. (將org.eclipse.cdt-3.1.1-linux.x86.tar.gz解壓縮)????? [root@localhost ~]#tar –zxvf org.eclipse.cdt-3.1.1-linux.x86.tar.gz????? (檔案將解到~/eclipse目錄下)????? iv. (安裝CDT plugin)????? [root@localhost ~]cp –r eclipse/plugins/. /usr/local/eclipse/plugins/ ????? v. (啟動(dòng)Eclipse,多了C和C++ Project支持)???? C.?如何在Eclipse上開(kāi)發(fā)C/C++程序?i.?建立Hello Word project? 1.?建立C/C++ project? 2.?選擇Managed Make C++ Project(若選擇Managed Make C++ Project,Eclipse會(huì)自動(dòng)為我們建立make file;若選擇Standard Make C++ Project,則必須自己寫make file。)? 3.?輸入Project name? 4.?選擇Project類型(如執(zhí)行檔或Library,這里選擇執(zhí)行檔即可)? 5.?額外的設(shè)定? 6.?Open Associated Perspective?(選Yes繼續(xù))? 7.?建立C++ Source File8.?輸入C++ Source File檔名? 9.?輸入C++程序代碼? 10.?執(zhí)行程序(顯示在下方的Console區(qū))ii.?如何在Eclipse CDT中Debug C/C++程序?1.?在Eclipse中Debug,就如同在一般IDE中Debug一樣,只要在程序代碼的左方按兩下,就可加入breakpoint。? 2.?啟動(dòng)Debug? 3.?Debug設(shè)定,按Debug開(kāi)始Debug? 4.?單步執(zhí)行,顯示變量變化E.?結(jié)論Eclipse為L(zhǎng)inux在C/C++開(kāi)發(fā)提供一個(gè)完善的IDE環(huán)境,事實(shí)上,以我用過(guò)眾多IDE的經(jīng)驗(yàn),除了Visual Studio最方便外,Eclipse的好用也直追Visual Studio,并且超越Borland C++ Builder及Dev C++,雖然安裝上比較麻煩,但只要依照本文介紹一步一步的設(shè)定,就一定可完成Eclipse設(shè)定,若想要在Windows平臺(tái)使用gcc compiler,也建議使用Eclipse + CDT + MinGW的組合。See Also [轉(zhuǎn)載] Eclipse + CDT + MinGW 安裝方法
Reference 1.?為L(zhǎng)inux手動(dòng)下載和安裝Java Runtime Enrironment(JRE)的說(shuō)明(http://www.java.com/zh_CN/download/help/5000010500.xml)2.?Eclipse 3.0 CDT on Linux(http://www.autexier.de/jmau/dev/CDT/cdt.html)
最后只要將HelloWorld.aspx放到c:\Inetpub\wwwroot\下,HelloWorld.dll放到c:\Inetpub\wwwroot\bin\下,就完成deployment。結(jié)論 很多人說(shuō)C++無(wú)法開(kāi)發(fā)ASP.NET,ANSI C++的確不能,但C++/CLI則可以,事實(shí)上,任何.NET下的語(yǔ)言都可以開(kāi)發(fā)ASP.NET,雖然Visual Studio 2005工具不見(jiàn)的支持,但只要透過(guò)一些小技巧,你依然可以用妳喜歡的.NET語(yǔ)言開(kāi)發(fā)ASP.NET。ReferenceASP.NET with Managed C++?, Soliant, The? code project.