Embarcadero C++Builder作为IDE是一个不错的选择吗

Is Embarcadero C++ Builder a good choice as an IDE?

本文关键字:一个 选择 作为 C++Builder IDE Embarcadero      更新时间:2023-10-16

由于我们(我和我的同事)在VS2010 sp1中处理250 000+LOC的C++项目时越来越沮丧(这个IDE的速度之慢令人难以置信),在我的公司,我们正在讨论将代码迁移到一些不同的IDE。我们做了一些研究,Embarcadero C++builder 2011 XE似乎是一个强有力的候选者。有什么想法吗?它有什么好处吗?与VS2010终极版相比如何?

我从1.0开始使用C++Builder,我非常讨厌它。你可能会想,这么多年过去了,简单的小烦恼现在已经解决了,但事实并非如此。以下是我在使用C++Builder IDE时遇到的问题列表。

  1. 您的布局或个性从未得到维护。你创建一个,保存它,它只适用于某些事情。例如,调试器窗口将不会保持其位置,消息窗口也不会。如果您分离项目资源管理器,它有时会消失。大多数时候,重新加载你的个性也不能解决这个问题。你把窗户拖回原位时被卡住了。

  2. 调试器有时工作,有时不工作。在调试构建中,如果你设置了一个断点并开始遍历代码,你可以将鼠标悬停在一个变量上进行检查。有时这种方法有效,有时它不适用于完全相同的变量。疯子

  3. Eclipse会查找代码错误,比如如果您忘记在语句末尾放一个分号,它会放一点?在页边空白处做标记。C++编译器不会做任何类似的事情。它会给您一个神秘的编译时错误消息。

  4. 最新版本的C++Builder使用类似于VS的makefile;这是一个XML混乱。Eclipse使用CMake和Makefiles。我在一些地方读到CMake维护人员正在寻找C++Builder生成器,但上次我检查过它不存在。我做嵌入式和交叉编译,所以有时我的C++Builder代码会被复制到我的嵌入式开发环境中或与之共享,最终我会维护两个构建环境。

  5. 虽然不是真正的IDE,但C++Builder并没有利用多个CPU来编译代码。然而,有一个第三方工具,你可以花更多的钱来获得它。它叫做TwineCompile(http://www.jomitech.com/twine.php)。在Eclipse中,它们调用您正在使用的任何编译器(gcc等)和这些编译器,并提供support-j选项。

  6. C++Builder附带了一个有限版本的AQTime,它是一个动态代码探查器。花更多的钱,你就会得到更高级的版本。Eclipse支持许多动态和静态代码分析(这也需要花费$$),但至少插件是存在的。我们使用Klockworx。

  7. 据我所知,C++Builder不支持像GIT这样的外部源代码控制。Eclipse确实如此。我认为,C++Builder自带subversion。如果它支持GIT,我就永远无法让它发挥作用。当我给它一个git路径时,它告诉我它不理解URL方案。

  8. 我编写的某些模板代码导致编译器segfault,必须完全重新启动IDE。这对我来说太疯狂了。你有一个已经有10多年历史的编译器,它仍然在分段。我有一段C++模板代码,当我把它带到运行完全相同版本的C++Builder的工作计算机上时,它编译得还可以,但在我的家用机器上它会出错。我绝对相信没有病毒等不利因素在起作用…

  9. 在编译可能需要很长时间的大型项目时,您无法使用IDE浏览代码。有时,您可能会看到编译器警告滚动而过,您必须等待编译作业完成才能检查提到的行,或者使用其他方法打开文件。

  10. C++Builder IDE有一个项目组的概念,它包含或多或少独立的子项目。项目组没有像子项目那样的项目组包含/链接路径的概念。子项目有一个基、调试、发布路径,调试和发布可以从基继承或阻止,但在项目组级别没有。IDE具有可以继承的全局设置,但它适用于您在IDE中所做的一切。因此,对于给定的项目组,没有办法进行修改,只能修改一组子项目的include/linker路径。我只是觉得他们本可以做得更好。

  11. C++Builder的Build输出没有颜色编码,例如,以红色显示错误,以其他颜色显示警告。一切都是黑白的。VC和Eclipse的颜色代码,并提供更改各种警告和错误颜色的选项。C++Builder中的输出选项卡也是如此。在大型项目中,很难研究带有其他噪声的编译器警告。在C++Builder的IDE中,你可以选择警告级别,但这只会影响"输出"选项卡中的输出,而且你仍然会收到其他愚蠢的噪音,比如让我知道它正在删除链接器状态文件"CleanLinkerStateFiles">

除非您正在进行Windows桌面GUI开发,否则请远离Embarcadero/C++Builder。早在Borland时代,我就开始使用C++Builder版本1,并且有一些大型项目在VCL中投入了大量资金,所以我在这些项目中都坚持使用它,但在我的所有新项目中,我一直在使用Eclipse。

关于C++Builder的一个积极的方面是,VCL相当不错。它不是多线程的,但它非常适合快速创建桌面GUI应用程序。我认为在CBuilder中安装一个基于C++的GUI应用程序比在VS中要快得多。而且CBuilder似乎有大量免费和付费的GUI组件;再次以C++为焦点。我知道C#+VS有丰富的GUI控件。

更新:我今天刚刚遇到一个问题,与本论坛中提到的问题相同:http://qc.embarcadero.com/wc/qcmain.aspx?d=57631

[ILINK32警告]警告:检测到错误(ILI4536)

下定决心。这是警告还是上帝的错误?

一直滚动到最后,你会发现有人在修改ILINK32.EXE以使其重新工作。截至今天上午,我们的构建停止工作。当我们争先恐后地理解并找出该怎么办时,我们已经死在了水里。

这是你想要依赖的编译器/IDE吗?同样,这款产品已经存在了十多年,但它仍然存在这样的问题。我觉得这是完全不能接受的。一个不在乎的公司的垃圾产品。

实际上不是一个答案,但我将把它留在这里:

  1. 它需要钱(是的,VS也是,但你已经拥有了,不是吗?)
  2. 将一个足够大的项目迁移到新的IDE(和编译器)并不容易,更不用说与你一起工作的人和他们的习惯了(我可能会退出)
  3. 还有一个新的编译器,有它的品牌错误和需要了解的注意事项。而且它的应用远不如VC++广泛。然而,它是基于Clang的,Clang应该比VC++更好地支持标准,并且更容易移植现有的C++代码
  4. 迁移的难度很大程度上取决于项目的性质(它是基于GUI的吗?它在多大程度上依赖MS VC++作为编译器?)

Embarcadero XE没有任何积极的一面,既没有老化的IDE,也没有老化的编译器。只有当你绑定到它(遗留软件)或你想使用Delphi时才使用它。

对于C++,帮自己一个忙,加入21世纪:坚持使用更强大、更通用、更现代的东西,比如VC++或Qt。

这个问题实际上是个人意见的问题。

我个人非常讨厌Visual Studio,我像躲避瘟疫一样躲避它。我对Eclipse的了解仅限于Java,但即使在那时,我也很难使用它

我已经使用C++Builder 15年了,从v3.0一直到最新的XE6。是的,它有一些怪癖和局限性,但我仍然发现它是我最容易使用和高效使用的IDE,一旦你知道如何使用(或围绕)它们。也许我的经验阻碍了我使用其他IDE的能力,但顺其自然。我仍然更喜欢C++Builder而不是其他任何IDE。但我只把它用于Windows开发(VCL非常成熟和健壮),我还没有用它进行跨平台开发(FireMonkey还有一段路要走,要进化和成熟)。我确实使用了很多开源项目。是的,有时我不得不调整他们的项目和/或代码来编译它们,但这通常是一次性的,然后它们就可以正常工作了。

我建议使用Eclipse。

  • 作为一个IDE,它也需要一段时间才能使用,但它很好值得付出努力
  • 它适用于Mac操作系统、Linux和Windows
  • 您需要在计算机上安装Java,但是真的不是问题
  • 它支持Cygwin、MinGW和MicrosoftVisual C++工具链。CDT Builder中的构建也相当不错
  • 您可以使用它来开发C++以外的语言(Java、JavaScript、PHP..)
  • 你可以通过安装插件来扩展它的功能
  • 它是免费的

  • 我有没有提到它有一个内置的Web浏览器?在编码时参考在线文档非常有用

1。我们有一个超过1M LOC的解决方案,VS2010可以处理它。我们特别喜欢/MP开关,用于在所有可用的CPU内核上编译。

您没有指定硬件。如果你还没有在i7-2600+快速SSD上运行,我建议你先尝试硬件升级。

2。我过去经常使用Borland工具。德尔福相当稳定;C++编译器的bug要多得多。几年前,我帮助将旧的Delphi项目升级到新的DelphiIDE,并安装了一些service Pack。它甚至在自Turbo Pascal以来一直有效的基本文件IO API中也存在漏洞。我们不得不降级到以前的版本。我预计C++Builder的质量不会比VS2010好多少。

3。您没有具体说明什么是慢速。您可能希望将一些项目转换为单独编译的组件。还要确保使用PCH。

此外,如果您滥用C++包含模型,在每个单元中都包含了大量不需要的头文件,也值得研究。如果在预处理之后,Intellisense和编译器必须处理大量的代码,那么没有IDE可以提供帮助。

我没有将Visual Studio 2010 Ultimate用于C++,而是用于C#和C#web服务开发。话虽如此,作为VS 2010 Ultimate和C++Builder XE之间的测试,我创建了一个简单的VS C++Windows窗体应用程序,点击按钮并通过事件处理程序显示"Hello World"。只要您记得访问View|Toolbox,就可以将按钮放到VS窗口设计器上。如果没有,则需要一些时间来追踪视觉组件的悬挂位置。

由于没有任何语言意义的原因,按钮点击事件处理程序有一个签名,看起来像:

System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
}

正如人们所期望的那样,它进入头文件。^符号没有什么意义。使用它与CLI/CLR结合得更好吗?我期望*指示一个指针。

在使用默认的Form1(只创建了头文件)并随后添加了一个新的windows表单之后,我终于获得了相应的cpp文件。也许C++Windows窗体向导有一个错误。谁知道呢?无论如何,当通过双击设计器中的按钮来添加按钮单击事件时,cpp不会获得我测试的任何一种cpp形式的方法。也许这很正常,我不知道。这样做的最终结果是,在尝试在cpp中使用MessageBox函数后,只会导致编译错误。我确信还有另一个头文件必须在include路径中。我没花时间追踪这件事。试图设置标签组件文本属性也导致编译错误。大约20分钟后,我沮丧地去了C++Builder XE3。

在C++Builder中,我测试了项目向导中的VCL Forms、FireMonkey Desktop和FireMonkey Metropolis应用程序创建。果不其然,在总共大约三分钟的时间里,我有三个不同的应用程序在说"Hello World",它们都在调用C++Builder的内置全局快捷方式函数ShowMessage("insert message here")。时间可能略有不同,因为我没有用秒表计时。保存具有有意义名称的文件所花费的时间比代码本身更长:在每个cpp中的相应单击事件体(而不是标头)中键入一行。

对于我们这些喜欢Brief密钥映射的人来说,VS的另一个主要日常用法是,将VS配置到Brief中非常具有挑战性。在C#中进行大量开发时,我会在Brief模式下使用C++Builder的编辑器,根据需要随时保存文件。当您单击返回VS IDE时,VS确实正确地检测到文件更新。

关于上面OP提到的速度较慢的问题,我建议也要密切关注与运行Visual Studio相关的硬件平台。我注意到,如果.Net框架已经过时,那么VS在IDE中的速度会很慢。项目使用哪种语言似乎也无关紧要。我使用Visual Studio 2010 Ultimate on Parallels和Windows XP Pro,有两个虚拟内核。通常,VS在IDE中正常响应。在使用它的时候,我不会想,"VS太慢了。">

关于从VS向C++Builder迁移25万行,我不确定VS事件处理程序是否会通过某种向导或其他迁移工具进行转换。如果在所有事件处理程序中都一致使用^符号,那么对于自定义编写的正则表达式转换来说可能不是什么大事。如果项目的用户界面层非常薄,业务规则和数据量很大,那么转换到C++Builder应该相对容易。我希望为新的用户界面点击事件提供一些新的编码,将用户交互传递到其他层。对于原型设计,使用数据感知组件可能是您的最佳选择。在正常的应用程序运行中,希望业务规则层使用STL和内置的C++Builder数据结构(甚至是AnsiString c_str()方法)与非数据感知组件交互。性能和用户体验可能会有所改善。

开始编辑

对C++Builder XE3的一大冲击(请注意,这是目前五个版本中的一个版本之后的两个版本)是,64位Windows支持仅适用于控制台应用程序。在项目树视图中的目标平台选项上用鼠标右键单击时出现的Add Platform子菜单的使用方法没有被频繁广播,这更是一个打击。这种在项目可能首先针对32位Windows之后向项目添加更多平台的快速方法实际上是无痛的。单击唯一的子菜单选项后,会出现一个新的子对话框,并出现一个下拉框以选择新的操作系统以及相应的32位或64位版本。在我看来,Embarcadero并没有经常展示添加其他目标平台是多么简单。因此,为了缓解开发人员的痛苦,如果事先不知道的话,我在Embarcadero网站上找到了三个网页。第一个有创建FireMonkey桌面应用程序的漂亮图片。步骤5具有目标平台|添加平台子菜单选项的屏幕截图,用于添加Mac OS X平台。这里的标题是为桌面平台(C++)创建您的第一个FireMonkey应用程序:http://docwiki.embarcadero.com/RADStudio/XE2/en/Creating_Your_First_FireMonkey_Application_for_Desktop_Platforms_%28C%2B%2B%29

这里的标题为创建跨平台应用程序的步骤,这是一个更简洁、无图片的过程:http://docwiki.embarcadero.com/RADStudio/XE2/en/Steps_in_Creating_Cross-Platform_Applications

以Windows为中心的过程和小屏幕截图标题为Windows 64位跨平台应用程序开发:http://docwiki.embarcadero.com/RADStudio/XE3/en/64-bit_Cross-Platform_Application_Development_for_Windows

我在Embarcadero论坛上发现,从最初的XE3版本升级到Update 1 XE3版本存在目标平台选择问题。可能有一两个内部路径设置不正确,并且可能必须更改原始XE3项目文件(.cbproj)才能启用Win64。显然,原始发布项目文件将此设置为false。

XE5(注意,2013年12月的第五版)应该同时支持64位Windows,支持控制台和表单应用程序(例如VCL、FireMonkey Desktop、FireMonkeyMetropolis)、OS X和iOS(Android即将推出)。有关完整列表,请查看所有XE5详细信息的C++Builder功能矩阵pdf:

http://www.embarcadero.com/products/cbuilder/cbuilder-feature-matrix.pdf

由于XE3更新1已被证明可以解决目标平台选择问题,因此与原始XE3相比,不应该有任何奇怪的行为。我还看到了Embarcadero的一篇帖子,其中一位TeamB成员表示,对于移动应用程序,目标平台的选择是经过过滤的,因此不允许将桌面平台项目与移动平台项目混合使用。因此,如果你想尝试创建一个桌面应用程序,然后用鼠标点击将其强行放入iPhone,那么就必须使用其他一些开发工具。C++Builder和/或Delphi不会试图将桌面组件压缩到移动设备上。你必须从一个移动应用程序项目开始。以下是论坛链接:https://forums.embarcadero.com/thread.jspa?threadID=96371

(结束编辑)

如果对我的总体背景感到好奇,我从第一个版本开始就使用C++Builder,Visual Studio.NET(C#1.0)和Visual Studio 2010 Ultimate。Visual Studio似乎比任何其他语言都更专注于C#。选择"文件"|"新建项目"时,共有18个C#项目和15个C++项目。若要访问Visual Studio C++项目区域,请确保通过打开"其他语言"子树来访问它。

在最近的互联网帖子中,Visual Studio最新版本和最棒版本以及C++Builder最新版本与最棒版本之间,购买价格相差数千美元。即使从未安装过任何一个工具来升级,与Visual Studio相比,C++Builder仍然是一个便宜货。在花掉辛苦赚来的钱之前,请进行彻底的调查。希望这两种工具都有30天的试用安装,可以并排比较,因为您的里程可能会有所不同。