更好的跨平台开发选择:Java还是C#?

时间:2010-12-04 20:10:32

标签: c# java comparison development-environment

我是一名拥有超过25年经验的Unix开发人员。我做了很多跨平台工作,最近在MacOS上开发代码并使用autoconf将其重定向到Linux,并在交叉编译模式下使用mingw重定向到Windows。这在很大程度上给出了良好的结果。但是,我有兴趣转向类型安全的语言。此外,我的用户更愿意为他们提供基于GUI的应用程序而不是命令行应用程序。

我的大多数用户都在Windows上,但很多重要用户都在Linux上。我的所有用户都不在MacOS上,但那是我首选的环境。 (我应该切换到Linux或Windows,但我真的很喜欢Apple Mail。)

大约三年来,我一直在寻求将我的开发工作从C ++转移到Java或C#。 C ++运行得更快,我们正在进行非常数据密集的操作。一个典型的程序将处理500GB到1TB,需要3-5个小时。在5小时内完成的程序与在9小时内完成的程序之间的差异是完成启动它的那一天的程序与第二天结束的程序之间的差异。另一方面,我越来越多地编写多线程程序,并且在Java和C#中,treading模型更加清晰。

所以我陷入了僵局。我找到了一个速度比较,表明我不应该因为速度而选择Java vs. C#。所以我试图考虑其他问题:

  1. 长期承诺。没有人知道Java发生了什么,但只要微软是C#就与我们在一起。
  2. 平台的可用性和一致性。 Java在各地几乎都是一样的。我不知道微软和Mono的C#有多相似。
  3. 易于开发。我已经习惯了在EMACS中开发,但我一直认为,由于代码分解,我应该转向Eclipse。 (我希望EMACS具有不错的代码保理,但它没有。)Visual Studio非常好,但只能在Windows上运行。 Mono开发环境似乎很可悲,但它可能会变得更好。
  4. 所以我正在寻找其他人的意见。

8 个答案:

答案 0 :(得分:17)

我的投票是针对Java,虽然我相信很多人会不同意。

Mono现在非常普及(包括在像Android这样的移动平台上),但我的理由是它不是官方微软认可的C# - 它是一个重新实现。

有人担心微软会因为专利侵权或其他任何可能出现的问题而关闭Mono,但这种情况从未发生过,而且此时它不太可能发生。

我宁愿选择Java,它被官方设计为跨平台语言和跨平台API。当然,也有类似的担忧 - 现在甲骨文正在发号施令,他们很快就疏远了不少开发者,但我仍然把它当作Mono。

这是我的个人意见 - 我相信会有很多人不同意我的看法。

答案 1 :(得分:5)

Java是一种跨平台语言,这是使用它的第一个好处之一。

类似问题:Is Java the best language to develop cross-platform GUI applications?

答案 2 :(得分:4)

Mono是一个独立于Microsoft的项目。 mono的开发人员尝试尽可能完美地实现所有.NET功能,但是你永远不能保证它在所有平台上都是100%兼容的。

Java是相同的,独立于您运行它的平台,因为Java运行时由Oracle本身提供,而不是由第三方开发。

如果x-platform不可避免,我会选择Java。

来自顽固的C#开发人员的问候;)

答案 3 :(得分:3)

让我试着回答:

  1. Java是一个开源平台。它将得到社区的支持。 +1到Java
  2. Mono是开源的,可以随处使用,甚至可以在iPhone上使用。
  3. +1
  4. 仅编写代码需要Visual Studio。这是最好的IDE恕我直言。即使借助Mono Tools for Visual Studio,您也可以始终在Linux中进行测试和部署。 +1到C#
  5. 由你来决定。

    由于其他原因,我选择了C#over Java:

    1. 如果我使用xsd.exe将XML Schema编译成C#,我可以在一行代码中使用XmlSerializer将XmlNode转换为C#对象,反之亦然
    2. 我设法以“无服务器”模式运行ASP.NET,即。没有IIS或Apache,但来自控制台应用程序。我从
    3. 运行复杂的Web服务
    4. using语法和IDisposable简化内存和对象生命周期管理
    5. 属性,虽然语法糖,很容易开发
    6. ADO.NET远比JDBC好得多。
    7. 还有更多

      [添加]我会关注用于UI的XAML和Silverlight / Moonlight。似乎Moonlight比我们迄今为止所想的更有希望

答案 4 :(得分:2)

还有一件事未提及。 Java有大量的生产质量开源项目,您可以利用它们。

我不知道C#/ Mono,但上次我正在使用它时,那里没有什么。

答案 5 :(得分:2)

虽然我从1996年开始使用Java开发,但我发现跨平台应用程序(即桌面)的“最佳”解决方案是使用C ++和诺基亚的Qt框架。原因主要是我在Windows,OSX和Linux上获得具有良好性能的本机应用程序。

恕我直言:Java桌面应用程序在企业中是可以接受的,用户别无选择,但是当人们花钱时,他们似乎没有评价Java GUI(Swing,SWT或Eclipse RCP)。当然,取决于您的目标用户。

答案 6 :(得分:1)

Mono与MS CLR几乎有相同的类,所以只要你不使用任何.NET4 / WPF相关的东西,你就可以确保你的代码将在Mono中运行....此外,C#提供了更多的集成底层操作系统比Java。两者都应用运行时优化。两者都具有类C语法。 C#(根据我的经验)有一种比Java更容易使用线程模型的方法。

这是你的选择,但我说Java已经注定了,所以个人而言,我会选择C#,但是再一次,这是你的选择......

最后一个优势。 Windows预先安装CLR,而不是JRE;)

编辑:inb4downvotes:Java本身就是一门很好的语言,但我认为它很久以前就被抛弃了。

第二次编辑:Java注定不会注定,请看下面的评论。不过,我喜欢C#over Java;)特别是Swforms上的Winforms(即使我没有开发WinForms应用程序,因为我遇到了WPF:D)

答案 7 :(得分:1)

我认为这是一个折腾。 Java将更容易开发,只需在任何你想要的平台上获取Eclipse并使用SVT或Swing。这样做是Java的主流使用并受到支持。

如果你想在Mac上开发C#以便在Linux上进行部署 - 这将是可能的,但更多的是痛苦。你是一个异常开发人员 - 大多数C#开发人员都没有这样做。如果你遇到问题(并且你会),那么提问的人就会减少。

但是,如果你真的关心你的GUI在Windows上的外观和行为,我认为这是值得的。 Java无法在Windows上制作看起来正确的GUI,.NET也可以轻松实现。