.NET / Mono或Java是跨平台开发的更好select吗?

Mono比Javaless了多less库?

我缺乏关于这两种select的概述,但我有很大的自由select我的下一个项目。 我正在寻找在这方面的硬技术事实

  • 性能(例如,我被告知Java对线程有好处,而且我听说最近对于.NET的运行时代码优化已经变得非常好)
  • 真实世界的可移植性(它们都是可移植的,每个Catch-22是什么?)
  • 工具可用性( CI ,构build自动化,debugging,IDE)

我特别在寻找你在自己的工作中实际经历的事情,而不是我可以谷歌的事情。 我的应用程序将是一个后端服务,处理来自时间序列的大量数据。

我的主要目标平台是Linux。

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


仅供参考,自那之后,我就select了Java作为这个项目,因为它在可移植性方面似乎更加糟糕,而且在较老的系统上也有一段时间了。 对此我感到有些遗憾,因为我对C#非常好奇,并且很想在其中完成一些大型项目,但也许下一次。 感谢所有的build议。

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

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

2014年更新

我仍然在2014年持有这个意见。但是,我将通过说我现在刚刚开始关注Mono一段时间以后不关心,所以有可能在Mono运行时(或生态系统)我还没有意识到。 AFAIK,仍然不支持WIF的WPF,WCF,WF。 Mono可以在iOS上运行,但据我所知,Java运行时仍然运行在比Mono更多的平台上。 此外,Mono开始看到一些改进的工具(Xamarin),微软似乎有更多的跨平台的态度和意愿,与合作伙伴合作,使他们免费,而不是竞争(例如,单声道将即将到来的OWIN / Helios ASP.NET风景的一个非常重要的部分)。 我怀疑在未来几年,可移植性的差异会迅速减less,尤其是在.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 IMHO早了好几年,而.NET框架也是一种喜悦。 大多数在Java 7和Java 8中添加的东西多年来一直在C#中。 像Scala和Clojure这样的JVM语言(都可以在CLR上find)是相当不错的。

我将Mono视为自己的一个平台(一个很好的平台),并将.NET视为微软在Windows上实现的Mono。 这意味着我先开发和testingMono。 这工作很好。

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

.NET / Mono和JVM都是很好的select,尽pipe我个人在JVM上使用了除Java以外的其他语言。

我接受其他一些评论:

问题:性能。

**答案:JVM和CLR都比反对者说的要好。 我会说JVMperformance更好。 单声道通常比.NET慢(尽pipe不总是)。

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

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

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

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

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

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

我想给MonoDevelop留言, 它是一颗gem。 MonoDevelop集成了我想要使用的大部分工具,包括代码完成(intellisense),Git / Subversion集成,支持unit testing,SQL集成,debugging,轻松重构和汇编浏览。 从服务器端网页到移动应用程序,使用相同的环境是很好的。

问题:跨平台的兼容性。

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

如果你喜欢的话,先为Mono开发并在Windows上部署到.NET。 如果你比较从MS到Java的.NET,那么Java在跨平台的一致性方面具有优势。 看下一个答案…

问题:单声道滞后.NET。

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

Xamarin的Mono发行版附带了C#,VB.NET,F#,IronPython,IronRuby,我想也许是Boo开箱即用。 Mono C#编译器与MS完全一致。 单声道VB.NET编译器确实落后于MS版本。 其他编译器在两个平台上都是相同的(就像Nemerle,Boo和Phalanger(PHP)等其他.NET语言一样)。

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

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

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

微软在.NET上提供了许多在Mono中没有的产品,这是对于Mono滞后的误解。 Windows Presentation Foundation(WPF),entity framework(EF),WCF(Windows Communication Foundation)是Mono上不起作用或支持不良的产品的示例。 显而易见的解决scheme是使用GTK#,NHibernate和ServiceStack等跨平台的替代scheme。

问题:微软是邪恶的。

答:是的。 所以呢。

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

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

2)单声道糟透了,因为它不允许你使用微软提供的每一项技术

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

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

我实际上是用.NET开发的,先在Mono上运行我的所有testing,然后在Windows上运行。 这样我知道我的应用程序是跨平台的。 我已经在ASP.NET和Winforms应用程序上成功完成了这个任务。

我真的不确定哪里有人会给Mono这么糟糕的印象,但是在我的案例和意见中,它确实做到了这一点。确实,对于.NET中最新最伟大的发明来说,世界,但到目前为止,Windows和Linux上的.NET 2.0对我来说是非常稳固的。

请记住,这显然有很多怪癖,但其中大部分来自确保您正在编写可移植代码。 虽然框架在抽象操作系统方面做了很多工作,但是Linux的path和文件名区分大小写等一些小问题需要一些习惯,比如权限等。

基于我迄今为止的经验,基于Mono的.NET绝对是非常跨平台的。

Java实际上就像所有人都说的那样是跨平台的。 对于任何主stream操作系统(最终甚至是Mac OS X),都有一个JVM实现,而且它们都工作得很好。 而且还有大量的开源工具,就像跨平台一样。

唯一的问题是,如果不编写某些DLL或SO,就无法在Java中执行某些本地操作。 这些在实践中出现是非常罕见的。 但是,在所有这些情况下,我都能够通过产生本地进程和屏幕截取结果来解决这个问题。

我认为这个问题是错误的措词。 在跨平台的使用方面,C#和Java相比,(a)你需要支持哪些平台,以及(b)考虑核心库和可用的第三方库,都不那么有趣。 语言几乎是决策过程中最不重要的部分。

Java是跨平台开发的更好select。

  • 性能。 由于虚拟机的原因,Java和.Net具有相似的性能水平,但JVM通常因为年和年的优化而具有更好的性能。

  • 图书馆。 虽然这取决于你的任务,但Java有更多的开源或第三方库。 对于服务器应用程序,J2EE,Spring,Struts等。对于GUI,尽pipe.Net提供了Win32层API,但是这会导致兼容性问题。 Java有Swing,SWT,AWT等,它在大多数情况下工作。

  • 兼容性。 这是开发跨平台程序时需要考虑的关键问题。 两个问题:第一,平台兼容性。 由于JDK是由单独的和原始的Sun公司维护的,Java依然获胜。 单声道不是由MS维护,所以你还没有保证更新兼容性。 2.向后兼容。 Sun在向后兼容方面保持着良好的声誉,尽pipe有时这看起来太僵化,并且放慢了脚步。

  • 工具。 Java具有良好的跨平台IDE。 Netbeans,Eclipse等,其中大部分是免费的。 VS工作室是好的,但只在Windows上,而不是一点点花费。 他们都提供了良好的unit testing,debugging,configuration文件等。

所以我build议Java是一个更好的select。 作为一个例子,Java开发了一些着名的桌面跨平台应用程序:Vuze,Limewire,BlogBridge,CrossFTP,更不用说那些IDE了。 至于.Net,我对这样的成功应用程序的知识有限。

我一直在问同样的问题,恕我直言,.NET / Mono似乎是一个更好的select,因为Mono在跨平台的桌面应用程序 (而不是Java) 方面有很好的logging ,当然, Mono是这些天突飞猛进 。

我也会说Java。 如果从成熟的angular度来看,Sun(和其他人)已经花费了更多的时间和精力来让JVM在非Windows平台上工作。

相反,Mono绝对是.NET生态系统中的二等公民。

根据你的目标客户是谁,你也可能发现有一个反对使用Mono的真正阻碍 – Novell是否提供了与Mono相同types的供应商支持,以便在Windows上获得Java或.NET?

如果你的主要目标是在Windows上托pipe你的服务,那么考虑这个select是有意义的,但是由于你主要是针对Linux的,所以对我来说这似乎是一种不容易的事情。

Java被devise成跨平台的; C#/ .Net不是。 如有疑问,请使用专为您devise的工具。

编辑:公平地说,.NET被devise用于embedded式/ PC /服务器环境,所以这是跨平台的sorting。 但它不是为Linuxdevise的。

为了增加一点对话的能力,如果你只保留一个版本,那么Java就更具可移植性了–Java5仍然有很多优秀的特性,所以你可以等待Java6,并且在语言和库方面仍然有很大的发展空间用。 Mac是需要一些时间赶上最新的Java版本的主要平台。

Java也有一个很好的标准组织 ,根据许多不同公司的input智能地发展平台。 这是一个经常被忽视的function,但是它甚至可以保持跨多个平台的新function,并提供了一些深奥的东西(作为可选扩展)的库支持范围。

我想答案是“这要看情况”。 Java几乎可以运行任何东西,但是.NET / Mono(IMHO)是桌面的一个更好的框架。 所以我想这个答案真的取决于你计划瞄准的平台。

我会投票Java比C#更便携。 Java绝对也有一套非常丰富的标准库。 还有一些广泛的开源第三方库,如雅加达项目提供的那些( http://jakarta.apache.org/ )。

所有常见的嫌疑人都存在CI,unit testing等等。 跨平台的IDE支持也非常好,如Eclipse,Netbeans,IntelliJ IDEA等。

还有其他的语言select。 我非常喜欢Python,它在Windows,Linux和Mac上运行良好,并且有丰富的库。

虽然Mono有它的问题,我认为它有一个更好的跨平台兼容性的故事,尤其是如果你依赖本地平台调用。

在Stack Overflow上没有足够的话来强调在.NET / Mono中(至less在我的经验3 …)多个平台上对本地调用和执行的东西进行更平滑的操作。

Gatorhall你有一些数据可以支持吗?

性能。 由于虚拟机的原因,Java和.Net具有相似的性能水平,但JVM通常因为年和年的优化而具有更好的性能。

背景:自Windows 3.1以来,我是一名Windows用户,目前是Linux用户(仍然运行Windows 7,操作系统非常好,虚拟机上用于Visual Studio 2010和其他工具)。

重点:我和很多用户(Windows,Linux等),我知道,可能会不同意你的看法。 即使在Linux桌面应用程序上,Java往往会执行得比较慢,ASP.NET执行的速度比Java服务器页面要快很多倍。 有些人可能会同意,即使是非编译的PHP在几种情况下执行得更好。

Java是更跨平台的? 我对此毫无疑问(历史回顾了这一点),但更快(不是说.NET)不那么确定,我希望看到一些真正的基准。