`
nw019nw
  • 浏览: 13645 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

总体上说,是c++ builder胜于VC++,DELPHI是最好

 
阅读更多

总体上说,是c++ builder胜于VC++,DELPHI是最好
2011年09月30日
  偶然来找一个文件,却发现这里关于vc++和delphi的讨论很是激烈。看了大家写的一些文章,觉得有些看法正确,有些就很偏颇甚至错误(也许无知?很抱歉我这样说:-)。我无意与任何人争,更愿意把这看成是技术上的讨论。应该本着公正,不带偏见的态度(这并不意味着非要平分秋色,一切应以事实为准)。我用过除tp1以外的所有版本的turbo pascal,所有版本的turbo c/borland c++,所有版本的delphi和c++ builder;以及msc 5.0/6.0,msc/c++ 7.0和visual c++.2/5.0。不敢说有多高的水平,至少也算有一点经验吧。下面就谈一下我的看法。
  1. 编译器
  应该说borland的编译器是最好的。因为borland有全世界最好的编译器开发组(虽然anders hejlsberg离开了)。从技术上来讲,borland领先任何竞争对手至少2~3年。
  一 。
  一般来说,borland的编译器总是能生成更小的代码并且通常(并不是在任何情况下)更快的代码。紫云英、曾登高在文章中说vc++编译的程序小,这其实是使用了动态连接的结果。m$把vc++的运行库(msvcrt*.dll, msvcp*.dll, mfc*.dll, 你看看这些文件加在一起有多大)在安装windows时就放在了system/system32目录中了。两位说“协商接口”的问题,恐怕是对某些英文文章的理解错误。m$就是不愿意在windows中带上其他公司的运行文件,没有技术上的原因。其实delphi/c++ builder不论在动态连接或静态连接的情况下,生成的程序都要比vc++的小。比如mdi的例子程序:在delphi/c++ builder中选new ... | projects |mdi application,在vc++中用mdi app wizard;生成的程序功能是非常类似的。
  下面是比较结果:
  (delphi打开优化,c++ builder使用最大速度优化,vc++ 5使用最小代码优化)
  delphi 3 delphi 5 c++ builder 5 vc++ 5
  dynamic link 21k 35k 44k 70k
  static link 253k 398k 467k 490k
  凡是使用了应用类库的程序(不管是mfc,owl,vcl以及新的clx框架)都要比不使用的大不少。这是因为目前的智能连接(smart link)技术还只能针对全局变量/过程,而不能用于对象结构。哪怕你只使用了某个类(或被这个类间接引用)的一个属性或方法,这个类以及它所引用的所有类都全部被连接到exe中。目前所有的编译器都没有解决这个问题。
  (ps: 其实能生成最小代码(真编译)的高级语言编译器是turbo pascal,不信你写程序比较一下:
  program test;
  begin
  writeln('hello, world.');
  end.
  end.
  生成的exe不到1.5k。而同样的c程序:
  #include
  main()
  {
  printf("hello, world.");
  }
  最精悍的c/c++编译器生成的代码也有6k。
  )
  那么几个编译器生成的代码质量又如何呢?
  举一个例子,比如我们在编程时经常用到的for循环语句:
  (1) object pascal:
  procedure foo;
  var
  i, j: integer;
  begin
  for i := 0 to 15 do j := j + i;
  end;
  (2) c++
  void foo(void)
  {
  int i, j;
  int i, j;
  for (i = 0; i 字符方面也有优势。要知道c/c++的字符串给现代操作系统支持unicode字符带来了很大的困扰,比如串'abc'的unicode表示为:
  41 00 42 00 43 00,这使c/c++程序根本无法处理这种字符串。虽然修改编译器可以很容易解决这个问题,但光修改编译器是不够的,还要修改操作系统,否则以前的大量c/c++程序根本无法在新操作系统上使用(这简直是灾难 --- 你连notepad都没了,怎么办?:-)。windows采用凡是涉及字符串处理的api都提供两套的解决方案。比如textout,有用于处理ascii字符的textouta和用于处理unicode字符的textoutw。而unix/linux采用另一种办法:凡是涉及字符串处理的api都使用utf8压缩编码(一种类似于rtf的编码方法:凡是ascii字符都直接存储,多字节字符则用\u36827进行转义),虽然(勉强)保证了兼容性却也代价不小。 (ps:c++中的string/ansistring是用类模拟的,所以性能...)
  (7) 多重继承
  (7) 多重继承
  毫无疑问,object pascal不支持多重继承;并且也看不出borland有增加这一特性的意向(其实增加是轻而易举的)。object pascal通过接口(interface)实现多重继承。interface不仅可以引入用object pascal实现的对象,也可以引入其他语言实现的com/dcom/corba对象。你真的需要多重继承吗?我想大多数程序员和我一样都从来没有使用过多重继承(连vcl这么强大灵活的体系结构都根本没有用到多重继承)。 (ps:java和delphi一样不支持多重继承,也使用interface来实现多重继承。其实这并不奇怪:jdk 1.2和java 2主要是由borland开发的,sun只挂名而已。不信你看java类库是不是和vcl很象。:-)
  (8) 对象模板
  object pascal不支持对象模板。因为对象模板不过是宏的语言实现而已(宏本身不是c/c++的语言特性)。
  (9) 重载
  object pascal支持函数/过程的重载,不支持运算符重载。c++全部支持。 (ps:我个人倾向于object pascal应该增加对运算符重载的支持)
  (10) 位及逻辑操作
  object pascal和c/c++在这方面没什么差别。c/c++的&,|,~,^,>>,显示不出优势。只需要$79的vc++标准版,directx sdk(可免费下栽),opengl文档(也是免费的),至多再加一套msdn即可。比如quake,全是手写的c代码,连c++特性都很少用到。borland也认识到了这一问题,所以发布了免费的c++编译器)
  (14) 价格
  m$的开发工具确实便宜(相对而言),不过是否物有所值,只能看你干什么用了。
  (ps:别指望你买的toyota能有ferrari的性能。:-)
  (15) 前景
  有人认为m$财大气粗,borland难以对抗。我看不能这么简单下结论。m$有它自己的问题:法律诉讼,人才流失,资源分散,四面出击(m$现在连鼠标,键盘,游戏杆,玩具都生产)。而brland/inprise集中精力在开发工具,中件产品(如midas,visibroker和application server)和企业应用/管理环境(如appcenter和security service)上,应该还是大有可为的。
  况且borland和m$之间并非纯粹的竞争关系,borland开发工具给m$ windows带来的收益要远大于和m$开发工具竞争带来的损失。毕竟对m$来说,开发工具只占其收入的很少一部分,即使不搞开发工具也只不过是个面子问题,于m$无损。m$在它面临垄断/不正当竞争指控的时候,因为长期侵犯知识产权而赔偿给borland一亿美元(称为“授权费”), 这多少也可以看作是一种和解的举动吧。 另一种经常听到的论调是“m$的产品市场份额大,borland能撑得住吗?”,这其实也有很多问题。鉴于m$出于竞争的目的,经常虚报数字,影响市场(m$的律师在法庭上承认m$曾夸大过其ie和office的市场占有率);m$自己宣传的其开发工具的市场占有率也很值得怀疑。m$还有重复计算的问题,比如卖掉一套visual studio,在计算vb,vc,vj等的销售量时都计算在内。其实很多人/公司买visual studio只用其中的一两种。其实borland产品的销售量还是很大的,尤其是在欧洲,北美和澳大利亚,在亚洲...(是因为d版太多了)。另外,每个公司都有自己的产品/市场定位,你能因为toyota,ford,volkswagen卖的多就说ferrari,maclaren,benz不行了吗?
  4. 结论
  delphi(其实应该说borland产品)在技术上有优势,vc++(其实应该说m$产品)也占有相当的市场份额。 (ps:说了半天等于没说。:-) (ps:m$的c#(读c sharp)能取得突破吗?我看不会。因为m$产品通常达不到所宣传的性能;而且一种不符合标准(c#不兼容任何一种语言标准,虽然据称更接近c)的产品也很难取得成功。j++就是一例)
  5. 附:我所知道的borland和m$的故事
  (1) bill gates是如何拿到ibm订单的
  1979年,tim paterson写了最初的dos并以$1000的价格卖给了digital reserch。 当时apple的apple i和apple ii销势很好,所以ibm在1980年也决定搞pc。bill gates知道后,认为是个机会,就以$5000从digital reserch买下了dos,并逼着手下人在一间没有空调的小黑屋里日夜不停加以修改。m$当时是个小公司,只有十几个人,名叫micro-soft。所以尽管dos的开价$20000加每拷贝$30授权费)比cp/m-86(指用于intel 8086/8088的版本,不是指年代)的开价($100000加每拷贝$70授权费)便宜不少,ibm的人还是倾向于使用cp/m-86。据“比尔.盖茨的秘密”(bill gates' secrets)一书的作者说,bill急得团团转,只好求助于他妈妈。bill的母亲时任华盛顿大学校长,与当时的ibm董事长john opal是大学同学(据说...)。bill这一招果然有效,没多久就拿到了ibm的订单,从此dos成了ibm pc上的首选操作系统。
  (2) borland的名字和历史
  borland听起来不象一个公司的名字,倒象一个国家的名字。 1982年,philippe kahn带着3000美元从巴黎到了美国,除去机票钱已所剩无几, 只好租人家的车库小阁间住。kahn在硅谷干了一段时间,并以mit(market in time,恰好与恰好与麻省理工学院的缩写相同)为名开了一家公司。1983年,kahn和anders hejlsberg(丹麦人,turbo pascal编译器的主要作者)合作开发了turbo pascal,并赊帐在《新闻周刊》上登了一份彩页广告。turbo pascal在pc开发工具中是一个里程碑式的产品,它第一次把编译时间由分缩短到秒,并且其$49的价格在当时也是创纪录的(当时的一份编译器动辄数千美元,便宜的也要几百美元,还不好用)。turbo pascal在不到两年的时间里销售了超过130万套(考虑到当时的pc数量,这是一个非常惊人的数字),borland从此创立。 kahn在解释为什么以borland命名时说“我们要起一个与众不同的名字,其他公司都是叫这个micro,那个soft什么的”。不过据认为这个名称与德国或北欧的某些地名有关(kahn的父亲是德国人,而且borland的很多开发人员是北欧人)。
  (3) anders hejlsberg为什么去了m$
  1996年,anders hejlsberg离开borland去了m$。在此之前,m$曾多次企图挖走anders,但都没有成功。据信anders去m$(主要)不是钱的问题,虽然m$的开价也相当有吸引力: 130万美元年薪外加股票期权和分红,总计超过300万美元。主要原因是anders和delphi开发组的其他成员在修改编译器的问题上发生了争执;还有,据borland内部人讲 ,anders认为自己不再是“不可缺少的人”。 虽然anders hejlsberg去了m$,我仍然尊敬他是一个天才,turbo pascal的主要作者,delphi的奠基者。 (ps:anders从1999年初就不在j++组了,而去做com+的开发。m$的人讲的)
  (4) m$产品的秘密
   msc最初是从at&t买的授权;
   vb的1,2,3版实际上不是m$开发的,而是cooper software开发的。john cooper在m$时未受重用,离开后m$倒要花钱请他开发产品,真有点黑色幽默的味道;
   ms sql server最初是买sybase的产品,6.5以前的ms sql server和sybase根本就 是一回事;
   windows 95的主要技术负责人(名字我不记得了,不过在dejanews(www.deja.com) 上可能还能找到有关文章)是1990年从borland跳到m$的,不过他在1998年已经离开m$,开了自己的;
   windows nt的开发组整个是从dec挖来的,是以前做dec vms的那些人。所以在win32平台上有很多vms的痕迹,比如说coff目标文件格式。
  (5) .net到底是什么,bill gates也不知道
  请看对bill gates的采访:
  记者:现在,市场仍然对.net感到困惑。... .net的实质到底是什么?
  盖茨:.net是我们对下一代internet的设想。... 举个简单的例子,.net不仅允许你查看自己喜爱的棒球队的时间安排,并且还能够对这个时间安排进一步加以利用。
分享到:
评论

相关推荐

    代码行统计工具(可用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM、Java、C#、SQL 等程序源码进行详细的统计,可以准确的分析出程序中代码行、注释行和空白行的行数。)

    可用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM、Java、C#、SQL 等程序源码进行详细的统计,可以准确的分析出程序中代码行、注释行和空白行的行数。程序会自动根据你选择的文件类型选择相应的统计方式,并将...

    用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM等程序源代码进行详细的统计

    可用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM等程序源代码进行详细的统计,可以非常精确的得到程序中代码行、注释行和空白行的行数。程序会自动根据你选择的文件类型进行统计,并将所有文件的分析结果进行...

    短信DLL开发包

    dll 支持以下语言的 C++builder ,VC++, Delphi

    编程技术 编程技术C# VB jsp delphi VC++ CGI程序制作 Linux编程 等等太多了

    1.C#做个带精灵的邮件通知程序 2.VB编写CRC校验程序 3.VB6对WINDOWS消息的拦截 4.网络数据库设计 5.MYSQL性能优化全攻略 ...7.C++Builder 注册表的操作 ...jsp delphi VC++ CGI程序制作 Linux编程 等等太多了

    VBto Converter_V2.89

    可以将MS Visual Basic 6.0完整项目转换成MS VC++ 或 VBNET 项目,支持VS 2010, Delphi 2010、支持FileSystemObject、支持VB.Data (VB.NET, C#, C++Builder, Delphi)。 原版下载:http://www.vbto.net/

    vc++ 应用源码包_3

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    短信开发包

    适用范围: 本短信二次开发接口适用于WAVECOM、西门子、诺基亚、摩托罗拉等支持...以及源代码,源代码有以下语言的vc++ C# VisualBasic C++Builder VB.net Delphi PowerBuilder 直接运行会显示出界面。更改代码方便

    p2p服务器C代码,PRTX开发平台完全由C++/C完成

    平台是Dll和各种控件,支持VB, Delphi, PB, C++Builder, Vc++等。 4. 安全可靠 稳定性是PRTX最重要的目标。 5.使用简洁 给客户一套低成本和简单的开发工具,是PRTX 一开始就树立的重要目标,简单就是低成本。就是...

    PCOMM详细的帮助资料

    简单易用的RS232串行通信开发库,包括库函数的详细使用说明、适合VC++,Borland C++ Builder,Delphi等

    vc++ 应用源码包_1

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    RichEdit控件删除行和自动滚屏

    RichEdit控件删除行操作 自动滚屏到最后的应用示例

    TeeChart8绘图控件破解版

    熟悉Delphi和C++ Builder的编程人员对它不会陌生,因为在Delphi和C++ Builder里包括了TeeChart的VCL版本。 TeeChart Pro ActiveX 8.0的主要特性如下: 是32位ActiveX控件,可以在VB、Delphi、MS Office VC++...

    vc++ 开发实例源码包

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! 如题。详细见源码。 GMem 内存管理单元源码。GMem.cpp...

    很好用的绿色源代码行数统计软件

    可用于对VC++、C++ Builder、Delphi、VB、C/C++、ASM、 Java、C#、SQL 等程序源码进行详细的统计,可以准确的分 析出程序中代码行、注释行和空白行的行数。程序会自动根 据你选择的文件类型选择相应的统计方式,并将...

    vc++ 应用源码包_6

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    短信猫二次开发包最新版

    本包二次开发接口适用于WAVECOM 西门子 诺基亚 摩托罗拉等支持标准AT指令的GSM短信终端 里面包括C# C++Builder Delphi VB Net VB VC++等语言的例子 本人也测试过 绝对可用

    文本语音朗读开发包

    在你的软件中加入文本朗读,混读功能,支持中文,英文混合朗读,...提供VC++,VB,Delphi,C++ Builder的详细例程,帮助文档,帮助你轻松使用。 只要短短的几条语句,就可以让你的软件轻轻松松朗读文本,轻松进入语音世界。

    金锋文件下载控件

    可非常方便的应用于C++ Builder、Delphi、VB、VC++、C#、VB.net、Delphi.net、易语言等所有支持ActiveX控件调用的开发工具中。并且可以很方便的在网页中使用该控件。3.5版同时提供ActiveX版控件及Delphi专用控件。

    麦克风多路实时输出SDK1.0版

    麦克风多路实时输出开发包1.0版 1、麦克风可以选择任意声卡输入。(其实LINE-IN同理)2、麦克风输入可以让所有声卡发声,左右...(如:VB,DELPHI,C++ Builder,VC++等等)6、适用与公共广播,数字监控,远程播放等。

Global site tag (gtag.js) - Google Analytics