Visual C++与DelphiC++Builder之比较及未来的发展前景之我见_第1页
Visual C++与DelphiC++Builder之比较及未来的发展前景之我见_第2页
Visual C++与DelphiC++Builder之比较及未来的发展前景之我见_第3页
Visual C++与DelphiC++Builder之比较及未来的发展前景之我见_第4页
Visual C++与DelphiC++Builder之比较及未来的发展前景之我见_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VisualC++与Delphi/C++Builder之比拟及将来的开展前景之我见VisualC++与Delphi/C++Builder之比拟及将来的开展前景之我见VisualC++与Delphi/C++Builder之比拟及将来的开展前景之我见 VisualC++与Delphi/C++Builder之比拟及将来的开展前景之我见由于Delphi与C++Builder同为Inprise公司产品,共享集成开发界面(IDE),而且使用同一套VCL框架(这一点最关键),它们带的调试器、PVCS/TeamSource团队开发支持、数据库引擎及企业版中集成的其它高级功能等都是一样的,所以本文将其与C++Builder归入"同一阵线"。我在网上见到一些Delphi程序员认为C++Builder与VC比拟接近,这是个误解。事实上,Delphi和C++Builder除了使用的语言不同,其余几乎都一样。为了防止话题转移到C++语言与ObjectPascal语言(即Delphi所用的语言)的比拟,下文主要比照分析VisualC++与C++Builder。首先,从它们的应用程序框架(ApplicationFrame,有时也称为对象框架)进展比较。VisualC++采用的框架是MFC。MFC不仅仅是人们通常理解的一个类库。(同样,Delphi和C++Builder使用的VCL的概念也不仅仅是一个控件库。)你假设选择了MFC,也就选择了一种程序构造,一种编程风格。MFC早在Windows3.x的时代就出现了,那时的VisualC++还是16位的。经过这些年的不断补充和完善,MFC已经非常成熟。但由于原型出现得比拟早,MFC相比于VCL落后了一个时代。尽管微软对MFC的更新没有停顿,我也经常读到持"只要Windows不过时,MFC就不会过时"之类观点的文章,但就象Inprise(原Borland)的OWL框架的淡出一样,MFC的淡出也是早晚的事。假设MFC青春永驻,微软的开发人员也不会"私自"开发出基于ATL的WTL呀。当然,WTL的地位不能和MFC比,它并不是微软官方支持的框架,封装的功能也相当有限。但至少也反衬出了MFC存在的缺乏。我以为,最能表达一个应用程序框架的先进性的是它的委托模型,即对Windows消息的封装机制。(对WindowsAPI的封装就不用说了吧。大同小异,也没什么技术含量。假设快乐,你也可以自己写一个类库来封装。但对Windows消息驱动机制的封装就不是那么容易的了。)最自然的封装方式是采用虚成员函数。假设要响应某个消息就重载相应的虚函数。但出乎我的意料,MFC采用的是"古老"的宏定义方法。用宏定义方法的好处是省去了虚函数VTable的系统开销。(由于Windows的消息种类很多,开销不算太小。)不过带来的缺点就是映射不太直观。好在较新版本VC带的ClassWizard可以自动生成消息映射代码,使用起来还是比拟方便的。但和VCL的委托模型相比,MFC的映射方法就显得太落后了。而C++Builder对C++语言进展了扩展,以便引入组件、事件处理、属性等新特性。由于功夫做在编译器级,生成的源代码就显得非常简洁。但是由于扩展的非标准特性,使用VCL的C++Builder的源代码无法被其它编译器编译。而MFC的功夫做在源代码级,虽然消息映射代码较为复杂且不直观,但兼容性非常好。只要你有MFC库的源代码(随VC企业版的光盘提供),你的MFC程序理论上用任何符合ANSI标准的编译器均可编译通过。C++Builder3以上版本可以原封不动直接编译VisualC++程序,很多人认为这是C++Builder的兼容性好,实际上很大程度应归功于MFC的兼容性好。微软辛辛苦苦用标准方法写MFC,却为对手制造了方便。不知他们作何感想?而因为C++Builder对语言作了扩展,VC不能编译C++Builder的程序。看来在这方面VC要输给C++Builder了。而且VCL所支持的组件、属性等都是MFC所缺乏的特性。虽然VC也能支持组件,但要通过AppWizard先生成一个"包裹"类(wrapper),不如VCL来得简洁。有很多人使用C++Builder就是冲着控件板上那一大堆组件来的,VC虽然能使用的组件也很多(也许不比C++Builder少),但由于不方便而对RAD程序员没有吸引力。C++Builder的VCL比VisualC++的MFC先进的另一个特性是异常处理。但令人啼笑皆非的是,它的异常处理代码有bug,有时会无端抛出异常。不知道在最新的版本中有没有改正了。而VC的框架MFC也不是一无是处。经历了那么多年的开展和完善,MFC功能非常全面,而且非常稳定,bug很少。其中你可能遇到的bug更少。而且有第三方的专门工具帮助你避开这些bug。如此规模的一个类库,能做到这一点不容易。不要小看了这一点,很多专业程序员就是为这个选择VC的。而C++Builder的VCL的bug就相对较多了,而且有些它自己带的例如程序都有错误。看来Inprise还有很长的路要走。再从它们的易用性比拟。VC有ClassWizard、SourceBrowser等一系列工具,还附带VisualSourceSafe、VisualModeler等强大的工具,易用性非常好。(VC自带建模工具VisualModeler,也许说明了它才是工程级的开发平台,与C++Builder的定位不同。)它所带的MSDN这部"开发者的百科全书"更是让你"没有找不到的,只有想不到的"。而且它的Autoplete之类小功能也比C++Builder要体贴。C++Builder的新版本虽然也提供了这一功能,但它的提示要等好几秒才出来,有时你不经意间把鼠标停在某一处,也要等硬盘响好几秒,这可是在566Mhz的赛扬II上呀。不要笑我琐碎,有时一个开发工具的成熟和易用,就是从这些小地方表达出来的。C++Builder作为RAD工具,理应强调易用性。但与VC相比还显出不成熟。这是不应该的。再来看看它们的可移植性。Inprise正在开发C++Builder和Delphi的Linux版本,代号为Kylix。也许通过Kylix,用VCL构架编写的Windows程序向Linux移植成为可能。但这只是可能。因为在目前Inprise的兼容性工作做得并不好。C++Builder可以编译VC程序还要多谢微软使用标准方法写MFC,而它自己各个版本之间兼容性却不太好。低版本的C++Builder不能使用高版本的VCL组件(这还别去说它),而高版本的C++Builder竟然不能使用低版本的VCL组件。真是岂有此理,我很少看见软件有不向下兼容的。假设Windows98不能运行95的程序,Windows95不能运行3.x的程序,Win3.x不能运行DOS程序,你还会用Windows吗?假设不是C++Builder的其它某些方面太出色,光是这个向下不兼容就足以让我抛弃它。而且虽说通过捆绑编译器,C++Builder可以编译Delphi的ObjectPascal代码,但C++Builder仍不能使用为Delphi开发的VCL组件。所以一个组件有forD1/D2/D3/D4/D5/C1/C3/C4/C5这些不同版本是常有的事,而且随着C++Builder版本的晋级可能还会增加。希望Inprise能先解决同门兄弟的兼容性问题。而微软的VC就没有这类问题。MFC1.0的程序也可以毫无障碍地在VC6.0下编译通过。再来看看它们的前景吧。实际上,技术的进步在很多时候是此消彼长的。当初Borland的TurboC和BorlandC++几乎是唯一的选择。微软的QuickC(如今还有人知道这个产品吗?)和MicrosoftC/C++从来也没有成为过主流。但BorlandC++又流行了多少年呢?不久就被新崛起的MicrosoftVisualC/C++压下去了。如今的C++Builder又有后来居上的态势,假设稳定性再进步一些,bug再少一些,有希望成为主流。但Inprise的总体实力不及微软,这也是无可争议的。从C++Builder5的ReleaseNotes中的KnownIssues局部,以及它们的帮助文档的规模和质量都可以看出。(哪个同类产品的帮助文档能和MSDN比呢?)Inprise公司应从Netscape汲取教训,不要让C++Builder成为第二个Netscapemunicator。(municator也是一度技术领先,甚至曾占据了大局部的阅读器市der是Inprise的旗舰产品之一,前景应当还是比拟乐观的,而且Inprise已经在向Linux进军了,而微软还迟迟没有动作,难道非要到Linux成燎原之势(或许已经成燎原之势了)才会奋起占领这个新兴市场?似乎他们对Linux的态度与几年前对互联网的兴起的反响缓慢有些相似。但后来......唉,真希望Inprise不要步Netscape的后尘。C++Builder是一个很有前途的开发工具。遗憾的是,Inprise公司Delphi的创始人已经跳槽到微软去主持VisualJ++工程了。但愿对Inprise冲击不会太大。微软的VisualC++的前景又怎样呢?VisualStudio7.0不久就要推出了。不知能不能在保持稳定性的同时在技术的先进性上赶上C++Builder。另外,这一版本将加强网络开发的特性。看来微软虽然被判解体,开发实力可是一点没打折扣。就技术(主要指应用框架)来说,C++Builder目前领先于VisualC++。但多多少少的不尽人意之处让我对Inprise"想说爱你不容易"。而VC尽管开展到今日已非常完善,但MFC框架已是明日黄花了。假设不使用MFC,目前又没有适宜的替代品。WFC是支持组件、属性和事件的,但那是VisualJ++里边用的;ATL也很先进,但是用来进展/ActiveX开发的;基于ATL的WTL也不错,可惜是非官方作品,也未必比VCL先进。微软最近提出了C#(读作CSharp)语言方案,但那属于和Java同一类的东西。看来是金无足赤啊。根据你的需要做选择吧。实际上VisualC++和C++Builder也不是单单竞争关系。它们在许多领域并不重叠,甚至是互补的。到底怎样取舍,要根据你的工程特性决定。假设你开发系统底层的东西,需要极好的兼容性和稳定性,选VisualC++吧。你可以只调用Windows的各种API,不用MFC。假设你写传统的Windows桌面应用程序,VisualC++的MFC框架是"正统"的选择。假设你为企业开发数据库、信息管理系统等高层应用("高层"是相对于"低层/底层"而言的,不是说技术高级或低级。)而且有比拟紧的期限限制,选C++Builder比拟好。假设你用的语言是ObjectPascal,Delphi是唯一的选择(假设GNUPascal等免费编译器不考虑的话)。假设你原先用Delphi(ObjectPascal语言),如今想改学C++,应领先用C++Builder。熟悉的界面和一样的框架会让你的转轨事半功倍。另外,虽说MFC已显落后,但不是说它不值得学。事实上,不学MFC就等于没学VC。利用MFC框架开发程序仍然是目前开发桌面应用的主流形式,而且还会保持相当长的时间。即使你不使用MFC框架,花点时间学习一下MFC的封装机制对你熟悉C++的OOP机制和Windows底层功能也是很有好处的作为程序员等级评判的标准之一c/c++(不管是mfc还是bcb)将为什么这么说呢,我认为最大理由是目前的应用程序正在从基于独立的操作系统,传向基于internet平台.我们以前开发应用程序都是依赖于平台的功能调用,mfc,bcb都是这样.而如今日益炽热的internet编程却最不想关心的就是某一个平台的调用,譬如说要实现b2b的电子商务那么就需要做不同平台的集成,假设我是程序员我最care的就是如何实现商务逻辑而不是各种平台之间的通信和管理.那么我们最迫切需要的就是一种与各种平台调用无关的语言,这中语言只注重程序逻辑的设计而不涉及平台的调用.而我们熟悉的c/c++却恰恰不是为这个而设计的(赫赫这也不能怪c/c++在70年代谁能知道如今internet的情况呢).c/c++的最初设计目的是为了设计unix产生一种介于汇编和高级语言之间的一种开发高效而性能不低的语言.他要比其他任何高级语言都要关心系统的物理构造,譬如一直是毁誉搀半的指针.指针之所以强大就是应为涉及了系统物理内存的管理.他可以使得程序员和系统之间成为一种半透明状态.但是就是这种半透明的状态让指针带来了更多的不稳定性.c/c++在面向Internet的编程中却无任何优势可言.跨平台的电子商务软件最害怕顾及各种平台之间的天差地别的系统调用,最害怕时不时的由于内存泄漏而crash.c/c++的优势在这里却成为了优势.即使在windows平台上开发基于windowsdna的solution用的最多的还是vb做的d而不是vc的atl做的d,因为c/c++虽然高效但是太容易出错,假设不是很小心的释放内存nt很快就会资源缺乏.java就是最先看到这种情况,他用jvm实现了平台无关用内存回收实现了稳定强健.但是相当多的c/c++程序员抱怨java太慢了.确实即使到java2速度仍然是一个大问题.我曾经是一个c/c++坚决拥护者在许多论坛里和java程序员打笔仗.但是我逐渐意识到面对与internet平台而不是特定的操作系统的时候java的速度问题往往是一个小小的瑕疵.我们可以想象那一个电子商务网站会用我们手头的pc做效劳务逻辑的编程,而不必要关心数组是否越界,对象内存是否释放更不需要关心是不是unix和windows的系统调用不一样.微软的c#可以说是一种java与c/c++的杂合体,他可以回收内存,可以平台无关.但是他又可以实现一些java没有的功能譬如在标记的程序段内用指针自己管理内存,可以实现操作符的重载等等.为什么要这样做我想也许c#还肩负了一定的面向操作系统开发的任务例如winform.他根本上的思想和java类似,但是实现的方法又不一样他不通过jvm解释中间代码,而是吧源代码编译成p代码然后通过CLS库和JIT在平台上及时编译为100%的本地代码来执行.他的pe代码是独立于平台的,但是cls和jit却根据不同的平台而设计.因此c#的平台独立有点类似于c/c++在不同平台上的移植使得c#比java来的更快.而且微软还许诺cls和jit不仅针对c#还可以针对任何语言譬如pascal,smaltalk,basic因此将来有可能所有的编程语言都是可以平台无关的(ms真是毒,所有的语言都平台无关java还有什么优势呢,据说ms正在开发基于pascalsmaltalk的asp+).xml很多人可能认为与html相类似的语言和c/c++,java,c#完全不在一个档次上的语言.其实不然.我们知道不管是c#还是java都是通过统一地层计算来实现平台无关.那就必须在性能上付出一点代价.而xml却可以实现不同的语言之间的调用.譬如说一个网占用java用bean实现一个出货功能,另一个网站用d实现一个入库功能.假设这个网站需要实现b2b,用一般的方式就是在他们之间写转换程序.而xml通过标记语言来描绘各自的借口特性.两端通过解析xml文本来实现互相的调用,无需任何中间转换程序只要一张xml文本就能实现bean和d之间的通讯(要说清楚其中的机理,需要很多xml概念假设有兴趣可以到msdn.microsoft/xml或者去看看).目前ms的.net中最核心的技术soap就是完全基于xml的远过程调用.介绍了那么多可能有点跑题,其实我最想说的就是21世纪的程序员应该从面向操作系统的传统方法中走出来,学习一点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论