之前我发表了如何用C++开发ASP.NET,很多人怀疑用C++开发ASP.NET有什么好处?执行速度上有任何优势吗?第一个问题将在本篇随笔解答,至于执行速度,我认为既然都是managed code,C++/CLI、C#、VB应该都一样快,但C++/CLI有个特色,就是能在managed code中写unmanaged code,类似C#的unsafe code,假如在C++/CLI中使用unmanaged code,是否能在速度上占便宜呢?我写了以下的程序作测试。为了克服array必须事先宣告大小的不便,STL和.NET都有解决的方式,在STL的container当中,速度最快的就是std::vector,而.NET当中就是ArrayList,所以我想测试在同样的程序中,若使用unmanaged 的std::vector是否会比managed ArrayList快。
执行结果
执行结果令我讶异,我原本预期unmanaged的std::vector应该会比较快,但结果却是managed的ArrayList较快,我觉得可能的原因是,managed的数据放在CLR内,而unmanaged数据放在不同的地方,当unmanaged的std::vector要在managed的执行环境中显示时,还要经过marshaling的动作,所以浪费了一些时间,类似在.NET中使用COM的dll时,也必须经过marshaling,所以速度较慢。回到我第一个问题,用C++开发ASP.NET有什么好处?在这个简单的程序里可以发现,C++/CLI的最大特色,让你可以将managed和unmanaged程序写在一起,同时使用.NET Framework和传统C++的library,如STL、boost,这是C#所做不到的,假如你的工程领域已经有很多library,是用C/C++写的,可能是10几年前的东西,目前根本没有C#版本的library,而你又急需这些library的function开发.NET程序,C++/CLI就很方便了,让你同时拥抱C/C++ library和.NET Framework,这也是Microsoft开发C++/CLI的原因。结论在C++/CLI开发managed code,执行速度不会比C#、VB快,虽然C++/CLI可以开发unmanaged code,但若.NET Framework有相对应的支持时,应先考虑.NET Framework,然后再考虑其它C++自己的library,当然C++/CLI不见的适合所有开发人员,但对于一些开发人员是很方便的。
A. 为什么要在Linux使用Eclipse开发C/C++程序? Linux是一个以C/C++开发为主的平台,无论是Kernel或是Application,主要都使用C/C++开发。传统在Linux下开发程序,是在文字模式下,利用vi等文字编辑器撰写C/C++程序存盘后,在Command line下使用gcc编译,若要debug,则使用gdb。
这种开发方式生产力并不高,若只是开发学习用的小程序则影响不大,但若要开发大型项目时,程序档案个数众多,需要用project或solution的方式管理;且debug时breakpoint的加入,单步执行,观察变量变化等,都需要更可视化的方式才能够增加生产力;最重要的,由于现在的程序语言皆非常的庞大,又有复杂的函式库,要程序员熟记所有的程序语法和function名称,实在很困难,所以语法提示(Intellisense)的功能就非常重要,这些就必须靠IDE来达成。
在Windows平台上,若要开发C/C++程序,我们有Microsoft Visual Studio、Borland C++ Builder可用,这些都是很好用的IDE,但可惜仅能在Windows下使用,但是在Linux平台呢?基于以下理由,我推荐使用Eclipse开发C/C++程序:1. Eclipse是一个用Java所撰写IDE,因此可跨平台,所以在Linux和Windows平台下皆可使用Eclipse,可降低程序员熟析IDE的学习曲线。2. Eclipse虽然主要拿来开发Java程序,但事实上Eclipse为一个『万用语言』的IDE,只要挂上plugin后,就可以在Eclipse开发各种语言程序,所以我们只要挂上CDT(C/C++ Development Toolkit)后,就可以在Eclipse开发C/C++程序,除此之外,目前的主流程序语言,如C/C++、C#、Java、PHP、Perl、Python、Ruby、Rebol、JavaScript、SQL、XML、UML等,皆可在Eclipse上撰写,所以只要熟析Eclipse的IDE环境,将来若开发其它语言程序,就不用再重新学习IDE环境了。3. 最重要的,Eclipse和CDT是Open Source且完全免费,取得相当容易,事实上Fedora 5已经包含Eclipse和CDT了,虽然预设Fedara 5安装时并没有含Eclipse,只要手动另外加选即可。
B. 如何在Linux下安装Eclipse和CDT? i. 由Linux Distribution安装Eclipse,Fedora 5就内含Eclipse和CDT。ii. 手动安装 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. (超级用户模式) [root@localhost ~]#su iv. [root@localhost ~]#cd /usr/java v. (将您所下载的档的权限更改为可执行) [root@localhost java]#chmod a+x jre-1_5_0_09-linux-i586-rpm.bin vi. (启动安装过程) [root@localhost java]#./jre-1_5_0_09-linux-i586-rpm.bin (此时将显示二进制许可协议,按控格显示下一页,读完许可协议后,输入 『yes』继续安装。此时会将解压缩,产生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 (此时会将JRE装在/usr/java/jre1.5.0_09目录下) viii. (设定环境变量,让Linux能找到JRE) [root@localhost java]#vi /etc/profile (将以下内容加入在档案后面)
(存盘后,重新启动Linux) ix. (测试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. (执行Eclipse) [root@localhost eclipse]#./eclipse vii. (Select a workspace) (将Use this as the default and do not ask again打勾,以后就不会出现这个窗口) (第一次执行Eclipse会出现此error,因为没有任何Eclipse设定档,所以无法读取,第二次执行Eclipse就无此错误讯息,按OK继续。) (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. (启动Eclipse,多了C和C++ Project支持) C. 如何在Eclipse上开发C/C++程序?i. 建立Hello Word project 1. 建立C/C++ project 2. 选择Managed Make C++ Project(若选择Managed Make C++ Project,Eclipse会自动为我们建立make file;若选择Standard Make C++ Project,则必须自己写make file。) 3. 输入Project name 4. 选择Project类型(如执行档或Library,这里选择执行档即可) 5. 额外的设定 6. Open Associated Perspective?(选Yes继续) 7. 建立C++ Source File8. 输入C++ Source File檔名 9. 输入C++程序代码 10. 执行程序(显示在下方的Console区)ii. 如何在Eclipse CDT中Debug C/C++程序?1. 在Eclipse中Debug,就如同在一般IDE中Debug一样,只要在程序代码的左方按两下,就可加入breakpoint。 2. 启动Debug 3. Debug设定,按Debug开始Debug 4. 单步执行,显示变量变化E. 结论Eclipse为Linux在C/C++开发提供一个完善的IDE环境,事实上,以我用过众多IDE的经验,除了Visual Studio最方便外,Eclipse的好用也直追Visual Studio,并且超越Borland C++ Builder及Dev C++,虽然安装上比较麻烦,但只要依照本文介绍一步一步的设定,就一定可完成Eclipse设定,若想要在Windows平台使用gcc compiler,也建议使用Eclipse + CDT + MinGW的组合。See Also [转载] Eclipse + CDT + MinGW 安装方法
Reference 1. 为Linux手动下载和安装Java Runtime Enrironment(JRE)的说明(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。结论 很多人说C++无法开发ASP.NET,ANSI C++的确不能,但C++/CLI则可以,事实上,任何.NET下的语言都可以开发ASP.NET,虽然Visual Studio 2005工具不见的支持,但只要透过一些小技巧,你依然可以用妳喜欢的.NET语言开发ASP.NET。ReferenceASP.NET with Managed C++ , Soliant, The code project.