语言选择:适用于Windows应用商店应用程序的C++或C#



我正在寻找关于哪种语言最好的一般意见。从许多方面考虑都是最好的。

我在c、c++和objective-c方面有很强的背景。我觉得这3个很舒服。我用的c#很少。我在固件和中间件领域工作了十多年,最近开始涉足移动应用程序。主要是iOS,但现在扩展到Windows RT。

我即将为Windows应用商店(或Metro,取决于你想怎么称呼它)编写我公司的应用程序版本。几个月前,我使用C++/CX进行了概念验证。学习它几乎没有什么障碍(ref类的语法和名称空间的大量使用),但这已经是过去的事了,我现在对此感到很舒服。

我发现的一些缺点是,.net的大多数示例(MSDN和private)都在c#中,而在c++中的示例更少。对于使用c++的.net框架,要想得到答案似乎也有点困难。大多数时候,人们会发布一个c#答案,我需要将其移植到c++equival。有时这很容易,有时更难。

我的问题是:我和我的公司花时间重新开始使用c#,而不是继续使用c++,这值得吗?我需要学习c#,但我不认为这是一个巨大的负担(实际上我很期待)。一些问题包括:*在未来的道路上获得更多的工程师来研究这一代码。我们公司很快就会发展壮大。找到一个知道c#的工程师会比MS的专业c++/cx更容易吗?*通过示例、文章和论坛轻松获得帮助。如果c#更常见,那就很有用了。*第三方库之间的兼容性(似乎WinRT组件可以从任何主要语言中使用)*C#相对于C++的优势?他们都为我提供了这个应用程序所需的一切,至少我能看到。C#有哪些陷阱?*c#是否以与c++/CX相同的方式使用continuation/lambdas进行asych编程?

还有其他我没有想到的优点/缺点吗?

你觉得怎么样?此外,你有什么经验?你为什么支持你的答案?

C#将拥有更好的在线支持(代码示例、问题答案)和更强的工程师基础。我的意思是,在这种特定的情况下,对于这种强烈依赖微软API的软件开发。Windows应用商店在微软的整体战略中非常重要,C#在他们的语言战略中比C++更重要。因此,C#是合适的,IMO.


*EDIT(Filip Skakun)我知道重新打开这个问题可能很难,所以我不能单独回答,但我输入了所有有用的文本,所以我想在下面添加它:

当然,这取决于你的信仰,这可能是一个非常主观的选择,比如你认为C#更高的潜在生产力和更好的工具和文档支持超过了你已经知道的更快、更接近金属和(稍微主观地)更可移植的C++的好处。C++仍然是基于tiobe索引的语言的两倍,因此获得C++开发人员可能比C#开发人员更容易。C++/CX是您只需要用于跨程序集通信和与WinRT库对话的东西,但您编写的任何其他代码都应该基于所有专家建议在标准C++中完成。另外请注意,C++/CX不是托管语言,也不能与.NET一起使用。不过,它在语法上与作为托管语言的C++/CLI非常相似。WinRT的好处是,如果你想或需要,你可以同时使用这两种语言。我将C#用于所有的XAML UI、网络、业务逻辑等。有很多将C#与XAML一起使用的示例,而C++的示例范围有限,因为它只在带有WinRT的XAML平台上可用并推荐使用。另一方面,对于任何较低级别的任务,如使用DirectX或CPU密集型任务,我使用C++,因为直接DirectX的文档比开源.NET包装器更多,而且当你想耗尽CPU的所有潜在功率或使用最少的电池能量时,它的性能会更好。

C#是一种比C++更干净的语言,标点符号更少,新的async/await关键字使异步调用(必须在Windows 8应用程序中使用)更干净。它也是一种托管语言,因此在大多数情况下,您可能不需要关心内存何时释放、缓冲区溢出等问题。调试C#代码会产生比C++更具确定性的结果(我只花了两天时间调试一些C++代码,但我仍然不知道我在发现错误方面有多远)。维护遗留代码也更容易,因为调试要容易得多。

C++更快,所以它也使用更少的电池,你的应用程序启动更快,可能使用更少的能量。如果你已经很清楚这一点,那么你可能会比托管开发人群构建应用程序更有优势。因为它不使用垃圾收集——内存管理更具确定性和轻量级,所以你的动画会更流畅。

还有动机因素。如果你真的想学习C#,你可能会比你已经知道的语言更快乐、更有动力、更有成效地学习C#,并且会很乐意花更多的时间学习它,而不是花在编写另一个C++应用程序上。

无论使用哪种语言,底层WinRT库都是相同的,但.NET库仅在.NET代码中可用,而标准C++库仅在本机代码中可用。

最后,无论你做什么决定,你都可以混合使用两种语言。这可能会增加维护成本,因为无论谁在未来维护代码,都可能需要同时了解这两种语言,而且混合语言平台还很年轻,工具支持的程度略低(例如,您不能进行托管+本地远程混合调试),而且可能更容易出错。在许多情况下,这是一个非常好的选择,尽管原因我之前说过。

最新更新