.NET / Mono或Java是更好的交叉选择

Mono比Java少了多少库?

我缺乏关于这两种替代方案的概述,但是我对我的下一个项目有很大的自由选择余地。 我正在寻找在这方面的硬技术事实

  • 性能(例如,我被告知Java对线程是有利的,而且我听说最近对于.NET的运行时代码优化已经变得非常好)
  • 真实世界的便携性(它们都意味着便携性,每个Catch-22都是什么?)
  • 工具可用性(CI,构建自动化,调试,IDE)
  • 我特别在寻找你在自己的工作中实际经历的事情,而不是我可以谷歌的事情。 我的应用程序将是一个后端服务,处理来自时间序列的大量数据。

    我的主要目标平台是Linux。

    编辑:为了更充分地说出我的问题,我对整个包(第三方库等)感兴趣,而不仅仅是语言。 对于图书馆来说,这可能归结为“Mono比Java更少的库”这个问题。


    仅供参考,自那之后,我为这个项目选择了Java,因为它在可移植性方面似乎更具战斗性,并且在较老的系统上也有一段时间。 我对此有点遗憾,因为我对C#非常好奇,并且很想在其中完成一些大型项目,但可能下一次。 感谢所有的建议。


    那么.... Java实际上更便携。 Mono并不是在任何地方都能实现的,它显着落后于微软的实施。 Java SDK似乎在各个平台之间保持更好的同步(并且它可以在更多平台上运行)。

    我也会说Java在所有这些平台上有更多的工具可用性,尽管在Windows平台上有很多可用于.NET的工具。

    2014年更新

    我仍然在2014年持有这种观点。但是,我将通过说我现在刚刚开始关注Mono一段时间后并不真正在意,因此Mono运行时(或生态系统)可能会有所改进),我没有意识到。 AFAIK,WIF仍然不支持WPF,WCF,WF。 Mono可以在iOS上运行,但据我所知,Java运行时仍然运行在比Mono更多的平台上。 此外,Mono开始看到一些改进的工具(Xamarin),而且微软似乎有更多跨平台的态度并愿意与合作伙伴一起合作,以使它们互补,而不是竞争(例如,Mono将会这是即将到来的OWIN / Helios ASP.NET环境中非常重要的一部分)。 我怀疑在未来几年,可移植性的差异会迅速减小,尤其是在.NET开源之后。


    Mono在针对我想支持的平台方面做得更好。 除此之外,这都是主观的。

    我在以下平台上共享C#代码: - iOS(iPhone / iPad) - Android - Web(HTML5) - Mac(OS X) - Linux - Windows

    我可以分享更多的地方: - Windows Phone 7 - Wii - XBox - PS3 - 等等

    由于MonoTouch的工作非常出色,所以iOS就是iOS。 我不知道有什么好的方法可以用Java来定位iOS。 您无法使用Java将Windows Phone 7作为目标,因此我会说Java的移动时代已经过时了。

    对我来说最大的因素是个人生产力(和快乐)。 C#作为一种语言比Java恕我直言早了好几年,.NET框架使用起来是一种乐趣。 多年来,Java 7和Java 8中添加的大部分功能都在C#中。 像Scala和Clojure这样的JVM语言(都可以在CLR上找到)很不错。

    我认为Mono作为一个自己的权利平台(一个很好的平台),并将.NET视为Windows上Mono的微软实现。 这意味着我首先开发和测试Mono。 这很奇妙。

    如果Java和.NET(单声道让我们说)都是没有任何公司支持的开源项目,我每次都会选择Mono over Java。 我相信这只是一个更好的平台。

    .NET / Mono和JVM都是很好的选择,尽管我个人会在JVM上使用除Java之外的其他语言。

    我接受其他一些评论:

    问题:性能。

    **答案:JVM和CLR的表现都比反对者说的要好。 我会说JVM表现更好。 单声道一般比.NET慢(尽管不总是)。

    我个人会将ASP.NET MVC作为开发人员和最终用户在任何一天都用于J2EE。 对Google Native Client的支持也非常酷。 另外,我知道桌面Java应用程序的糟糕的GUI性能应该是过去的事情,但我一直在寻找缓慢的。 再说一遍,我可以对WPF说同样的话。 GTK#虽然速度很快,但没有理由让它们变慢。

    问题:Java拥有更大的可用库生态系统。

    答:可能是真的,但在实践中这是一个非问题。

    实际上,由于IKVM.NET的原因,每个Java库(包括JDK)都可以在.NET / Mono上运行。 这项技术是一个真正的奇迹。 整合是惊人的; 您可以像使用本机一样使用Java库。 不过,我只需要在一个.NET应用程序中使用Java库。 .NET / Mono生态系统通常提供比我需要的更多的功能。

    问题:Java有更好(更广泛)的工具支持

    答案:不在Windows上。 否则我同意。 MonoDevelop虽然不错。

    我想给MonoDevelop留言, 它是一颗宝石。 MonoDevelop集成了大部分我想要使用的工具,包括代码完成(intellisense),Git / Subversion集成,支持单元测试,SQL集成,调试,轻松重构和汇编浏览等。 对于从服务器端网页到移动应用程序的所有应用程序,使用相同的环境真是太棒了。

    问题:跨平台的兼容性。

    答:Mono是跨所有平台(包括Windows)的单一代码库。

    如果你愿意,可以先为Mono开发并在Windows上部署到.NET。 如果您比较MS和.NET之间的.NET,那么Java在跨平台一致性方面具有优势。 查看下一个答案...

    问题:单声道延迟.NET。

    答:不,不。 恕我直言,这是一个经常陈述但不正确的说法。

    Xamarin的Mono发行版使用C#,VB.NET,F#,IronPython,IronRuby,我认为可能是Boo开箱即用。 Mono C#编译器与MS完全一致。 Mono VB.NET编译器确实滞后于MS版本。 其他编译器在两个平台上都是相同的(就像其他.NET语言,如Nemerle,Boo和Phalanger(PHP))。

    Mono附带了许多实际的Microsoft编写代码,包括动态语言运行时(DLR),托管扩展性框架(MEF),F#和ASP.NET MVC。 由于Razor不是开源的,Mono目前使用MVC2,但MVC3在Mono上工作得很好。

    核心的Mono平台已经与.NET或许多年保持同步,并且兼容性令人印象深刻。 您可以使用完整的C#4.0语言,甚至可以使用一些C#5.0功能。 事实上,Mono通常以很多方式领导.NET。

    Mono实现了即使是Microsoft不支持的CLR规范的一部分(如64位阵列)。 在.NET世界中最令人兴奋的新技术之一是Rosylyn。 Mono多年来一直将C#编译器作为服务提供。 Rosylyn提供的一些内容也可以通过NRefractory获得。 Mono的一个例子仍然是SIMD加速游戏性能的指令。

    微软确实在.NET上提供了许多在Mono中不可用的产品,这是对于Mono滞后的误解。 Windows Presentation Foundation(WPF),Entity Framework(EF),WCF(Windows Communication Foundation)是Mono上无法工作或支持不佳的产品示例。 显而易见的解决方案是使用GTK#,NHibernate和ServiceStack等跨平台替代方案。

    问题:微软是邪恶的。

    答案是肯定的。 所以呢。

    许多人提供以下原因来避免使用单声道:

    1)你不应该使用Mono,因为应该避免使用Microsoft技术

    2)单声道很烂,因为它不允许你使用微软提供的每种技术

    对我来说,这些陈述显然是不相容的。 我拒绝第一条声明,但会在这里跳过这个论点。 第二种说法对所有的.NET替代品都是正确的。

    JVM是一个很好的平台,JVM语言的爆炸性很强。 用什么让你开心。 就目前而言,这对我来说通常是.NET / Mono。


    我实际上是用.NET开发的,先在Mono上运行我的所有测试,然后在Windows上运行。 这样我就知道我的应用程序是跨平台的。 我在ASP.NET和Winforms应用程序上都做得非常成功。

    我不确定哪里有人会得到Mono非常可怕的印象,但它确实在我的案例和意见中已经完成了工作。确实,对于.NET中最新和最伟大的发明来说,这是事实。世界,但到目前为止,Windows和Linux上的.NET 2.0对我来说非常稳固。

    请记住,这显然有很多怪癖,但其中大部分来自确保您正在编写可移植代码。 虽然框架在抽象出运行的操作系统方面做得非常出色,但像路径和文件名中区分大小写的小事情需要一些习惯,比如权限等。

    由于Mono基于我目前的经验,.NET绝对是非常跨平台的。

    链接地址: http://www.djcxy.com/p/52203.html

    上一篇: Is .NET/Mono or Java the better choice for cross

    下一篇: Where can I get info on the object parameter syntax for javascript functions?