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

时间:2020-03-05 18:53:03  来源:igfitidea点击:

Mono的库比Java的库少多少?

我没有对这两种选择的概述,但是对于下一个项目,我有很大的选择自由。我正在寻找以下方面的硬技术事实:

  • 性能(例如,我被告知Java很适合线程处理,而且听说最近.NET的运行时代码优化非常出色)
  • 真实世界的可移植性(它们都是便携式的,每个Catch-22是什么?)
  • 工具可用性(CI,构建自动化,调试,IDE)

我特别是在寻找我们在自己的工作中实际体验到的东西,而不是我能用Google搜索到的东西。我的应用程序将是一个后端服务,用于处理时间序列中的大量数据。

我的主要目标平台是Linux。

编辑:
为了更恰当地表达我的问题,我对整个软件包(第三方库等)感兴趣,而不仅仅是语言。对于库,这大概可以归结为" Mono比Java少多少个库"的问题?

仅供参考,自此以后,我选择Java进行该项目,因为在可移植性方面它似乎更加疲惫不堪,而且在较旧的系统上也存在了一段时间。我对此感到有点难过,因为我对Cand很好奇,我很乐意在其中做一些大型项目,但也许是下一次。感谢所有的建议。

解决方案

回答

我认为这个问题的措词不正确。简历就跨平台使用而言,Java比(a)我们需要支持的平台和(b)考虑核心库和可用的第三方库的有趣程度要低得多。语言几乎是决策过程中最不重要的部分。

回答

好吧……Java实际上更具可移植性。 Mono并非在所有地方都实现,并且它大大落后于Microsoft的实现。 Java SDK似乎可以在各个平台之间保持更好的同步(并且可以在更多平台上使用)。

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

2014年更新

我在2014年仍然持这种观点。不过,我要说很久以后才开始关注Mono,因为我对此并不满意,因此Mono运行时(或者生态系统)可能有所改进)我还没有意识到。 AFAIK,仍然不支持WIF的WPF,WCF,WF。 Mono可以在iOS上运行,但是据我所知,Java运行时仍比Mono运行在更多平台上。另外,Mono开始看到一些经过改进的工具(Xamarin),并且Microsoft似乎拥有更多的跨平台态度和愿意与合作伙伴合作以使他们互为补充,而不是竞争(例如,Mono将成为即将到来的OWIN / Helios ASP.NET格局中非常重要的一部分)。我怀疑在未来几年中,可移植性的差异会迅速减少,尤其是在.NET开放源代码之后。

2018年更新

我对此的看法正开始发生变化。我认为.NET,尤其是.NET Core,尤其是在.NET中,已经开始实现与Java的"可移植性对等"。目前正在努力将WPF引入某些平台的.NET Core,并且.NET Core本身现在可以在许多平台上运行。 Mono(由Xamarin拥有,现在由Microsoft拥有)是一种比以往更加成熟和完善的产品,并且编写可在多个平台上工作的应用程序不再是.NET黑客的深入诊断领域,而是一项相对简单的工作。当然,有些库和服务以及应用程序仅是Windows,或者只能针对特定平台,但Java(广泛地)也可以说相同。

如果我现在不做OP的话,我认为没有语言或者技术堆栈本身固有的原因会阻止我为以后的任何应用程序选择.NET。

回答

Java实际上就像每个人所说的那样是跨平台的。几乎所有主流操作系统(最终甚至是Mac OS X)都有一个JVM实现,它们都运行良好。而且还有大量跨平台的开源工具。

唯一要注意的是,如果不编写某些DLL或者SO,我们将无法在Java中执行某些本机操作。这些在实践中很少出现。但是,在所有这些情况下,我都可以通过生成本机进程并筛选结果来解决它。

回答

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

我不确定从哪里得到Mono的印象是如此恐怖,但是就我的观点和观点而言,Mono确实做到了这一点。确实,.NET的最新,最伟大的发明会有些滞后世界,但是到目前为止,Windows和Linux上的.NET 2.0对我来说还是非常可靠的。

请记住,显然有很多奇怪的地方,但是其中大多数来自确保我们正在编写可移植的代码。虽然这些框架在抽象化我们正在运行的OS方面做得很出色,但是诸如Linux在路径和文件名中区分大小写之类的小事情以及诸如权限之类的事情都需要一点时间来适应。

根据我到目前为止的经验,.NET绝对是跨平台的,这要归功于Mono。

回答

Java被设计为跨平台的。 C#/。Net不是。如有疑问,请使用为我们目的而设计的工具。

编辑:公平地说,.NET设计为可在嵌入式/ PC /服务器环境中工作,因此这是跨平台的SORT。但是它不是为Linux设计的。

回答

我也要说Java。如果从成熟度的角度来看,Sun(和其他公司)已经花费了更多的时间和精力来使JVM在非Windows平台上运行。

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

根据目标客户是谁,我们可能还会发现反对使用Mono确实存在反制。Novell是否提供与Windows上的Java或者.NET相同的Mono厂商支持?

如果主要目标是在Windows上托管服务,那么考虑选择此选项将很有意义,但是由于主要目标是Linux,所以对我来说似乎很容易。

回答

还有其他语言选择。我已经非常喜欢Python,它可以在Windows,Linux和Mac上很好地工作,并且具有丰富的库。

回答

我赞成Java比C#具有更高的可移植性。 Java肯定也有一组非常丰富的标准库。还有大量开放源代码的第三方库,例如Jakarta项目(http://jakarta.apache.org/)提供的库。

所有常见的可疑对象也都存在CI,单元测试等。跨平台IDE支持也非常好,例如Eclipse,Netbeans,IntelliJ IDEA等。

回答

为了使对话更加有趣,如果我们仍然落后于Java 5一个版本,那么Java将具有更大的可移植性,因此我们可以等待Java 6,并且在语言和库开发方面还有很多选择,这比Java 5具有更多的可移植性。 。 Mac是主要平台,可能需要一些时间才能赶上最新的Java版本。

Java还有一个出色的标准机构,可以根据许多不同公司的意见,智能地扩展该平台。这是一个经常被忽视的功能,但是它甚至可以使新功能在多个平台上正常运行,并且为某些深奥的事物(作为可选扩展)提供了很多的库支持。

回答

我一直在问同样的问题,恕我直言,.NET / Mono似乎是一个更好的选择,这仅仅是因为Mono在跨平台桌面应用程序(与Java相对)方面拥有良好的记录,当然,Mono是这些天来不断进步。

回答

我认为答案是"取决于情况"。 Java几乎可以在任何东西上运行,但是.NET / Mono(IMHO)是更好的桌面框架。因此,我想答案实际上取决于我们计划针对的平台。

回答

尽管Mono存在很多问题,但我认为它具有更好的跨平台兼容性,尤其是在我们依赖于本机平台调用的情况下。

在Stack Overflow上没有足够的词汇来强调在多个平台上进行.NET / Mono中本机调用和执行(至少以我的经验3 ...)与在同等Java工作量上相比,执行本机要平滑得多。

回答

Java是跨平台开发的更好选择。

  • 表现。由于虚拟机的存在,Java和.Net的性能水平相似,但是由于经过多年的优化,JVM通常具有更好的性能。
  • 图书馆。尽管这取决于任务,但是Java那里有更多可用的开源或者第三方库。对于服务器App,J2EE,Spring,Struts等。对于GUI,尽管.Net提供了Win32层API,但这会导致兼容性问题。 Java具有Swing,SWT,AWT等。在大多数情况下,它都可以工作。
  • 兼容性。这是开发跨平台程序时需要考虑的关键问题。两个问题:第一,平台兼容性。由于JDK由单一原始公司Sun维护得很好,因此Java仍然是赢家。 MS不维护Mono,因此我们不能保证更新兼容性。 2.向后兼容。 Sun在其向后兼容性方面一直保持良好声誉,尽管有时这似乎过于僵化并减慢了步伐。
  • 工具。 Java具有良好的跨平台IDE。 Netbeans,Eclipse等。其中大多数是免费的。 VS Studio很好,但仅在Windows上才花一点钱。两者都提供良好的单元测试,调试,配置文件等。

因此,我建议Java是一个更好的选择。作为示例,有一些由Java开发的著名的桌面跨平台应用程序:Vuze,Limewire,BlogBridge,CrossFTP,更不用说那些IDE了。至于.Net,我对此类成功应用程序的了解有限。