我是一位经验丰富的Java程序员,在过去的几年里,他一直在做很多Win32的工作.主要是我一直在使用VB6,但我真的需要转向更好的东西.
我花了一个月左右玩Delphi 2009.我喜欢VCL GUI的东西,Delphi似乎比VB6更适合Windows API调用,我真的很喜欢OO比VB6好多了,我喜欢这个单元IDE附带的测试框架.
但是我真的很难为Delphi没有广泛使用的垃圾收集器这一事实 - 不得不手动释放每个对象或者使用接口来解决所有问题似乎对你以面向对象的方式有效地做事的方式产生了很大的影响.另外,我并不是特别热衷于语法,或者你必须在方法的顶部声明变量.
我可以处理Delphi,但我想知道C++ Builder 2009对我来说是否是更好的选择.我对C++ Builder和C++知之甚少,但我对Delphi知之甚少.我知道C++语言有很多东西,但我怀疑它只需要知道它的一个子集就可以有效地完成工作......我听说今天的C++编程比C++更高效. 10年前.
我将只进行新的开发,所以我不需要掌握C++语言的每个方面 - 如果我能找到每个Java语言功能的等价物,我会很高兴,随着我的进步,我可以开始寻找在更先进的东西更多.(对不起,如果这听起来很痛苦 - 如果是这样,请让我直截了当!)
那么,对于一个对Delphi和C++ Builder都不熟悉的Java程序员来说,你会认为它是Win32 exes和dll高效开发的更好选择,为什么?你认为每个人的利弊是什么?
Delphi或C++ Builder - 这是一个艰难的选择!
如您所知,从IDE和RAD的角度来看,它们基本上非常相似.
每个人的利弊 - 无论背景如何 - 都有点像这样.两者共享一个伟大的双向RAD表单设计器和框架(VCL),是本机Windows开发的理想选择.
德尔福:
FOR:大型,活跃,热情的社区
FOR:Delphi 2009是多年来最好的版本
FOR:Delphi"单位"使C源/头文件对显得过时
反对:没有自动销毁,因为对象离开范围,因此很多"最终在你的代码中
反对:语言可以是'罗嗦',这是一个品味问题
反对:使用其他语言的第三方DLL或库(特别是C)需要编写Delphi头文件
C++ Builder中
FOR:C++ Builder 2009可能是有史以来最好的版本
FOR:RAII成语极大地简化了内存管理
FOR:模板非常有用和强大,即使C++ Builder实现有一些错误.
FOR:支持BOOST和其他基于模板的现代库(即使Boost支持不是100%)
FOR:与Delphi的良好互操作意味着大多数Delphi组件都可以轻松使用.
FOR:易于使用带有C/C++标头的第三方DLL /库.
FOR:C++在CV上的表现可能比Delphi更好.
反对:CB2009只是"unicode" - 这对代码可移植性的影响是不同的,并且不如Delphi那么深思熟虑
反对:C++ Builder用户群比Delphi小得多.也许20%或更少.
反对:几年前Borland/Inprise几乎杀死了BCB,并且只有在社区做出重大努力后才复活.(然而,Codegear/Embarcadero承诺确实令人印象深刻)
反对:C++ Builder在Codegear中并不是最重要的.
反对:第三方组件供应商并不总是理解/支持C++ Builder
就是这样.只是说明我的立场,我是一个快乐的BCB2007/2009用户(自BCB5以来),我也很少使用Delphi.几年前,我考虑过从C++到Delphi的转换,但缺乏RAII成语是我发现难以接受的一件事.
使用Delphi,你可以使用Barry Kelly编写的Boehm垃圾收集器API,这样你就可以在Delphi中进行垃圾收集了.在他作为编译器架构师去CodeGear工作之前,Barry写了这个.它确实存在大型应用程序的问题,并且很可能不适用于64位Delphi.他在这个播客采访中谈到了这个问题.
即使你不使用那个垃圾收集内存管理器,我仍然会建议使用Delphi而不是C++.C++为一般开发提供的唯一优势是大括号语法.如果您不介意Delphi语法,那么对于大多数事情,您会发现它更好.授权C++ Builder拥有整个Delphi VCL和RTL,因此它没有Visual C++那么糟糕,但我仍然认为Delphi是更好的选择.
对于Excel加载项(正如您在评论中提到的),我建议使用Delphi over C++ builder,因为它有更好的COM支持(我认为您需要Excel加载项).
Delphi将更容易与您达成协议,确保您必须管理您的记忆,但它非常简单
MyObj = TMyObj.Create; try MyObj.DoSomething; finally MyObj.Free; end
在Delphi中,所有对象都在堆上分配,因此如果您创建它,则规则非常简单.
C++及其基于堆栈和堆的objs意味着您需要学习更多内容以及更多陷入困境的范围.
自从BCC 4.1/DOS和Delphi从2007年到2007年使用Borland C和C++编译器之后,我可以诚实地告诉你,无论哪种方式,你都可以进行一次伟大的冒险.从Borland的Builder和RAD IDE上的C/C++开始,是微软的VC++,C++和.NET(从第一个MS-DOS版本使用VC - 米色三环迷你绑定器)的重大范式转换(和学习曲线).
C++和Delphi之间的选择是我建议你在两种语言的几个中小型项目之后做出的选择.我开始使用C程序员,大约五年后转向Delphi(V3.0),当VCL使Windows编程变得更容易和更高效.
请注意,对于来自其他语言(如COBOL,FORTRAN,VisualBasic)的程序员来说,Delphi是一种诱人的语言,因为它的语法和代码规则强制执行一种让人们摆脱困境的规则.C的简洁性和原始金属功能使其成为一种出色的系统编程语言(设备驱动程序,操作系统代码,实时嵌入式编程),但在没有经验的人手中它可以咬你.
Borland的C++ Builder(Delphi的VCL添加到C++编译器中)消除了许多C++锐边,是我第二喜欢的语言.由于Borland为这两种语言添加了.NET支持,因此使用Builder而不是VC++进行MS框架编程是一个很有力的论据.虽然与C++相比,C#内置了很多"友好",但如果我刚开始的话,我还是会坚持使用Delphi或Builder.
对于学习绳索,原型设计和快速概念程序,根本没有一种语言能够击败Delphi,尤其是VCL和第三方组件.没有炒作,只是事实.
就个人而言,我认为除了语言之间的差异外,还有其他重要的考虑因素.例如,Delphi IDE对于以所见即所得的方式构建GUI非常棒.我没有使用过C++构建器IDE,但如果它有一个像Delphi一样好的GUI构建器,我会感到非常惊讶.
虽然从表面上看,C++的语法看起来更像Java,但Delphi的对象模型实际上更接近于Java.尽管Delphi中存在指针,但实际上99%的时候都会使用对象引用(如Java中的引用).即使在现代C++中,我也不认为可以避免使用指针.并不是指针本身有什么问题,而是在实践中....
就个人而言,我现在大部分时间都是Java人,但我花了两年时间与Delphi合作,并且会在心跳中重新开始.相比之下,我对C++的经验非常有限,并且宁愿清洁厕所而不是回归那种语言:)