【问题标题】:C++ Builder or Visual Studio [closed]C++ Builder 或 Visual Studio [关闭]
【发布时间】:2010-11-20 19:06:36
【问题描述】:

我拥有一家软件开发公司。我们为以他们的名字/头衔命名的其他公司开发软件。我们在会计/ERP 市场上也有几个自有品牌。我们的会计软件约占我们业务的 60%,并且使用 C++ Builder 编写。

了解 C++ Builder 的人在从 Borland 到 CodeGear 再到 Embarcadero 的转手过程中经历了一段非常坎坷的道路,并且可能在这之间有几次转手。 C++ Builder 已经在我们的会计软件上搞砸了我们很多次。 QuickReports 出了名的错误,他们的 XML 构建描述与 GUI 没有紧密耦合,导致构建无法工作——通常是错误的界面。

在过去的 8 年中,我们一直在稳步消除对 VCL 和错误组件的依赖,但是,一些第 3 方 VCL 组件仍然不容易更换。我们使用来自 Developer Express 的 GRID 包 - 很棒的产品。

我正处在一个十字路口,当你看到这个产品糟糕的历史时,我很难证明价格合理。

因此,我正在寻找可能处于类似情况并成功切换到 Visual Studio 的其他人遵循的建议或步骤。

除了Developer Express 工具外,我们已经慢慢地将大部分应用程序移至wxWidgets。而且我们编写了自己的 TSQL 抽象,也可以移植。

有什么想法或建议吗?您是否已将项目移至 Visual Studio 或使用新的 Builder XE 后发现它以前的许多缺点现已消失?

寻找“去过那里,做过那个”的建议。

【问题讨论】:

  • 尝试在programmers.stackexchange.com上提问
  • 我感受到你的痛苦。我正在考虑用 C++/CLI 包装遗留的 C++ 代码,并在前端使用 C# 和 WPF 来删除我对 VCL 和 RAD Studio 的依赖。不过,我可能会针对您的问题发布一个新的扩展,以评估社区意见。
  • 大约 7 年后……你做了什么?
  • 切换到德尔福。它总是比 cppbuilder 更新

标签: c++ visual-studio c++builder


【解决方案1】:

Visual Studio 无法与 C++ Builder 相比。

是的,它们都是 C++ 编译器,但是:

  1. Visual Studio 仅在使用 .NET 语言时是 RAD
  2. MFC 是“半辐射”,但不接近 VCL 的易用性
  3. Visual Studio 编译器更擅长生成优化代码,但 C++ Builder 使用的 Clang 相当不错
  4. Visual Studio 和 C++Builder 均符合标准(CB 使用基于 Clang 的编译器)
  5. C++ Builder 自带 Boost
  6. C++ Builder XE 比以前的版本好很多(不包括 Builder C++ 6.0)
  7. C++ Builder 中的 RAD 工具无法胜任 C++ 开发,没有比这更接近的了

对于非 VCL 依赖的代码,编译器的差异可能不会对您造成太大的伤害。我有一个为 VC6、VS2008 和 Builder 2010/XE 下的客户端编译的 DLL。我不得不折腾一些#ifdef,但其中大多数实际上是针对 VC6 的。

我能提出的最大建议是不要迁移到 MFC,这就是痛苦的开始。

还要考虑对开发人员的培训。在学习新编译器的特性时,您的开发人员生成工作代码的速度会明显变慢。

话虽如此,当我被要求在迁移到 VS2008/2010 或 Builder C++ 的新产品之间选择客户端时,我选择了 Builder,仅用于 RAD IDE。

祝你好运。

针对 C++Builder 10.2 (2017) 更新:

  1. 32 位和 64 位 Windows 都使用 Clang/LLVM(iOS 和 Android 也是如此)
  2. 32 位和 64 位 Windows 都使用 Boost 1.55
  3. 10.2 非常稳定,每次发布都会变得更好

这仍然出现在 Google 搜索中,因此再次针对柏林 10.1 进行了更新:

  1. 32 位和 64 位代码现在在 Windows 上使用 CLANG/LLVM
  2. OS X 的 32 位代码仍然使用旧的编译器
  3. Android 和 iOS 编译使用 CLANG/LLVM

【讨论】:

  • 谢谢,一些好的cmets。正如我所提到的,(可能不是很清楚)我正处于一个十字路口,我们可以负担得起进行 IDE 切换并消耗学习曲线。我们不使用 boost、STL 或任何直接 C++ 结构之外的东西,当然还有 VCL。我们发现 wxWidgets 中的一些 VCL 控件在我们使用它们的方式上并不相同,因此这是我们需要解决的另一个痛点。
  • 我们已经轻松地从 C++ Builder 迁移到了 C#。我们在 C++ Builder 中使用的大多数 VCL 控件在 .NET 中都有由相同供应商提供的等效控件。我记得当我转向 C# 时,我发现它是 C++ Builder 的自然延续。多年来我一直想要的 C++ Builder 功能(语言、IDE、框架)终于在 C# 中可用了!
  • 添加到这个; C++Builder 64bit 现在使用 clang 后端,所以它是固定点 3,4 向前移动。不幸的是,32 位目标仍然使用旧的、糟糕的编译器。
【解决方案2】:

迁移到 wxWidgets 的优势之一是您不会被绑定到像 C++Builder 或 Visual Studio 这样的 IDE。 C++ Builder 有几个问题,它的主要优势是 VCL 框架,在我看来,它仍然是 C++ 最好的 GUI 框架之一。问题当然是它需要C++ Builder,委婉地说确实存在稳定性和编译器性能方面的问题。

然而 Visual Studio 不是终极 IDE,最新版本充其量是有缺陷的,而且 C++ Builder 提供的许多 RAD 工具根本不存在于 Visual C++ 中(除非你愿意使用 .网络语言)。

我完全可以理解您希望减少代码对 C++ Builder 的依赖,说实话,我有点怀疑它会继续存在很长时间。但是,从您的帖子中听起来,您的大部分开发确实依赖于快速开发的应用程序,而在 C++ 世界中,C++ Builder 是满足这一特殊要求的最佳工具之一。

就我个人而言,我从未真正认为 C++ 是快速开发 Windows GUI 应用程序的最佳解决方案,也许您的重点不应该是寻找不同的 IDE,而是寻找更合适的语言,我建议使用 Delphi,使用 Delphi您将能够编译您现有的 c++ 构建器项目,甚至可以重用您现有的 VCL 组件。

我相信,Delphi 将比 C++ Builder 存在的时间更长,无论是 Delphi 形式,还是 Lazarus(freepascal 的 IDE)形式,它甚至是跨平台并支持 64 位开发。

如果不能选择更改语言,我现在会坚持使用 C++ Builder,但不升级到 XE 版本,我认为价格标签不合理。 (当然,鉴于您已经在开发一个相对较新的版本)。

【讨论】:

  • 倾向于同意大多数 cmets。但是,切换语言不是一种选择。我们都不知道 obj-Pascal,我也不在乎。我们已经完成了一些低级别的驱动程序,我担心在 Delphi 中复制将是一场噩梦。 Delphi 归同一家公司所有,所以不知道这对我有什么好处。
  • 驱动程序和图形界面在大多数情况下不必用相同的语言编写,实际上通常不需要。 Delphi 确实是 Embarcardero 产品,但这让您有机会保留现有的库。此外,您还可以选择切换到 Free Pascal。还有一件事,从使用 VCL 的 C++ 切换到 Delphi 并不是什么大问题。 VCL 是用 obj 编写的。帕斯卡。
  • 不要忘记 wxWidgets 也不完美 - C++Builder 具有本地控件,例如,如果本地用户体验对您很重要。这个问题非常古老(2010 年),从那时起就有 FMX(跨平台,也是本机控件)、基于 Clang 的编译器,适用于包括 Win32 和 Win64 等在内的许多平台。就 RAD 而言,我认为没有太多与它竞争,当然不是在 VC++ 方面。
【解决方案3】:

如果您坚持使用 C++ 并期望在 Visual Studio for C++ 中使用 RAD Studio 提供的相同类型的 IDE,您会感到震惊。

说实话,C++Builder 从来都不是 C++ 糟糕的 GUI 开发环境。这可能是 C++ 有史以来最好的。为什么?因为您可以利用所有出色的 Delphi 组件。

Visual Studio 中的 ExpressQuantumGrid™ Suite for C++ 无可替代。

大多数关于 C++Builder 的严重抱怨通常集中在它是否符合 STL 和 Boost 等标准。

我认为 Embarcadero 不会放弃对 C++Builder 的支持。问题通常与德尔福家伙(第 3 方)编写代码的方式有关。老实说,我只记得 DevExpress 的一个版本是个问题。

简短而甜蜜:如果您想使用 C++ 和某种 RAD/GUI 的东西,请坚持使用 C++Builder。

【讨论】:

    【解决方案4】:

    一年前我们从 C++Builder 6 升级到 XE。对 XE 非常满意。迁移到 UnicodeString 并不太困难。我们还将所有 BDE 代码转换为 BDExpress (DBX)。这花了很长时间和大量的重写,但非常值得。 要记住的是,两者都不是完美的。俗话说,篱笆那边的草总是看起来更绿。 如果您想要开发效率,请使用 C++Builder 和 VCL。 如果您想要非常长期的安全性,或者很容易找到程序员,那么 Visual Studio。 我的观点:保留你喜欢的,替换你不喜欢的。例如,保留 C++Builder 并替换 QuickReport。 顺便说一句,如果您做出决定,请告诉我们。

    【讨论】:

      【解决方案5】:

      这里是 C++ Builder PM。

      C++ Builder 有一些特定的优势:

      • 非常适合 UI 设计。可以使用 VCL(本机 Windows 控件)或 FMX(跨平台,如果需要,通常也可以使用本机控件)。 Visual C++ 远未达到,MFC 仍在像 1995 年那样设计 UI。

      • 它专注于跨平台。 Visual C++ 正在宣传它,但 C++Builder 提供了“完整堆栈”:不仅仅是编译,还有完整的库、UI 等等。 VC++ 是跨平台的,除非你需要一些不是的东西。

      • 它被需要数据库工作或其他“企业”项目的人广泛使用,主要是因为数据库库 (FireDAC) 的架构非常好并且支持大量数据库。

      • 它在所有平台上都使用 Clang,除了 macOS,它仍然有一个旧的编译器。它也正朝着更新到 C++17 的方向发展。

      • 它具有实时预览(设计您的应用程序,在手机等插入式设备上实时查看应用程序)等功能,这些功能似乎极大地激发了 MS 近期的某些功能 ;) 别担心,Visual Studio ,我们爱你 :) 所以它在很多领域都处于领先地位,尤其是在 x-plat 开发方面。

      弱点:

      • IDE 仅在 Windows 上运行。您可以在任何地方进行部署和调试,但 IDE 是 Windows。

      • 它只是 C++11,尽管朝着 C++17 发展。 MacOS 是(喘气)C++98。它在路线图上。您可以依靠它及时更新。

      • 代码完成和代码洞察力比 Visual C++ 弱。正在努力。

      • 它以 buggy 着称,这是最近的版本中积极开发的东西,也是我个人消除的动力。但是名声是很难摆脱的。

      【讨论】:

      • 一年后,代码完成、文档、代码洞察力仍然没有改善(在东京 10.2.3 中)。现在使用 C++ Builder IDE 仍然很痛苦。
      • 试用版 C++ Builder 10.3.2,VCL 项目,代码补全仅适用于“经典编译器”,“经典”编译器仅支持 C++98。
      【解决方案6】:

      我们正在缓慢地转向 VS2008 和 wxWidgets。对于可以为 C++ Builder(Developer Express 等)购买的每个组件,我们的计划是雇用某人来构建那个部件或雇用组件制造商来为我们构建一个wxWidget组件。

      C++ Builder 是目前在 Windows 上进行可视化编程的最佳方式。但是,没有 x64bit 支持,也没有 mac、linux 支持。据说他们要建crossx版本……我们还能等多久?

      【讨论】:

      • 很有趣,很想知道您的成功和面临的问题,包括您如何处理这些问题。自从我发表这篇文章以来,我们在使用 wxwidgets 方面取得了更大的进步。我在 VS 和 CBuilder 下运行 wxwidgets。 WxWidgets GUI 构建器在生产力方面不是很好。在 CBuilder 中,我可以双击一个 GUI 元素 (TButton),然后它会直接进入代码。在 WxWidgets 世界中并非如此……我对似乎没有经过深思熟虑的开发人员工具感到不满。
      • 从 XE5 开始支持 64 位
      【解决方案7】:

      @casablanca 说了什么,但如果您说您对现在使用的程序不满意,您也应该考虑非常好的替代方案:

      1. Eclipse (CDT): 很好很完整的产品
      2. NetBeans: 常与eclipse相比
      3. Code::Blocks:更简单,但经常被推荐,我相信构建系统集成不是那么好,但与 wxWidgets 完美集成
      4. QtCreator:我个人最喜欢的(干净、快速且可与 git 配合使用),但目前仅用于个人项目和小型应用程序,可能不适合 wxWidgets,虽然我也不使用 Qt :)

      一句警告:Visual Studio 调试器被认为是“尽善尽美”,但您为此付出了代价。以上 1-4 都是免费且广受好评的产品。

      【讨论】:

      • Visual Studio Express(包括调试器)现在是免费的,您可以使用它来开发商业产品。 Eclipse 对于 Java 来说已经足够了,但是它和 Visual Studio for C++ 恕我直言没有可比性。
      • 我应该说成本,就 IDE 而言,不是障碍。换句话说,我可以负担得起 Builder XE 的升级成本或切换到 VS 的成本,但在长期路线图方面证明它确实是我正在寻找的。我一直在玩 XE 的演示版,虽然我看到了重大改进,但我发现一些相同的旧不良行为仍然存在!!!我正在努力解决我应该花时间去 VS(或其他东西)还是找出另一组特质来处理 Builder XE 的错误。
      • 我非常讨厌 Eclipse。这是一个 java 应用程序,我将此归因于它的迟缓行为。我需要一个零延迟的 IDE。我是一个非常快速的打字员(就像我的开发人员一样),我们都为快速文件保存、编译等定制了我们的 IDE……Eclipse 不适合我们。很久以前看Code::Blocks,当时看起来很不成熟。我可能会花几个小时重新检查它,但我目前在 WxWidgets 上的时间投资似乎很有希望,除了他们没有像 CBuilder 那样好的 GUI 设计器或集成工具链这一事实。
      【解决方案8】:

      我开始担任 Windows 的 C++ 客户端工程师。我同意关于 MFC 非常糟糕的评论。在我的几个项目中,我们使用 XML 驱动的模板而不是使用 MFC 编写了自己的 UI 引擎,因此图形设计师可以在不需要软件工程师的情况下使用 UI。

      在我个人看来,C#.Net 是 Windows UI 开发的最佳选择。 IDE很棒。用 C++ 编写 UI 需要付出太多的努力。您仍然可以保留需要高性能的 C++ 片段。

      PS。刚刚在 VCL 的 wiki 页面上注意到了这一点。 “.NET 以 VCL 为蓝本,因为第一个 Delphi 版本的主要架构师之一,Anders Heijlsberg,去了微软,并且是那里的 NET 的主要架构师之一”

      【讨论】:

        【解决方案9】:

        这里的大多数答案混合编译器、IDE 和库(问题有重要的潜台词:如何为业务/GUI 应用程序选择环境)。问题和答案混合了 Visual Studio 语言和项目类型:C++ 对 GUI 的支持很差,C# 具有出色的生态系统等......(Basic、F# 等)都在 Visual Studio 的保护伞下。

        GUI 库:

        MFC 是一个库,非常古老且生产力低下。它对 *.RES 和 WM_Envents 的低级包装。没有 MS C++ 可能仍然无法编译(也许许可证禁止这样做)

        VCL 是对 Borland/Enbecaro 理念和在一个领域的市场份额最重要的库:构建 GUI 应用程序。 似乎很好用可移植的 opensurce GUI 库,但在可点击的 IDE 中几乎都没有那么好的支持

        IDE:

        个人感觉似乎是最好的答案。同意,只有生产者 IDE 才能对自己的 GUI 组件进行最佳控制。这里引用了很多独立的IDE,我会简短的。

        编译器:

        Brland C++ 编译器多年以来与 c++ 标准相差甚远(无法像 boost 那样编译主流 c++ 代码)。我相信许多目标是相互矛盾的:与 Object Pascal 代码或 C++ 标准共存。

        说实话:来自 C++ Builder 世界的大多数项目不需要使用像 boost 和类似的高度“黑客”代码,我个人将 Borland/Embecareo C++ 语言视为部分基于 C++(部分基于 VCL)的独立语言.一般来说,这个世界是封闭的(越来越多),没有驱动程序,没有兼容的库,没有现代网络协议等。

        我的意见:MS C++ 编译器(过去和现在)更好地支持标准。

        我是(也许很好)Borland C++ 程序员。现在我使用 C#/WinForms Visual Studio(有时,很少使用 Java SWT 或 Swing)和 Microsoft C++ 来处理少量 C/C++ 非 GUI 项目

        最后一句话:你是仅限于 C++ 语法,还是可以切换?我是的,切换到 C#。如果必须是 C++ 和高效的 GUI,请(越来越多)支付给 Embecadero

        【讨论】:

          【解决方案10】:

          我曾在 C++ builder 2006、2009、XE6 和 RS10 中工作过。

          我建议将您的项目转换为它。多年来,我遇到了许多问题,例如环境崩溃和许多其他古怪的行为。此外,如果您确实需要帮助,用户社区几乎不存在,因此您通常必须等待 24 小时并希望 Remy 回复您:) 或者尝试通读 delphi 代码并将其翻译成 C++(是的他们的 delphi 环境更受欢迎......不像面向对象的 pascal......)。

          无论您将其转换为何种环境,它都可能不会像您希望的那样干净或简单。所以知道会有很多工作,所以我建议看看你的长期战略。

          如果您需要桌面应用程序,我个人建议迁移到 java 并使用 SWT (https://www.eclipse.org/swt/)。我还建议坚持使用具有友好许可证的开源库,这样您就不必担心每年都需要付费,并且可以扩展您的业务。如果您不需要客户端系统,那么我仍然会推荐 java,因为它具有完整的堆栈并且非常强大。根据我的经验,Java 社区往往有更敏锐的人(在大多数情况下),答案很清晰。我见过一堆使用 .Net 的骇人听闻的东西 :)

          您确实提到了 Visual Studio,如果您不会做 java,那么我会推荐 C# 作为您的下一个最佳选择。但是你仍然需要向微软支付许可证费用,还要与用户组打交道。

          【讨论】:

            【解决方案11】:

            这意味着 Visual Studio 2010 的发布带来了一个新问题:即使您不升级到 .NET 4,升级 Visual Studio 是否有意义?答案是“是的”,原因有很多。但是,如果您打算使用 .NET 4,您会在 Visual Studio 2010 中找到很多支持。

            启动 Visual Studio 2010 后,您会注意到 Start Page 现在比 File 菜单更有用(参见图 1)。 Start Page 仍然提供对项目模板的访问,但页面的其余部分现在提供对主要 .NET 技术的培训资源的有序访问。

            打开文件后,您会发现,多亏了 Windows Presentation Foundation (WPF),编辑窗口中有更多的视觉反馈。例如,如果您单击一个变量名,该变量名的所有使用都会突出显示。此功能不仅限于变量——单击方法标题会自动突出显示所有返回子句和方法的结尾。但是这种额外的突出显示并非没有缺点。例如,在调试时,我有时会丢失当前行,因为它的突出显示被为当前选定项目添加的突出显示覆盖。 aztec tattoos

            【讨论】:

            • 目前我不建议升级到VS2010,大多数公司都有一个健全的政策,即在第一个服务包之前(有些甚至在前两个之前)不升级到新版本。 VS 2010 带来了许多有趣的新增功能,但它充其量仍然是错误的。
            • 好的,但是您是否已将 C++ Builder 应用程序迁移到 VS,同时又转到另一个 RAD 框架(如 wxWidgets)或转到 MFC?
            【解决方案12】:

            我不想这么说,但我自己的公司正处于同样的十字路口。我们已经使用 C++Builder 很多年了(从未升级到超过 v6),我们的管理人员最近扣动了扳机,以便向前切换到 Visual Studio :-( 我认为我们不会移植现有的 C ++Builder 应用程序很快就会迁移到 VC++,因为这将是一次重大的重写,但我们未来的新产品现在将在 VC++/.NET 中。

            【讨论】:

            • 那是怎么结束的。你成功了吗?
            • 什么成功了?情况如前所述。没有任何东西被移植到.NET。现有项目保留在 C++Builder 中,只有少数项目仍在维护,其他所有项目都是用 C# 从头开始​​重写的。
            猜你喜欢
            • 2010-10-01
            • 1970-01-01
            • 2010-09-06
            • 2015-01-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-14
            • 1970-01-01
            相关资源
            最近更新 更多