0

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

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

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

我发现的一些缺点是 .net 的大多数示例(MSDN 和私有)都在 c# 中,而在 c++ 中则较少。使用 c++ 回答有关 .net 框架的问题似乎也有点困难。大多数时候人们会发布 ac# 答案,我需要将其移植到 c++ equiv。有时这很容易,有时更难。

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

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

你怎么看?另外,你有什么经验?你为什么支持你的答案?

4

1 回答 1

1

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


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

当然,这由您决定,这可能是一个非常主观的选择,具体取决于您的信念,例如,如果您认为 C# 更高的潜在生产力和更好的工具和文档支持超过了更快、更接近于你已经知道的金属和(稍微主观地)更便携的 C++。根据 tiobe 索引,C++ 的流行度仍然几乎是一门语言的两倍,因此吸引 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# 与 XAML 结合使用的示例,而用于 C++ 的示例范围有限,因为它仅适用于并推荐用于具有 WinRT 的 XAML 平台。另一方面,对于任何较低级别的任务,例如处理 DirectX 或 CPU 密集型任务,我使用 C++,因为与直接 DirectX 相比,它的开源 .NET 包装器有更多的文档,并且当你想要挤出所有的CPU 的潜在功率或使用电池的最少能量。有大量用于将 C# 与 XAML 结合使用的示例,而用于 C++ 的示例范围有限,因为它仅适用于并推荐用于具有 WinRT 的 XAML 平台。另一方面,对于任何较低级别的任务,例如处理 DirectX 或 CPU 密集型任务,我使用 C++,因为与直接 DirectX 相比,它的开源 .NET 包装器有更多的文档,并且当你想要挤出所有的CPU 的潜在功率或使用电池的最少能量。

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

C++ 更快,因此它也使用更少的电池,您的应用程序将启动更快并且可能使用更少的能量。如果您已经很了解它,那么您可能比那些构建应用程序的托管开发人群更具优势。因为它不使用垃圾回收 - 内存管理更具确定性和轻量级,因此您的动画将更加流畅。

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

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

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

于 2012-12-14T20:31:29.160 回答