Embarcadero C++ Builder作为集成开发环境是否是一个好的选择?

11

由于我和我的同事在使用VS2010 sp1处理超过250,000行的C++项目时感到越来越沮丧(这个IDE的缓慢程度令人难以置信),在公司中我们正在考虑将代码迁移到其他的IDE。我们进行了一些研究,Embarcadero C++ Builder 2011 XE似乎是一个强有力的候选者。你对此有什么想法吗?它好用吗?它如何与VS2010 Ultimate相比?


9
"Embarcadero"这个可怜的Borland孩子自从上次我使用它以来已经更名了多少次? - unkulunkulu
1
我认为你可能会因为VCL而转向C++ Builder,而不是IDE。你知道吗,目前它只能生成32位可执行文件?64位版本预计将在接下来的几个月内发布。 - David Heffernan
1
你有没有考虑分解项目并评估Eclipse CDT? - Michael-O
2
要么你的电脑太老旧了,要么你需要重新组织你的代码,因为你包含了太多的头文件。在我看来,我宁愿选择VS2010的“缓慢”(其实并不那么糟糕),因为它能提供更智能的语法高亮等功能,而不是选择C++ Builder那种容易出错/过时的编译器! - James Johnston
1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - James Oravec
显示剩余3条评论
7个回答

40

我从1.0版本开始使用C++ Builder,但我非常讨厌它。多年过去了,你可能认为一些简单的小问题现在已经被修复了,但事实并非如此。以下是我对C++ Builder IDE的问题清单。

1. 你创建的布局或个性化设置无法保持不变。你创建了一个布局,保存后只适用于某些内容。例如,调试器窗口不会保持其位置,消息窗口也是如此。如果你分离了项目资源管理器,它有时会消失。大多数情况下重新加载你的个性化设置也无法解决这个问题。你只能拖动窗口重新排列。 2. 在调试版本中,如果你设置断点并开始逐步执行代码,你可以将鼠标悬停在变量上进行检查。有时它有效,有时它对于完全相同的变量无效。非常疯狂! 3. Eclipse会查找代码错误,例如如果你忘记在语句结尾处放置分号,它会在边缘放置一个小问号。C++ Builder没有做任何类似的事情。它会给你一个难以理解的编译时错误信息。 4. 最近的C++ Builder版本使用与VS类似的makefile;它是一个XML混乱。Eclipse与CMake和Makefiles一起工作。我在一些地方读到过,CMake维护者正在寻找一个C++Builder生成器,但我最近检查时并没有发现这个存在。我进行嵌入式和交叉编译,所以有时我的C++ Builder代码会被复制到我的嵌入式开发环境或与之共享,我最终需要维护两个构建环境。 5. C++ Builder实际上不利用多CPU编译代码。然而,有一个第三方工具可以花更多的钱来获取此功能。它叫做TwineCompile (http://www.jomitech.com/twine.php)。在Eclipse中,它们调用你正在使用的任何编译器(gcc等...),这些编译器和make支持-j选项。 6. C++ Builder附带了AQTime的简化版本,它是一个动态代码分析器。花更多的钱,你就能得到更高级的版本。Eclipse支持许多动态和静态代码分析(也需要$$),但至少插件是存在的。我们使用Klockworx。 7. C++ Builder没有我所知道的外部源代码控制支持,例如GIT。Eclipse有。C++ Builder附带了内置的Subversion,如果它支持GIT,我无法使其工作。当我给它一个git路径时,它告诉我它不理解URL方案。 8. 我写的某些模板代码会导致编译器段错误并且必须完全重新启动IDE。对我来说这很疯狂。你有一个10多年前的编译器,它仍然会段错误。我有一段C++模板代码,当我将它带到我的工作电脑上运行完全相同版本的C++ Builder时,它可以编译,但在我的家用机器上会段错误。我绝对确定没有任何不利因素参与,例如病毒等... 9. 在编译可能需要很长时间的大型项目时,你无法使用IDE浏览代码。有时你可能会看到编译器警告滚动而过,你必须等待编译作业完成才能检查所提到的行或使用替代方法打开文件。 10. C++ Builder IDE具有Project Group的概念,其中包含更/少是自包含的子项目。Project Group没有像子项目那样的项目组包含/链接路径的概念。子项目有基本、调试、发布路径,其中调试和发布可以从基础中继
除非您从事Windows桌面GUI开发,否则请远离Embarcadero/C++ Builder。我从Borland时代开始使用C++ Builder版本1,并有一些大型项目在VCL中投入了大量资金,因此对于这些项目,我必须使用它,但是所有我的新项目,我一直在使用Eclipse。
关于C++ Builder的积极方面,VCL非常好用。它不支持多线程,但非常适合快速创建桌面GUI应用程序。我认为使用CBuilder比在VS中更快地创建基于C++的GUI应用程序。而且似乎有大量免费和付费的GUI组件可供CBuilder使用;再次强调是针对C++的。我知道C# + VS拥有大量GUI控件。
更新: 今天我遇到了一个问题,与本论坛中提到的问题相同: http://qc.embarcadero.com/wc/qcmain.aspx?d=57631 做出决定。这是警告还是该死的错误?
请滚动到最后,您会发现有人修改了ILINK32.EXE以使其重新运行。截至今天早上,我们的构建停止工作。我们陷入困境,正在努力理解并找出该怎么做。
这是您想要依赖的编译器/IDE吗?再次强调,这个产品已经存在了十多年,但仍然存在此类问题。我认为这完全是不可接受的。来自一家不关心的烂公司的产品。

4
刚刚必须点赞Eric所说的。 这个编译器无法处理一些领域中领先的开源库,如Boost、VTK、OpenCV、TBB等。 VTK曾经有一堆特定于Borland的解决方法,但在最近的版本中将其删除了。 这不是因为VTK使用了专有的VC ++内容,而是32位编译器在最近的版本中也非常糟糕。 - James Johnston
3
选择一个随机的第三方开源跨平台 C++ 库。它很可能无法在 C++ Builder 上编译。而且该库背后的公司/团队很可能不支持该编译器 - 大多数只支持 Windows 上的 VC++,可能还有 gcc(MinGW)之类的东西。你想一直重复造轮子,还是使用第三方库呢? - James Johnston
2
他们总是跟不上时代。考虑到VCL库直到2009年才广泛支持Unicode,而微软在90年代就已经做到了这一点。微软在2005年支持64位C++,而Embarcadero直到几年前才推出他们的64位编译器。他们仍然不支持有用的C++11功能,比如32位C++ Builder中的lambda表达式。他们说32位clang编译器在路线图上。但是以他们的时间表来看,我怀疑这将不会在本十年内发生,而32位Windows也将在那时候消失。 - James Johnston
2
请注意,这个答案中的一些内容(例如1、布局不被维护;5、不进行并行编译;9、以某种方式编译)是不正确的。而且对于#1来说从来就不是真的;很难理解一个使用过该产品的人怎么会写出那样的话。(当您更改布局时,请使用保存布局按钮,该按钮位于布局预设组合框旁边。如果您希望它成为新的默认值,请覆盖默认值。或者#9,打开后台编译并在构建时继续使用IDE)至于错误 - 好吧。但是我们会不断改进 :) - David
1
请注意,QualityCentral现已关闭,因此您无法再访问qc.embarcadero.com链接。如果您需要访问旧的QC数据,请查看QCScraper - Remy Lebeau
显示剩余15条评论

17

虽然这不是一个答案,但我会把它留在这里:

  1. 使用它需要花钱(是的,VS也需要花钱,但你已经拥有了,是吗?)
  2. 将一个足够大的项目迁移到新的IDE(和编译器)并不容易,更不用说你工作的人和他们的习惯了(我可能只会辞职)。
  3. 还有一个新的编译器,带有自己的错误和注意事项需要学习。它比VC++被使用得少得多。然而,它基于Clang,应该支持标准比VC++更好,并且更容易移植现有的C ++代码。
  4. 迁移的难度很大程度上取决于你项目的性质(它是否基于GUI,它对MS VC ++作为编译器的依赖程度有多深?)

所以基本上,你的建议是“不值得麻烦”? - user336635
1
全新的东西(2011年),多个核心,大量的内存。这并没有帮助。 - user336635
@user,我在想:什么东西会变慢:构建、导航、基本的UI体验?我用VS已经很多年了,似乎只需要一些G的RAM就可以了。 - unkulunkulu
3
VC++构建速度慢是因为它是一种优化编译器。C++ Builder构建可能会更“快”,但这是因为32位编译器的优化效果不好。对于一个计算密集型的开源项目,我们在VS2008和C++ Builder XE2下进行了编译。我们发现,在VS2008下运行代码大约快了3倍!你可以选择构建速度慢但运行时性能快,或者构建速度快但运行时性能慢。选择其中之一吧! - James Johnston
3
请注意,C++Builder拥有基于Clang的Win32编译器,能够进行相当不错的优化。以上评论是基于旧的“经典”编译器,现已过时。 - David
显示剩余2条评论

14

Embarcadero XE既没有年轻化的IDE也没有年轻化的编译器,没有任何积极的方面。只有在你被束缚于它(遗留软件)或者想要进行Delphi开发时才使用它。

对于C++来说,请对自己好一点,加入21世纪吧:选择一个更强大、多功能和现代化的工具,比如VC++或Qt。


2
“老化编译器”仍然基于旧的Borland技术,但它只适用于32位开发。64位编译器和移动(iOS和Android)编译器基于CLang,因此它们是现代的,支持C++11等。32位编译器最终也将迁移到CLang。 - Remy Lebeau
2
@RemyLebeau:32位编译器什么时候会迁移到clang?在我死之前会发生吗?他们会完全放弃它吗?他们太忙于追逐移动和其他由营销主导的新东西,而无法修复他们已经拥有的东西。Windows在90年代就支持UCS-2 / Unicode。Embarcadero直到2009年才支持Unicode,而VS在大约十年前就开始支持了。64位VC ++在2005年已经广泛可用;Embarcadero则需要几年时间,直到几年前才推出(是XE2还是XE3或其他什么?)我认为32位clang不会在本十年内实现。 - James Johnston
1
@JohnLewis:你有权发表自己的意见,因为Embarcadero还没有发布XE8的功能矩阵。 - Remy Lebeau
1
@JamesJohnston:XE8的重点在于iOS 64位,因为苹果的最后期限,所以32位的clang编译器被搁置了。但是它已经在2015年的路线图上(第6张幻灯片):“* 2015年新平台和编译器 - Windows 32位C ++编译器 - 基于LLVM的工具链类似于64位Windows编译器语言功能,包括C ++11。” - Remy Lebeau
2
如果有人错过了,Embarcadero终于在RAD Studio 10 Seattle中发布了他们的新基于32位Clang的C++编译器,同时还提供了旧的基于32位Borland的C++编译器。用户可以在每个项目中切换两个编译器,C++编译器项目选项中有一个新的“使用‘经典’Borland编译器”设置(默认为True)。 - Remy Lebeau
显示剩余4条评论

8

这个问题实际上是个人观点的问题。

我个人非常讨厌Visual Studio,避之唯恐不及。我的Eclipse使用经验仅限于Java,但即使如此,我也很难与它一起工作。

我使用C++Builder已经15年了,从v3.0一直到最新的XE6。是的,它有一些怪癖和限制,但我仍然发现它是我工作中最容易使用和高效的IDE,只要你知道如何使用(或绕过)它们。也许我的使用经验阻碍了我使用其他IDE的能力,但没关系。我仍然更喜欢C++Builder。但我仅将其用于Windows开发(VCL非常成熟和稳健),我尚未使用它进行跨平台开发(FireMonkey还有很长的路要走才能进化和成熟)。我确实使用了很多开源项目。是的,有时我必须调整它们的项目和/或代码使它们编译,但那通常只需要一次,然后它们就可以正常工作。


6
我建议使用 Eclipse。
作为一个集成开发环境,需要一些时间来适应,但它值得花费这些努力。它可在Mac OS、Linux和Windows上使用。
您需要在计算机上安装Java,但这真的不是问题。它支持Cygwin、MinGW和Microsoft Visual C++工具链。内置的CDT Builder也非常好用。
您可以将其用于开发C++以外的其他语言(如Java、JavaScript、PHP等)。您还可以通过安装插件扩展其功能。
最重要的是——它是免费的!此外,我提醒一下,它还有一个内置的Web浏览器,对编码时参考在线文档非常有用。

5

1.我们有一个超过100万行代码的解决方案,而VS2010可以很好地处理它。我们特别喜欢/MP开关,因为它可以在所有可用的CPU核心上编译。

您没有说明您的硬件情况。如果您现在还没有运行至少i7-2600 +快速SSD,我建议先尝试升级硬件。

2.我过去经常使用Borland工具。Delphi相当稳定;C++ Builder则要更加容易发生错误。几年前,我帮助将旧的Delphi项目升级到安装了一些服务包的新版Delphi IDE。即使是基本的文件IO API也存在错误,这些API从Turbo Pascal时代就起作用了。我们不得不降级到之前的版本。我预计C++ Builder的质量不会比VS2010好多少。

3.您没有说明具体哪里会变慢。您可能希望将某些项目转换为单独编译的组件。另外,请确保使用PCH。

此外,值得调查的是是否通过在每个单元中包含大量不必要的头文件来滥用C++包含模型。如果在预处理后,Intellisense和编译器需要处理大量的代码,则没有任何IDE可以帮助。


Xentrax,那些投票支持“非常慢.next”性能改进的人是什么意思? - user336635
1
+1 用于检查不必要的头文件。 - James Johnston

2
我从未使用过Visual Studio 2010 Ultimate来进行C++开发,而是用它开发C#和C#网络服务。尽管如此,为了测试VS 2010 Ultimate和C++Builder XE之间的差异,我创建了一个简单的VS C++ Windows Forms应用程序来通过事件处理程序点击按钮并显示“Hello World”。在将按钮放入VS窗体设计器中时,只要记得访问视图|工具箱,就可以完成操作。如果没有这样做,就需要花费一些时间来查找可视化组件所在的位置。
由于某些原因,按钮单击事件处理程序的签名看起来像:
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

}

并且它像预期的那样进入头文件。符号“^”没有太多意义。使用它是否更好地与CLI / CLR相关?我预期会使用“*”来表示指针。
在使用默认的Form1(仅创建了头文件)并随后添加新的Windows表单之后,我最终获得了相应的cpp文件。也许C ++ Windows表单向导有一个错误。谁知道呢?无论如何,在通过双击设计器中的按钮添加按钮单击事件时,cpp都不会在我测试的任何一种cpp形式中获取该方法。也许这是正常的,我不知道。这样做的最终结果是,在尝试在cpp中使用MessageBox函数时,它只会导致编译错误。我确信还有另一个必须包含在包含路径中的头文件。我没有花时间追踪这个问题。尝试设置标签组件文本属性也会导致编译错误。大约20分钟后,我沮丧地转向了C ++ Builder XE3。
在C ++ Builder中,我已经从项目向导中测试了VCL表单,FireMonkey桌面和FireMonkey Metropolis应用程序的创建。毫不犹豫,我有三个不同的应用程序在总共约三分钟内说,“Hello World”,都调用C ++ Builder的内置全局快捷方式函数,称为ShowMessage(“insert message here”)。计时可能略有不同,因为我没有用秒表计时。在每个cpp(而不是头文件)的相应单击事件正文中输入一行代码所花费的时间比代码本身要长:保存具有意义名称的文件需要更长时间。
VS的另一个主要日常使用问题是,对于我们喜欢Brief键映射的人来说,它非常难以配置为Brief。在进行C#的重度开发时,我使用C ++ Builder的编辑器以Brief模式保存文件。 VS确实会在您点击回到VS IDE时正确检测文件更新。
关于上面提到的OP的缓慢性,我建议还要非常仔细地查看与运行Visual Studio的硬件平台的相对关系。我已经注意到,如果.Net框架过时,则VS在IDE内部会变慢。它似乎也不会影响项目所使用的语言。我在带有Windows XP Pro的Parallels上使用Visual Studio 2010 Ultimate,有2个虚拟核心。通常,在IDE内部,VS会正常响应。在使用它时,我没有想到“VS很慢”。
关于将25万行的代码从VS迁移到C++Builder,我不确定是否有向导或其他迁移工具可以转换VS事件处理程序。如果所有事件处理程序中始终使用“^”符号,则自定义编写的正则表达式转换可能不会造成太大问题。如果项目在用户界面层上非常简单,但在业务规则和数据方面很重要,则转换到C++Builder应该相对容易。我预计需要为新的用户界面单击事件编写一些新代码,以便将用户交互传递到其他层。对于原型设计,使用数据感知组件可能是最好的选择。在正常的应用程序运行中,预计业务规则层将使用STL和内置的C++Builder数据结构(甚至包括AnsiString c_str()方法)与非数据感知组件进行交互。性能和用户体验可能会得到改善。
开始编辑
关于C++Builder XE3(注意这是当前版本之前的两个版本),一个大问题是只支持控制台应用程序的64位Windows支持。这个问题更多的是因为没有经常广播如何使用“添加平台”子菜单,当右键单击鼠标时,该子菜单出现在“目标平台”选项上。这种快速方法是在将项目首次定位为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为中心的过程和一个小屏幕截图,标题为“64位跨平台应用程序开发(面向Windows)”: 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桌面、FireMonkey Metropolis)、OS X、iOS(Android即将推出)。要查看完整列表,请查看C++Builder功能矩阵pdf,了解所有XE5详细信息: http://www.embarcadero.com/products/cbuilder/cbuilder-feature-matrix.pdf 由于XE3 Update 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的最新版本及其价格,购买价格高达数千美元。即使永远不需要升级安装任何一个工具,相比之下,C++Builder仍然比Visual Studio更为经济实惠。在花费辛苦挣来的钱之前,请进行彻底的研究。希望这两个工具都有30天的试用安装,以便进行并排比较,因为你可能会有所不同。


1
“^” 符号没有太多意义。使用它是否更好地与CLI/CLR相结合?我希望“*”表示指针。 你正在使用C++/CLI; “^” 表示托管跟踪引用,它不是指针,并由托管垃圾回收器跟踪。您无法对跟踪引用执行指针算术运算。阅读C++/CLI文档!!! - James Johnston
而且,请阅读我关于C++ Builder的一般问题的其他评论...如果您想重用其他开源库,那么您可能会很失望,因为编译器至少落后了十年。 - James Johnston
“64位Windows支持仅限于控制台应用程序” - 不,不是这样的,据我所知从来没有这样过。64位Windows平台同样适用于GUI应用程序。 - Remy Lebeau
对于任何想了解 ^% 符号的概述的人,请查看此链接:C++/CLI。它涵盖了所有新手需要了解的内容,以理解 C++/CLI 垃圾回收器符号与 C++ 标准之间的区别。 - CPlusPlus OOA and D
要进入Visual Studio C++项目区域,请确保通过打开“其他语言”子树来进入。我记得在旧版本中是这样的,但幸运的是,在VS 2015及以后的版本中似乎不再是这种情况了。 - Marc.2377
在2015年和可能是2013年,如果安装时未启用C++,则在模板下的Visual C++选择不会出现。无论如何,C++/CLI Windows Form项目模板也不存在。您必须创建一个模板,然后使用“导出模板”功能。之后,您必须检查导出的template.zip文件的内容。很可能缺少文件。这个未解决的问题在所有2015更新中都存在。除了将缺失的文件添加到zip中,还要仔细检查MyTemplate.vstemplate TemplateContent部分。新添加的文件名也在那里。 - CPlusPlus OOA and D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接