宫成刚
以一个程序员的角度,从技术水平、功能、性能、易用性、稳定性、发展历程和前景等方面,Visual C++ 6和Delphi 5这两大主流开发工具的优缺点是什么呢?其中,还将涉及到语言、应用框架、控件、编译和连接、调试、数据库开发等。笔者将对如何选择使用这两个开发工具提出一些建议。
一、语言:存在即是合理
有人认为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的编译和连接速度,比VC快几十倍。即使把VC的Incremental link选项打开,Delphi的编译和连接速度仍比VC快好几倍。当然,这并不是说微软的编译器不行,这是由C++的复杂性决定的。模板的处理、预处理和宏的展开都是很费时的。前文已提到Object Pascal没有模板、预处理和宏,这本来是缺点,但其带来的一个好处就是编译速度极快。至于编译完的二进制代码,在打开相同的优化选项的情况下,Delphi和VC的执行速度并没有太大的差别。
三、应用框架:mfc有kfc流行吗?
应用程序框架(application frame),也称为对象框架。Visual C++采用的框架是mfc。mfc不仅仅是人们通常理解的一个类库。经过多年的不断补充和完善,mfc已经十分成熟。但由于原型出现得较早,mfc相比于vcl,落后了一个时代。尽管微软对mfc的更新没有停止,但就像inprise的owl框架淡出一样,mfc的淡出也是早晚的事情。其实,mfc是和owl同一个时代的产物。owl已经不在了,mfc怎能不“居安思危”呢?如果mfc青春永驻,微软的开发人员也不会“私自”开发出基于atl的wtl呀。当然,wtl的地位不能和mfc比,它并不是微软官方支持的框架,封装的功能也相当有限。但至少也反衬出mfc存在的不足。
四、稳定性与完善程度:VC是老大哥
VC要比Delphi稳定和完善。VC的发展历史比Delphi长,微软的总体实力比Inprise强。VC的框架mfc经历多年的发展和完善,功能非常全面,而且十分稳定,bug很少。千万不要小看这一点,很多专业程序员就是因为这个原因选择VC的。尽管vcl比mfc的抽象程度高,封装较为高层,但由此带来的开发效率的提高,对高手来说毕竟是有限的。而如果遇到一个怪问题,调试了半天,发现不是代码有错,而是vcl的bug,会作何感想呢?Delphi的ide太占资源,启动速度太慢,和某些显卡驱动程序冲突,vcl中有bug,调试器不够健壮,对不稳定的第三方控件没有防护措施,问题多多,在这一方面Delphi不如VC。
五、可移植性:立足现实,放眼未来
目前,Inprise的兼容性做得并不好。低版本的Delphi不能使用高版本的vcl组件,而高版本的Delphi竟然不能使用低版本的vcl组件。如果Windows 98不能运行95的程序,Windows 95不能运行3.x的程序,还会有人用Windows吗?如果Windows 95的程序必须经过重新编译才能在Windows98下运行,Windows98会卖得那么好吗?“同门兄弟”C++Builder和Delphi也不能互相使用对方的组件,甚至同一套vcl库的文件名也不一样。所以,Inprise应先解决同门兄弟的兼容性问题。而微软的VC没有这类问题,mfc1.0的程序可以毫无障碍地在VC6.0下编译通过。
六、调试:细微之处见真功
Visual C++和Delphi的调试功能都非常强大,都具有单步可视化调试、断点跟踪、运行时改变变量、鼠标指向可以得到变量值等功能。另外,对dll的输入输出也能方便管理,能够进行源码级别的调试。
相对而言,Visual C++能够更加方便地看到变量的变化情况,包括对结构可以展开成数据树,从而了解每一个变量的值,每一步调试,变化了的变量会加红,从而使调试更加方便。另外,Visual C++的块内存察看,比Delphi也要方便。
七、数据库开发:Delphi一枝独秀
数据库支持是Delphi的强项。这主要体现在Delphi与bde的无缝集成,以及Delphi提供的现成数据库操作控件。这是VC望尘莫及的。目前,Delphi支持bde、ado、Interbase三种数据库访问方式。所有的方式都能拖拉到应用程序中实现可视化操作,明显地提高了开发速度。在Delphi中使用Webbroker控件,还能很方便地构造出基于数据库的Web页面,通过html管理Web数据库。
八、鱼和熊掌:艰难的选择
选择一个开发工具,依赖多种不同的因素,每个人都能因为某种语言的某个缺陷而放弃学习或使用这种语言。任何程序员都希望自己喜欢的工具能达到理想的境界,通过上面不完善的比较,笔者认为,影响选择开发语言的因素主要包括:
1.语言入门的难易程度
学习一种语言需要投入大量的时间和精力。开发程序的开发成本是值得考虑的现实因素。一个熟练的Delphi程序员和一个熟练的VC程序员,其工作效率是一样的。但是,成为熟练的程序员必须快速掌握一门语言技巧。不幸的是,目前熟练的Visual C++程序员是十里挑一。相对而言,Delphi更适合初学者。
2.哪门语言有更多可继承的代码
语言代码的可重用性是加快开发效率明显方面,从早期的过程、函数到现在的组件技术都是朝这个目标奋斗的。这两种语言对代码重用的理解是不一样的,Delphi主要通过vcl控件来实现代码重用,Visual C++实现起来就比较复杂。
3.语言自身的本性
就技术(主要指应用框架)来说,Delphi目前领先于Visual C++,但稳定性和健壮性不足。而VC尽管发展到今日已十分完善,但mfc框架已是明日黄花了。如果不使用mfc,目前又没有合适的替代品。
4.语言的前景和可扩充性
Delphi是Inprise的旗舰产品之一,前景还是比较乐观的。微软的Visual C++的前景又怎样呢?Visual Studio 7.0即将推出,这一版本将加强网络开发的特性。
(作者单位:山东省即墨市技工学校)