因为我们(我和我合作的人)在使用C ++项目时越来越沮丧VS2010 sp1中的250 000+ LOC(这个IDE的速度令人难以置信),在我的公司,我们谈论的是迁移我们的代码到一些不同的IDE。我们做了一些研究,一个强有力的候选人似乎是Embarcadero C ++ builder 2011 XE。有什么想法吗?这有什么好处吗?它与VS2010终极相比如何?
答案 0 :(得分:34)
我从1.0开始就一直在使用C ++ Builder,我很讨厌它。你会想到,这些年来,现在已经解决了简单的小麻烦,但事实并非如此。以下是我使用C ++ Builder IDE时遇到的问题列表。
您的布局或个性永远不会被维护。你创建一个,保存它,它只适用于某些事情。例如,调试器窗口不会保持其位置,也不会保留消息窗口。如果您分离项目资源管理器,它有时会消失。大部分时间重新加载你的个性并没有解决这个问题。你被卡住了将窗户拖回原位。
挖掘机有时可以工作,有时也不起作用。在调试版本中,如果设置断点并开始单步执行代码,则可以将鼠标悬停在变量上进行检查。有时候这种方法有效,有时它不会对完全相同的变量起作用。疯了!
Eclipse会查找代码错误,例如,如果您忘记在语句末尾放置一个分号,它会稍微放一点吗?保证金。 C ++ Builder没有做这样的事情。它会给你一个神秘的编译时错误信息。
最新版本的C ++ Builder使用类似于VS的makefile;它是一个XML混乱。 Eclipse与CMake和Makefiles一起使用。我已经读过CMake维护者正在寻找C ++ Builder生成器的地方,但最后我检查过它并不存在。我做嵌入式和交叉编译,所以有时我的C ++ Builder代码被复制到我的嵌入式开发环境或者与它共享,我最终会维护两个构建环境。
不是真正的IDE,但C ++ Builder没有利用多个CPU来编译代码。但是,有一个第三方工具,你可以花更多的钱来获得这个。它被称为TwineCompile(http://www.jomitech.com/twine.php)。使用Eclipse,他们会调用您正在使用的任何编译器(gcc等等)和那些编译器并使用-j选项。
C ++ Builder附带了AQTime的限制版本,它是一个动态代码分析器。花更多钱,你会得到更高级的版本。 Eclipse支持许多动态和静态代码分析(也花费了$$),但至少插件就在那里。我们使用Klockworx。
对于像GIT这样的外部源代码控制,C ++ Builder并不支持我所知道的。 Eclipse确实如此。我认为C ++ Builder内置了subversion。如果它支持GIT,我永远无法让它工作。它告诉我,当我给它一个git路径时,它并不理解URL方案。
我编写的某些模板代码会导致编译器发生段错误,必须完全重启IDE。这对我来说很难过。你有一个10年以上的编译器,它仍然是segfaulting。我有一段C ++模板代码,当我把它带到运行完全相同版本的C ++ Builder的工作计算机时,它编译好了,但在我的家用机器上它是段错误的。我绝对相信没有像病毒一样的不利因素...
在编译可能需要很长时间的大型项目时,您无法使用IDE浏览代码。有时您可能会看到编译器警告滚动,您必须等待编译作业完成以检查提到的行或使用其他方法打开文件。
C ++ Builder IDE具有项目组的概念,其子项目更多/更少自包含。项目组没有像子项目那样的项目组包含/链接路径的概念。子项目有一个基本的,调试的,释放的路径,调试和发布可以从基础继承或阻止,但你不能在项目组级别拥有它。 IDE具有可以继承的全局设置,但它适用于您在IDE中执行的所有操作。因此,无法修改给定项目组,只修改一组子项目的包含/链接器路径。我认为他们本可以做得更好。
C ++ Builder的构建输出没有颜色编码,例如,显示红色错误和其他颜色的警告。一切都是黑白的。 VC和Eclipse颜色代码,并提供更改各种警告和错误颜色的选项。 C ++ Builder中的输出选项卡是相同的。在大型项目中,使用其他噪声调查编译器警告非常困难。在C ++ Builder的IDE中,您可以选择警告级别,但这只影响输出选项卡中的输出,您仍然会得到其他愚蠢的噪音,比如让我知道它删除链接器状态文件&#34; CleanLinkerStateFiles。&#34; < / p>
除非您正在进行Windows桌面GUI开发,否则请远离Embarcadero / C ++ Builder。我开始在Borland时代使用C ++ Builder版本1,并且有一些大型项目在VCL上投入了大量资金,因此我对这些项目坚持了下来,但我所有的新项目,我一直在使用蚀。
关于C ++ Builder的积极评价,VCL非常好。它不是多线程的,但它非常适合快速创建桌面GUI应用程序。我认为在CBuilder中获得基于C ++的GUI应用程序要比在VS中快得多。而且CBuilder似乎有大量免费和付费的GUI组件;再次以C ++为重点。我知道C#+ VS有很多GUI控件。
<强>更新强> 我今天遇到的问题与本论坛中提到的问题相同: http://qc.embarcadero.com/wc/qcmain.aspx?d=57631
[ILINK32 Warning] Warning: Error detected (ILI4536)
下定决心。是警告还是神坝错误?
一直滚动到最后,您会发现个人修改ILINK32.EXE以使其再次运行。截至今天早上,我们的版本停止工作。当我们争先恐后地了解并了解该如何应对时,我们已经死在水中。
这是您想要依赖的编译器/ IDE吗?再次,这个产品已经存在了十多年,它仍然有这样的问题。我发现这完全不可接受。来自一家公司的垃圾产品并没有给出任何麻烦。
答案 1 :(得分:13)
实际上并不是答案,但我会把它留在这里:
答案 2 :(得分:11)
Embarcadero XE没有什么好处,他们老化的IDE也没有老化的编译器。只有在你绑定它(遗留软件)或者你想要做Delphi时才使用它。
对于C ++,帮自己一个忙,加入21世纪:坚持使用VC ++或Qt等更强大,多功能和现代化的东西。
答案 3 :(得分:7)
我建议使用Eclipse。
答案 4 :(得分:5)
1。 我们有超过1M LOC的解决方案,VS2010可以处理它。我们特别喜欢/ MP开关,用于编译所有可用的CPU内核。
您没有指定硬件。如果你还没有运行至少i7-2600 +快速SSD,我建议先尝试硬件升级。
2。 我以前经常使用Borland工具。德尔福相当稳定; C ++ Builder更加错误。几年前,我帮助将旧的Delphi项目升级到更新的Delphi IDE,并安装了一些Service Pack。它甚至在Turbo Pascal之后的基本文件IO API中也存在错误。我们不得不降级到以前的版本。我希望C ++ Builder的质量不会比VS2010好。
3。 你没有说明究竟什么是慢的。您可能希望将一些项目转换为单独编译的组件。另外请确保使用PCH。
如果您滥用C ++包含模型,并且在每个单元中包含许多不需要的头文件,那么值得研究一下。如果在预处理之后,Intellisense和编译器必须处理大量代码,那么IDE无法提供帮助。
答案 5 :(得分:5)
这个问题实际上是个人意见问题。
我个人非常热爱Visual Studio,我就像瘟疫一样避免它。我对Eclipse的接触仅限于Java,但即便如此,我也很难使用它。
我一直在使用C ++ Builder 15年,从v3.0一直到最新的XE6。是的,它有怪癖和局限性,但是一旦你知道如何使用(或围绕)它们,我仍然觉得它对我来说是最容易使用的IDE并且很有效率。也许我对它的体验阻碍了我与其他IDE合作的能力,但也就是这样。我仍然更喜欢C ++ Builder。但是我只将它用于Windows开发(VCL非常成熟和强大),我还没有用它进行跨平台开发(FireMonkey还有一些方法可以进化和成熟)。我确实使用了大量的开源项目。是的,有时我必须调整他们的项目和/或代码以使它们编译,但它通常是一次性的交易然后它们工作正常。
答案 6 :(得分:3)
我没有使用Visual Studio 2010 Ultimate for C ++,而是使用C#和C#Web服务开发。话虽如此,作为VS 2010 Ultimate和C ++ Builder XE之间的测试,我创建了一个简单的VS C ++ Windows窗体应用程序来单击按钮并显示&#34; Hello World&#34;通过事件处理程序。只要您记得访问View |,将按钮放到VS Window Designer上即可工具箱。如果没有,则需要一些时间来追踪可视组件的悬挂位置。
由于没有任何语言意义的原因,按钮单击事件处理程序具有如下符号:
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
}
它会像人们期望的那样进入头文件。 ^
符号没什么意义。使用它会更好地绑定到CLI / CLR吗?我希望*
表示指针。
使用默认的Form1(仅创建头文件)并随后添加新的Windows窗体后,我终于获得了相应的cpp文件。也许C ++ Windows窗体向导有一个bug。谁知道?无论如何,当通过双击设计器中的按钮添加按钮单击事件时,cpp不会以我测试的cpp格式获取方法。也许这很正常,我不知道。最终结果是在尝试在cpp中使用MessageBox函数之后,它只会导致编译错误。我确信还有另一个头文件必须在include路径中。我花了很少时间跟踪它。尝试设置标签组件文本属性也会导致编译错误。大约20分钟后,我沮丧地去了C ++ Builder XE3。
在C ++ Builder中,我从项目向导中测试了VCL Forms,FireMonkey Desktop和FireMonkey Metropolis应用程序。果然,我有三个不同的应用程序说,&#34; Hello World,&#34;总共大约三分钟,所有调用C ++ Builder都内置了全局快捷方式函数ShowMessage("insert message here")
。时间可能略有不同,因为我没有停下来看秒表。保存具有有意义的名称的文件比代码本身花费更长的时间:在每个cpp(而不是标题)中的相应单击事件主体中输入一行。
VS的另一个主要日常用途是,对于我们这些喜欢简要键映射的人来说,VS配置为Brief非常具有挑战性。在C#中进行大量开发时,我在简短模式下使用C ++ Builder的编辑器,按照我的意愿保存文件。当您单击回VS IDE时,VS会正确检测文件更新。
关于OP上面提到的缓慢,我建议也仔细查看相对于运行Visual Studio的硬件平台。我注意到如果.Net框架已经过时,VS在IDE中会很慢。项目使用哪种语言似乎并不重要。我在Parallels上使用Visual Studio 2010 Ultimate和Windows XP Pro,具有2个虚拟内核。通常,VS在IDE中正常响应。使用它的时候,我不是在想,&#34; VS太慢了。&#34;
关于从VS迁移25万行到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 平台。它的标题是 为桌面平台创建第一个FireMonkey应用程序(C ++) :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月的第5版)应该为控制台和表单应用程序(例如VCL,FireMonkey Desktop,FireMonkey Metropolis),OS X,iOS(Android即将推出)提供64位Windows支持。有关完整列表,请查看所有XE5详细信息的C ++ Builder特征矩阵pdf:
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#。选择File |时,有十八个C#项目和十五个C ++项目新项目。要访问Visual Studio C ++项目区域,请确保通过打开&#34;其他语言&#34;子树。
最近Visual Studio最新和最伟大的和C ++ Builder之间的最新和最大的互联网帖子,购买价格在数千美元不等。即使从来没有安装升级任何一个工具,C ++ Builder仍然比Visual Studio更便宜。请在花费您辛苦赚来的现金之前进行彻底的研究。希望这两种工具都有30天的试用装置可以并排比较,因为您的里程可能会有所不同。