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

NET/Mono或Java是跨平台开发的更好选择吗?,java,.net,linux,mono,cross-platform,Java,.net,Linux,Mono,Cross Platform,Mono的库比Java少多少 我缺乏对这两个备选方案的概述,但对于我的下一个项目,我有很大的选择自由。我正在寻找在以下领域的硬技术事实: 性能(例如,我听说Java非常适合线程,我听说运行时代码优化最近在.NET中变得非常好) 现实世界的可移植性(两者都意味着可移植性,各自的第22条军规是什么?) 工具可用性(、构建自动化、调试、IDE) 我特别想要的是你在自己的工作中实际体验到的东西,而不是我可以在谷歌上搜索到的东西。我的应用程序将是一个后端服务,处理来自时间序列的大量数据 我的主要目标平

Mono的库比Java少多少

我缺乏对这两个备选方案的概述,但对于我的下一个项目,我有很大的选择自由。我正在寻找在以下领域的硬技术事实:

  • 性能(例如,我听说Java非常适合线程,我听说运行时代码优化最近在.NET中变得非常好)
  • 现实世界的可移植性(两者都意味着可移植性,各自的第22条军规是什么?)
  • 工具可用性(、构建自动化、调试、IDE)
我特别想要的是你在自己的工作中实际体验到的东西,而不是我可以在谷歌上搜索到的东西。我的应用程序将是一个后端服务,处理来自时间序列的大量数据

我的主要目标平台是Linux

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



仅供参考,我后来选择了Java来完成这个项目,因为它在可移植性方面似乎更具战斗力,而且它在较旧的系统上也已经存在了一段时间。我对此有点难过,因为我对C#很好奇,我很想在这方面做一些大项目,但也许下次吧。谢谢你的建议。

我认为这个问题用词不对。就跨平台使用而言,C#vs.Java远不如(a)需要支持哪些平台,以及(b)考虑核心库和可用的第三方库。语言几乎是决策过程中最不重要的部分。

嗯……Java实际上更具可移植性。Mono并不是到处都能实现的,它明显落后于微软的实现。JavaSDK似乎在不同平台之间保持了更好的同步(而且它可以在更多平台上工作)

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

2014年的更新

2014年我仍然持有这种观点。然而,我要证明这一点,我刚刚开始关注Mono,因为我已经很长一段时间没有真正关心它了,所以Mono运行时(或生态系统)可能有一些改进,我还没有意识到。顺便说一句,目前还没有对WPF、WCF、WF和WIF的支持。Mono可以在iOS上运行,但据我所知,Java运行时在比Mono多得多的平台上运行。此外,Mono开始看到一些大大改进的工具(Xamarin),微软似乎有一种更跨平台的态度,愿意与合作伙伴合作,使他们相互补充,而不是相互竞争(例如,Mono将是即将到来的OWIN/Helios ASP.NET领域中非常重要的一部分)。我怀疑在未来几年中,可移植性方面的差异将迅速缩小,特别是在.NET开源之后

2018年更新

我对这一点的看法开始与此相反。我认为.NET,特别是.NET内核,已经开始与Java实现“可移植性对等”。目前正在努力为一些平台将WPF引入.NETCore,而.NETCore本身现在也在很多平台上运行。Mono(归Xamarin所有,现在归微软所有)是一个比以往任何时候都更加成熟和完善的产品,编写在多个平台上工作的应用程序不再是.NET hackery的深层灵知领域,而是一项相对简单的工作。当然,有些库、服务和应用程序仅限于Windows或只能针对特定平台,但Java(广义上)也是如此


如果此时我站在OP的立场上,我想不出语言或技术堆栈本身固有的任何原因会阻止我从这一点开始为任何应用程序选择.NET。

Java实际上就像大家所说的那样是跨平台的。几乎所有主流操作系统都有一个JVM实现(最后甚至是Mac OS X),它们都工作得非常好。还有很多开源工具都是跨平台的


唯一需要注意的是,如果不编写一些DLL或SOs,就无法在Java中执行某些本机操作。实践中很少出现这种情况。不过,在所有这些情况下,我都能够通过生成本机进程和屏幕抓取结果来绕过它。

我实际上是在.NET中开发的,首先在Mono上运行所有测试,然后在Windows上运行。这样我就知道我的应用程序是跨平台的。我已经在ASP.NET和Winforms应用程序上非常成功地完成了这项工作

我真的不知道有些人是从哪里得到Mono如此可怕的印象的,但在我的案例和观点中,它确实起到了作用。的确,对于.NET世界中最新和最伟大的发明,你会有一点滞后,但到目前为止,Windows和Linux上的.NET 2.0对我来说非常可靠

请记住,这显然有很多怪癖,但大多数怪癖都来自于确保编写可移植代码。虽然这些框架在抽象出您正在运行的操作系统方面做得很好,但是像Linux在路径和文件名方面的大小写敏感度这样的小事需要一些习惯,就像权限这样的事情一样


根据我到目前为止的经验,.NET肯定是非常跨平台的,因为Mono;C#/Net不是。如有疑问,请使用专门为您设计的工具

编辑:公平地说,.NET设计用于嵌入式/PC/服务器环境,所以有点跨平台。但是它不是为Linux设计的。

我要说Java是w