我的团队计划开发一个应用程序,最初面向Windows,但最终将部署到跨平台环境(Mac、Linux和可能的嵌入式设备)。我们需要决定是使用C#/.NET还是通用的C++(UI库采用Qt)。我们预计使用C#可以比C++更快地开发产品,并且成本更低,因为它具有比C++更高的生产力,但我们在赌注是否当我们要推出其他平台时,C#的跨平台实现是否足够成熟。
有没有在类似情况下的人给出任何建议?
我的团队计划开发一个应用程序,最初面向Windows,但最终将部署到跨平台环境(Mac、Linux和可能的嵌入式设备)。我们需要决定是使用C#/.NET还是通用的C++(UI库采用Qt)。我们预计使用C#可以比C++更快地开发产品,并且成本更低,因为它具有比C++更高的生产力,但我们在赌注是否当我们要推出其他平台时,C#的跨平台实现是否足够成熟。
有没有在类似情况下的人给出任何建议?
尽管 Mono 拥有潜在的跨平台功能,但现在来看,为了跨平台目的,C++/Qt 更成熟,比使用 C#/WinForms 或 C#/Gtk# 会更好。使用高级语言可能会带来一些生产力上的优势,但这很可能会被处理 Mono 的限制所抵消。
Jen,我对你的问题表述有所担忧。
“我的团队计划开发一个最初面向Windows的应用程序,并最终部署到跨平台(Mac、Linux和潜在的嵌入式设备)。”
计划是要做跨平台的吗?我可以推断出代码最初会为Windows编写,然后可能会花费精力修改项目以具备跨平台能力。这对你们的健康或者团队的健康都不好!在这里需要做出明确的商业决策。跨平台开发的黄金法则之一是要完全平等地处理所有目标平台。
C#是否可以用于嵌入式环境?它已经在商业上实现过了吗?只是好奇。
“我们预计通过使用C#,可以由于比C++更高的生产率,在更短的时间内以更低的成本开发我们的产品。” 你的意思是什么?你的预测基于哪些事实和数据?不要忘记,对于某些项目来说,编码工作量可能只占将产品推向市场所需总工作量的20%左右。因此,计算机语言的生产率比较可能并不那么重要。根据我的经验,按所谓的生产率标准选择计算机语言并不是很有效。
“我们正在冒险”我同意这一点,而冒险似乎与规划的含义相矛盾。问题是:有哪些风险?
你是否考虑过国际化?
是的,我批评了一些问题,但是那些为这个项目支付资金的人可能会更加挑剔。
书籍: Cross-Platform Development in C++: Building MAC OS X, Linux, and Windows Applications by Syd Logan - ISBN 032124642X 提供了解决问题的思路。
我曾经参与过一个跨平台和国际化的项目,使用了C++/Qt在Windows、Mac和Linux上进行开发,后来发现Qt解决了这两个问题。我对Qt不喜欢的一点是它不是现代的C++语言习惯,也不鼓励使用现代的C++语言习惯。就像MFC一样。
我使用C++/Qt开发跨平台软件已经多年了。
我强烈推荐这个解决方案给你的开发。
这样的解决方案可以在所有平台上提供性能!
此外,Qt不仅是一个GUI框架,还为您提供了完整的网络、数据库、I/O功能、出色的支持和非常巧妙的国际化系统!
最后,Qt在其支持的所有平台上提供本地外观。
关于性能方面,Mono/C#与C++/Qt相当吗?
再次提出一个需要回答“看情况”的问题!(取决于你的C#和C++程序员的技能水平,以及他们在C#中是否确实快得多等因素)。
只是一句话备注:
Mono项目提供了一个平台(版本2.0支持到.NET 3.0),可以在Mac或Linux系统上使用。其中包括微软代码糖LINQ。
我在很多跨平台项目中采取的方法是用一种非常便携的语言(C++)编写项目的“核心”,然后使用在各个平台上执行该任务效率高的语言来实现用户界面(以及其他任何与操作系统相关的内容,例如某些类型的数据访问)。
只想指出你不必只选择一种语言。
可能涉及哪些嵌入式设备?如果它们无法与.NET或Mono配合使用,那么选择C#将会削弱这种可能性。(这不一定是操作系统问题;有些嵌入式设备具有严格的内存或性能限制,而.NET/Mono可能会超过这些限制。)
如果这不是关键问题,那么就有很多因素需要考虑。你的项目是否使用了标准的.NET功能,或者你是否可能会对Mono造成压力?你是否只熟悉C#而不是C++?(如果你比C#更擅长C ++,那么在一个项目上使用C#不太可能带来生产力上的好处,你应该选择C++并在其他不那么跨平台的项目上获得C#的经验。)在Windows上快速推出版本有多重要?(如果获取先发优势至关重要,或者如果你正在做一些不那么时间紧迫的事情,那么这可能是次要的。)你从Mac和Linux版本中会获得多少收益(通常比它们的市场份额所示的要多,因为竞争更少)?
你考虑过使用Python/C++/QT吗?
看一下这个。