开发工具大比拚之Visual C++ vs. Delphi(一)

原创 2000年11月23日 15:31:00

紫云英曾登高

引言

  Visual C++Delphi之比较”最近在CSDN的论坛上的讨论非常火热,本文将以一个程序员的角度,从技术水平、功能、性能、易用性、稳定性、发展历程和前景等方面,以Visual C++ 6Delphi 5为代表,尽可能客观地比较介绍Visual C++Delphi这两大主流开发工具的优缺点,其中将涉及到语言、应用框架、控件、编译和连接、集成界面、调试、COM、数据库开发等。本文还将对如何选择使用这两个开发工具提出一些建议。
  值得一提的是,由于C++BuilderDelphi同为Inprise公司产品,它们除了使用的语言不同,其余特性几乎都相同。因此本文对C++Builder程序员和学习者也有参考价值。

 

语言:存在即是合理
  首先声明常被混淆的一点:VCDelphi本身不是语言,而是开发平台。它们所用的语言分别是略作扩展的C/C++Object Pascal。我在网上常看到有人问应该学C/C++还是VC,这个问题很好回答:如果你学VC你就必须得学C/C++,或者说你学会了VC也就学会了C/C++了。
  言归正传,我们来比较一下C++Object Pascal的优缺点。有人认为Object Pascal是“玩具语言”,C++才是“专业语言”,这是不对的。单从语言本身看,Object PascalC++属同一重量级。它们都是完全支持面向对象的语言,都扎根于“历史悠久”的面向过程的语言。C++是由C发展而来的,Object PascalPascal进化而来。它们都有很强的灵活性,都有自己的特长和不足。比如说,Object Pascal不支持多重继承、模板、操作符重载、内联函数定义、预处理、宏、全局静态类变量、嵌套类定义,等等,而这些都是C++支持的。但同样地C++也不支持Object Pascal的虚构造函数、过程嵌套、内置集合类型、内置字符串类型、"finally"构造等等,在RTTI方面Object Pascal也比C++做得好。但这些并不重要,因为可以通过其它方式达到同样的目的,比如C++可以通过类扩展支持集合、字符串,Object Pascal可以通过“interface”多重继承,等等。关键是二者都可以很好地完成你手头的任务,这就够了。
  但是,仅仅比较语言本身是不够的,还得看它们的被接受和流行程度,学习曲线,发展前途,可移植性等,以及,很重要但常常被忽略的一点:与开发环境(VCDelphi)及其应用框架的“磨合”程度。
  VCDelphi作为开发平台,很重要的一点就是提供了一个“无所不包”的应用框架:VCMFCDelphiVCLMFC是用C++写的,VCL是用Object Pascal写的。当然,我们都知道,C++的使用范围比Object Pascal广得多,移植性也好得多。这本来是优点,但很有意思的是,正因为如此,微软写MFC时必须考虑最大限度减少对语言本身的改动,而把功夫下在源代码级,以便能尽可能支持ANSI等标准,结果导致MFC的封装复杂而不直观。(尤其是它对消息的封装,下文还会提到。)太多的宏定义和含义模糊且自动生成、不得改动的注释使MFC乃至VC让很多新手望而生畏,不敢“下水”深入学习。而Object Pascal几乎是Inprise“专用”的,不必考虑“标准”问题,因此InpriseVCL时就把全部精力放在了结构与性能上,结果语言与框架的磨合程度非常好。VCL框架的结构清晰,VCL代码的可读性非常好。许多人说Delphi比较容易上手,也是这个缘故。天下没有白吃的午餐。你要工业标准吗?你要可移植性吗?(关于可移植性和兼容性,下文会详细比较。)那么请面对MFC的“天书”级代码吧。

 

编译和连接:The Need For Speed
  不同的语言带来的另一个不同是,编译和连接的速度的不同,以及执行速度的不同。Delphi的编译和连接速度,毫不夸张地说,比VC快几十倍。即使把VCIncremental Link选项打开,Delphi的编译和连接速度仍比VC快好几倍。并不是说微软的编译器不行,这是由C++的复杂性决定的。模板的处理、预处理和宏的展开都是很费时的。前文不是提到Object Pascal没有模板、预处理和宏吗?这本来是缺点,但带来的一个好处就是编译速度极快。至于编译完的二进制代码,在打开相同的优化选项的情况下,DelphiVC执行速度并没有太大的差别。

为了克服编译的速度问题,C++编译器一般需要增强的连接器和预处理机制。但是预处理机制仍然存在若干问题:1)程序调试的断点行可能和代码行不同。2)没有将最新的代码信息综合进去。3)容易产生错误的逻辑。4)因为读错文件头而很容易产生类似“Unexpected End of File”的错误。

两个编译器有个共同点是都能识别无用的“死”代码,比如一个没有用的函数等等。编译后的程序将不包含这些多余的信息。Delphi在这方面作得更加出色。它可以让你在编辑器中可视化地提示出那行代码是“活”的、那行代码是“死”的。这样你就能整理出最精简的代码。Delphi在编译后将在左边显示一个小蓝点表示这行代码是“活”的。Visual C++做不到这点。

Delphi编译后的可执行文件至少有200K(如果不使用VCL,仅仅使用WinAPI,文件的大小将大大缩小)。但是Visual C++编程使用MFC编译后的可执行文件通常只有几十K,主要是因为微软已经将系统运行库包含在Windows系统了(Borland公司曾经和微软协商这个接口,但是微软利用操作系统的优势不愿意公开)。同样道理,使用BDE开发的的数据库程序必须附带3-5M的额外系统文件,也是非常不协调的。

非常有趣的是,Delphi能够使用由C++ Builder创建的的OBJ文件,但是使用上受很大的局限性。

  顺便提一下VC的“Edit and Continue”功能。在调试中,这个功能是可以大幅度节省时间的,但仍不能和Delphi的闪速编译比。

最后,Visual C++的编译和连接时的错误信息比Delphi要详细和具体的多。特别是使用ATL开发更加如此。

开发工具大比拚之Visual C++ vs. Delphi(二)

 应用框架:MFC?有KFC流行吗?  应用程序框架(Application Frame),有时也称为对象框架。Visual C++采用的框架是MFC。MFC不仅仅是人们通常理解的一个类库。(同样,D...
  • zdg
  • zdg
  • 2000年11月23日 15:32
  • 2282

开发工具大比拚之Visual C++ vs. Delphi(三)

 数据库开发:Delphi一枝独秀  数据库支持是Delphi的强项。这主要体现在Delphi与BDE的无缝集成,以及Delphi提供的那一大堆现成的数据库操作控件。这是VC望尘莫及的。目前Delph...
  • zdg
  • zdg
  • 2000年11月23日 15:33
  • 2772

设计工具大比拼之Visual C++ VS Delphi

 引言   "Visual C++与Delphi之比较"最近在CSDN的论坛上的讨论非常火热,本文将以一个程序员的角度,从技术水平、功能、性能、易用性、稳定性、发展历程和前景等方面,以Visual C...
  • micel108
  • micel108
  • 2007年02月14日 14:43
  • 871

hello ip大比拚。

项目里面有一个小需求,返回http用户的实际ip. 正好用来测试不同appsvr的性能。 测试在虚拟机本机测试。1GRAM.使用webbench -c 10 -t 5.os是centos64 x86_...
  • laputa73
  • laputa73
  • 2013年08月30日 15:03
  • 517

看Java、C#大比拚

Java和C#都提供了对网络的不同抽象层,编程人员可以使用不同的网络接口完成对网络的操作。 Java C# 应答/请求: java.net.URL和java.net.URLConnection。 Sy...
  • nileel
  • nileel
  • 2007年04月17日 12:48
  • 3409

ASP+和JSP大比拚

作者:Casey Kochmer  因为我同时是ASP和JSP的程序员,所以正开始写一系列的文章来比较两者的差别,当我写到一半时,ASP+被宣布了,所以我在重新开始审视这个问题。  我正在做一个JSP...
  • zdg
  • zdg
  • 2000年12月14日 16:31
  • 2076

开发工具大比拼之Visual C++ VS Delphi

开发工具大比拼之Visual C++ VS Delphi 引言   "Visual C++与Delphi之比较"最近在CSDN的论坛上的讨论非常火热,本文将以一个程序员的角度,从技术水平、功能、性能、...
  • hongfanghan
  • hongfanghan
  • 2007年08月07日 19:28
  • 420

开发工具大比拼之Visual C++ VS Delphi(摘自delphi园地)

开发工具大比拼之Visual C++ VS Delphi引言   "Visual C++与Delphi之比较"最近在CSDN的论坛上的讨论非常火热,本文将以一个程序员的角度,从技术水平、功能、性能、易...
  • yzsind
  • yzsind
  • 2005年12月30日 13:20
  • 6899

编程:ASP JSP PHP大比拚

       编程:ASP JSP PHP大比拚       ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应...
  • mxq007
  • mxq007
  • 2007年06月28日 10:28
  • 501

Linux指导-Linux数据库大比拚

本文简介当第一次有人建议我为 Linux Planet写数据库 管理 系统的比较时,我摇了摇头,我从来没做过这样的比较,但是后来,我想:有何不可?也许一种新鲜天真的方法并不坏。因此就有本文:一种全新眼...
  • noter
  • noter
  • 2007年04月09日 11:08
  • 455
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:开发工具大比拚之Visual C++ vs. Delphi(一)
举报原因:
原因补充:

(最多只允许输入30个字)