【问题标题】:Language choice: C++ or C# for Windows Store app? [closed]语言选择:Windows 应用商店应用程序的 C++ 或 C#? [关闭]
【发布时间】:2012-12-02 20:54:42
【问题描述】:

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

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

我即将为我公司的 Windows 应用商店(或 Metro,具体取决于您要如何称呼它)编写一个版本。几个月前,我使用 C++/CX 做了一个概念验证。学习它几乎没有什么障碍(引用类的语法,以及大量使用命名空间),但那是过去的事了,我现在觉得很舒服。

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

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

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

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

【问题讨论】:

  • 作为一名来自 C 的 C# 开发人员,C# 是一门美妙的语言。恕我直言,绝对值得切换。
  • 这是一个教科书“非建设性”问题。
  • 我会说,虽然它有可能获得非常主观的答案 - 这里有很多数据点可以帮助人们做出决定并可能帮助很多人。
  • @FilipSkakun 这可能是真的,也可能不是,但 SO 已经决定,由于 Q/A 环境中这些类型的问题产生的问题,它们在本网站上是不可接受的。您可以去聊天室或论坛提出此类问题
  • 我仍然通过编辑 DWright 的回答给出了一些数据点,希望不会让我从 SO 开始。 :) 也许您可以提出更多、更具体的问题,这些问题更适合 SO 格式,例如您的要点中的问题。

标签: c# c++ windows-runtime windows-store-apps c++-cx


【解决方案1】:

C# 将拥有更好的在线支持(代码示例、问题答案)和更强大的工程师基础。我的意思是,在这种特定情况下,对于这种强烈依赖 Microsoft API 的软件开发。 Windows Store 在微软的整体战略中非常重要,而 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++ 产生更多确定性的结果(我只花了 2 天时间调试一些 C++ 代码,但我仍然没有'不知道我在找到错误方面走了多远)。维护遗留代码也更容易,因为调试要容易得多。

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

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

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

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

【讨论】:

  • 只是想指出,为了读者的理解,只有第一段是我的,它代表了与其余所有段落不同的观点/方法/范围,这是菲利普的.
  • 是的,抱歉,我刚刚入侵了(社会工程)Stack Overflow。 :)
  • 我明白你做了什么。我不确定这是否是一种完全不偏不倚的方式来对待我的内容,不管我所说的是什么优点。
  • 对不起,如果你愿意,我可以删除我的。也许我会写一篇博文并从评论中链接... :)
  • DWright,感谢您的初步意见。抱歉,您的帖子被劫持了,但由于该帖子已关闭,我们无法让 Filip 发帖。 @Filip,感谢您的详细输入。这正是我希望通过这篇文章产生的那种对话。我决定继续使用 C# 重新开始有几个原因,包括你的几个观点。另外,我已经准备好学习新东西了。我无法想象我需要 C++ 在这个应用程序中提供的优势。这是一个基于照片的应用程序(不是编辑或类似的东西,而只是显示来自网络服务的数据)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多