宫成刚
[摘要]本文将以一个程序员的角度,从技术水平、功能、性能、易用性、稳定性、发展历程和前景等方面,以isual c++ 6和delphi 5为代表,尽可能客观地比较介绍isual c++和delphi这两大主流开发工具的优缺点,其中将涉及到语言、应用框架、控件、编译和连接、集成界面、调试、com、数据库开发等。本文还将对如何选择使用这两个开发工具提出一些建议。
[关键词]开发工具 语言 应用框架 控件 编译和连接 集成界面 调试 数据库
一、语言:存在即是合理
首先声明常被混淆的一点:c和delphi本身不是语言,而是开发平台。它们所用的语言分别是略作扩展的c/c++和object pascal。有人认为object pascal是“玩具语言”,c++才是“专业语言”,这是不对的。单从语言本身看,object pascal与c++属同一重量级。它们都是完全支持面向对象的语言,都扎根于“历史悠久”的面向过程的语言。c++是由c发展而来的,object pascal由pascal进化而来。它们都有很强的灵活性,都有自己的特长和不足。比如说,object pascal不支持多重继承、模板、操作符重载、内联函数定义等等,而这些都是c++支持的。但同样地c++也不支持object pascal的虚构造函数、过程嵌套、内置集合类型、内置字符串类型等等,在rtti方面object pascal也比c++做得好。但这些并不重要,因为可以通过其它方式达到同样的目的,比如c++可以通过类扩展支持集合、字符串,object pascal可以通过“interface”多重继承,等等。关键是二者都可以很好地完成你手头的任务,这就够了。
二、编译和连接:速度的较量
不同的语言带来的另一个不同是,编译和连接的速度的不同,以及执行速度的不同。delphi的编译和连接速度,毫不夸张地说,比c快几十倍。即使把c的incremental link选项打开,delphi的编译和连接速度仍比c快好几倍。并不是说微软的编译器不行,这是由c++的复杂性决定的。模板的处理、预处理和宏的展开都是很费时的。前文不是提到object pascal没有模板、预处理和宏吗?这本来是缺点,但带来的一个好处就是编译速度极快。至于编译完的二进制代码,在打开相同的优化选项的情况下,delphi和c执行速度并没有太大的差别。
三、应用框架:mfc有kfc流行吗
应用程序框架(application frame),有时也称为对象框架。isual c++采用的框架是mfc。mfc不仅仅是人们通常理解的一个类库。经过这些年的不断补充和完善,mfc已经十分成熟。但由于原型出现得比较早,mfc相比于cl落后了一个时代。尽管微软对mfc的更新没有停止,但就象inprise的owl框架的淡出一样,mfc的淡出也是早晚的事。其实mfc是和owl同一个时代的产物。owl已经不在了,mfc怎能不“居安思危”呢?如果mfc青春永驻,微软的开发人员也不会“私自”开发出基于atl的wtl呀。当然,wtl的地位不能和mfc比,它并不是微软官方支持的框架,封装的功能也相当有限。但至少也反衬出了mfc存在的不足。
四、稳定性与完善程度:c是老大哥
c要比delphi稳定和完善。c的发展历史比delphi长,微软的总体实力比inprise强。c的框架mfc经历了那么多年的发展和完善,功能非常全面,而且十分稳定,bug很少。不要小看了这一点,很多专业程序员就是为这个选择c的。因为尽管cl比mfc的抽象程度高,封装较为高层,但由此带来的开发效率的提高对高手来说毕竟是有限的。而如果你遇到一个怪问题,调试了半天,发现不是你的代码有错,而是cl的bug,你作何感想? delphi的ide太占资源,启动速度太慢,和某些显卡驱动程序冲突,cl中有bug,调试器不够健壮,对不稳定的第三方控件没有防护措施……问题多多,在这方面delphi不如c。
五、可移植性:立足现实,放眼未来
目前inprise的兼容性工作做得并不好。低版本的delphi不能使用高版本的cl组件,而高版本的delphi竟然不能使用低版本的cl组件。如果windows 98不能运行95的程序,windows 95不能运行3.x的程序,你还会用windows吗?如果windows 95的程序必须经过重新编译才能在98下运行,98会卖得那么好吗?“同门兄弟”c++builder和delphi也不能互相使用对方的组件,甚至同一套cl库的文件名也不一样。希望inprise能先解决同门兄弟的兼容性问题。而微软的c就没有这类问题。mfc1.0的程序也可以毫无障碍地在c6.0下编译通过。
六、集成界面:宏观与微观
就大处说,c的集成界面是不如delphi的。delphi仅仅一个object inspector就可以将c的一堆wizards比下去,何况它还有code explorer、todo list等。但从小处,又可以看出delphi的不成熟。比如“自动完成”功能的智能化程度和提示详细程度不如c,响应速度也没有c快。
isual c++所带的msdn是一部“开发者的百科全书”,信息庞大,查询方便,这方面比delphi更加专业。delphi的opentools是完全面向第三方的开放系统,开发者可以修改很多borland公司自身的功能,从ide的可扩充性上说delphi更好。
七、鱼和熊掌:艰难的选择
选择一个开发工具依赖于很多不同的因素,每个人都能因为某种语言的某个缺陷而放弃学习或使用这种语言。任何程序员都希望自己喜欢的工具能达到理想的境界,通过上面不完善的比较,我想大家都有自己的看法。我认为影响大家选择开发语言的因素主要包括:
1.哪门语言更容易入门
学习一种语言需要投入大量的时间和精力。开发程序的开发成本是值得考虑的现实。一个熟练的delphi程序员和一个熟练的c程序员工作效率是一样的。但是,成为熟练的程序员必须很快掌握一门语言的技巧。不幸的是,目前熟练的isual c++程序员是十里挑一。相对而言,delphi更适合初学者。
2.哪门语言有更多可继承的代码
语言代码的可重用性是加快开发效率明显方面,从早期的过程、函数到现在的组件技术都是朝这个目标在奋斗。这两种语言对代码重用的理解是不一样的,delphi主要通过cl控件来实现代码重用,isual c++实现起来就比较复杂。
3.语言自身的本性
就技术(主要指应用框架)来说,delphi目前领先于isual c++。但稳定性和健壮性的不足又让我们对inprise“想说爱你不容易”。而c尽管发展到今日已十分完善,但mfc框架已是明日黄花了。如果不使用mfc,目前又没有合适的替代品。
4.语言的前景和可扩充性
delphi是inprise的旗舰产品之一,前景应当还是比较乐观的,而且inprise已经在向linux进军了,而微软还迟迟没有动作。
微软的isual c++的前景又怎样呢?isual studio 7.0就要推出了。这一版本将加强网络开发的特性。看来微软虽然被判解体,开发实力可是一点没打折扣。
根据你的需要和实际情况做选择吧。实际上c和delphi也不是单单竞争关系。它们在许多领域并不重叠,甚至是互补的。到底怎样取舍,要根据你的项目特性决定。如果你开发系统底层的东西,需要极好的兼容性和稳定性,选c吧。如果你写传统的windows桌面应用程序,c的mfc框架是“正统”的选择;如果界面部分占这个应用程序代码比例较大的话,或者delphi中有相关功能的控件的话,delphi是事半功倍的选择。如果你为企业开发数据库、信息管理系统等高层应用,而且有比较紧的期限限制,选delphi比较好。传统的观点是:delphi适合编写internet/intranet、表格制图、数据库操作、高级用户界面等等。isual c++适合编写设备驱动、com服务程序、科学计算、控制台程序、wince的应用和一些小的工具等等。