16

我是一个非常有经验的 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 exe 和 dll 的高效开发的更好选择,为什么?您认为每种方法的优缺点是什么?

4

12 回答 12

23

Delphi 或 C++ Builder - 这是一个艰难的选择!

如您所知,从 IDE 和 RAD 的角度来看,它们基本上非常相似。

每个人的优点和缺点 - 无论背景如何 - 有点像这样。两者都共享一个出色的 2 路 RAD 表单设计器和框架 (VCL),非常适合原生 Windows 开发。

德尔福:

  • 适用于:大型、活跃、热情的社区
  • FOR:Delphi 2009 是多年来最好的版本
  • FOR:Delphi“单元”使 C 源/头文件对显得过时
  • 反对:当对象离开范围时不会自动销毁,因此代码中有很多“finally”
  • 反对:语言可以“罗嗦”,这是一个品味问题
  • 反对:在其他语言(尤其是 C)中使用第三方 DLL 或库需要编写 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 习语是我发现难以接受的一件事。

于 2008-10-11T08:48:25.780 回答
10

使用 Delphi,您可以使用Barry Kelly编写的Boehm Garbage Collector API ,这样您就可以在 Delphi 中进行垃圾收集。Barry 在去 CodeGear 担任编译器架构师之前写了这篇文章。它确实对非常大的应用程序存在问题,并且很可能不适用于 64 位 Delphi。他在这个播客采访中谈到了很多。

即使您不使用那个垃圾收集内存管理器,我仍然会推荐 Delphi 而不是 C++。C++ 为一般开发提供的唯一优势是花括号语法。如果您不介意 Delphi 语法,那么对于大多数事情您会发现它更好。诚然 C++ Builder 拥有整个 Delphi VCL 和 RTL,所以它没有 Visual C++ 差,但我仍然认为 Delphi 会是一个更好的选择。

对于 Excel 插件(正如您在评论中提到的),我会推荐 Delphi 而不是 C++ builder,因为它具有更好的 COM 支持(我相信您需要 Excel 插件)。

于 2008-10-07T21:22:58.610 回答
8

Delphi 会让你更容易接受,当然你必须管理你的记忆,但它非常简单

MyObj = TMyObj.Create;

try
  MyObj.DoSomething;
finally
  MyObj.Free;
end

在 Delphi 中,您的所有对象都分配在堆上,因此规则非常简单,如果您创建它就释放它。

C++ 及其基于堆栈和堆的 obj 意味着您有更多的学习空间和更大的陷入麻烦的空间。

于 2008-10-07T21:12:15.887 回答
7

从 BCC 4.1/DOS 和 Delphi 3.0 到 2007 开始使用 Borland C 和 C++ 编译器之后,我可以诚实地告诉你,无论哪种方式,你都在进行一次伟大的冒险。在 Borland 的 Builder 和 RAD IDE 上从 C/C++ 迁移是从 Microsoft 的 VC++、C++ 和 .NET(从第一个 MS-DOS 版本中使用 VC——米色三环迷你活页夹)的重大范式转变(和学习曲线)。

C++ 和 Delphi 之间的选择是我建议您在用两种语言完成一些中小型项目后做出的选择。我最初是一名 C 程序员,大约五年后切换到 Delphi (V3.0),当时 VCL 使 Windows 编程变得更容易和更有效率。

请注意,对于来自其他语言(如 COBOL、FORTRAN、VisualBasic)的程序员来说,Delphi 是一种诱人的语言,因为它的语法和代码规则强制执行一种纪律,使人们远离麻烦。C 的简洁性和原始金属力量使其成为一种出色的系统编程语言(设备驱动程序、O/S 代码、实时嵌入式编程),但在没有经验的人手中,它可能会咬你一口。

Borland 的 C++ Builder(Delphi 的 VCL 添加到 C++ 编译器)消除了 C++ 的许多尖锐边缘,是我第二喜欢的语言。由于 Borland 为这两种语言都添加了 .NET 支持,因此强烈主张使用 Builder 而不是 VC++ 进行 MS 框架编程。尽管与 C++ 相比,C# 具有大量内置的“友好性”,但如果我刚开始的话,我仍然会坚持使用 Delphi 或 Builder。

对于学习技巧、原型设计和快速概念程序,根本没有一种语言可以击败 Delphi,尤其是在 VCL 和第三方组件方面。没有炒作,只有事实。

于 2008-10-14T19:56:32.217 回答
6

就个人而言,我认为除了语言之间的差异之外,还有其他重要的考虑因素。例如,Delphi IDE 非常适合以所见即所得的方式构建 GUI。我没有使用过 C++ builder IDE,但如果它有一个与 Delphi 一样好的 GUI 构建器,我会感到非常惊讶。

虽然表面上 C++ 的语法看起来更像 Java,但 Delphi 的对象模型实际上更接近于 Java。尽管 Delphi 中存在指针,但实际上 99% 的时间都在使用对象引用(如 Java 中的那些)。即使在现代 C++ 中,我也不认为可以避免使用指针。并不是说指针本身有什么问题,而是在实践中......

就个人而言,这些天我主要是 Java 人,但我在 Delphi 上工作了 2 年,并且很快就会回到它。相比之下,我在 C++ 方面的经验非常有限,我宁愿打扫厕所也不愿回到那种语言 :)

于 2008-10-07T22:42:19.713 回答
3

当然java sintax更像c++而不是delphi,但是我认为对象模型更类似于delphi:

  • 单继承。接口存在,但更像 COM 而不是 java 接口。
  • 对象在堆上分配并通过引用访问

你可以在这里找到比较这三种语言的论文

于 2008-10-07T21:04:38.430 回答
3

我想如果你使用Delphi,你会发现它在使用几次后会更容易,而且它有更多的第三方支持和C++ Builder之前在Delphi中引入的一些特性

还阅读了前 Java 的这篇博客,现在是 Delphi 中大部分数据库和 datasnap 工作的幕后推手 Steve Shaughnessy,讲述了他在使用 Java 10 年后对 Delphi 编程的经验 :-) http://blogs.codegear.com/steveshaughnessy/ 2006/12/03/30193

于 2008-10-09T12:26:41.173 回答
2

“例如,Delphi IDE 非常适合以所见即所得的方式构建 GUI。我没有使用过 C++ builder IDE,但如果它有一个与 Delphi 一样好的 GUI 构建器,我会感到非常惊讶。”

实际上,C++Builder GUI 编辑器是完全相同的编辑器,并且以相同的方式工作。太棒了。

.Net 有大量的类,就像 Java 一样。C# 具有与 Java 相似的语法,并且由于庞大的类库的工作方式非常相似。它是一个非常适合编程的环境。但坦率地说,Delphi 是一种更令人愉快的语言、IDE 和通用环境。C# 是由设计 Delphi 的同一个人设计的,并且在许多方面“感觉”非常相似,所以不要认为因为 Delphi 编译为本地代码(尽管您也可以使用 Delphi .Net),所以它从根本上更难使用。根本不是。

我个人的推荐是 Delphi,因为它是一种很酷的语言。但是,如果您对学习 C++ 感兴趣,C++ Builder 可能是最好的方法。

于 2008-10-09T05:31:34.520 回答
2

在 C++ VCL 中没有什么是我无法用 Delphi VCL 做的,几乎所有 Delphi 组件在 C++ Builder 中都能正常工作。因为我同时为 Windows 和 UNIX 编程,所以 C++ 更便携。

如果您为容器使用 C++ STL 或其他设计良好的库,那么垃圾收集就会成为一个有争议的问题,否则手动 GC 并不困难(很快就会养成良好的习惯——不管是否有 GC,您都应该练习这些习惯)。只要您尽可能使用 RAII,将内存管理封装在容器中,明确对象所有权并仅将指针用作可空引用(无论语言如何,您都应该这样做),GC 真的不应该是问题。

于 2008-12-19T22:38:04.463 回答
1

在过去的 10 年里,我在 Delphi 进行了专业编程,并且对 C++ 有很好的了解。我会去德尔福的方式。语法更简单,内存管理也更简单。我还没有听说过用于本机 Delphi 的 GC...虽然我不太喜欢由于 .NET gc 而引入的 Delphi.Net 代码中的陷阱,但我不太喜欢 gcs ;-)

于 2008-10-13T15:56:09.253 回答
1

之前忘记提的一件事:

从成本的角度来看,您实际上不需要选择。购买RAD Studio软件包,只需比一种单独的语言支付适度的额外费用,您就可以在同一个 IDE 中获得 Delphi和C++Builder 个性。

而且,值得一提的是,C++Builder 包包括 Delphi 编译器,您可以编写/添加 Delphi .pas 文件并将它们作为 C++ 项目的一部分。

于 2008-10-13T18:31:35.523 回答
1

如果您要进行大量 Windows 编程,请学习 C++。你会为了去法国旅行而学习德语吗?C/C++ 是 Windows API 的本机语言。在 C/C++ 中处理 WinAPI 数据结构和调用要简单得多。至于 RAD,我已经使用 MSVC 大约 13 年了,我可以像使用 Visual Studio 的 GUI 编辑器的任何人一样快速地组装一个 GUI 应用程序。

于 2009-01-13T19:32:40.607 回答