Mono 的库比 Java 少多少?

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

  • 性能(例如,我听说 Java 对于线程处理很有好处,而且我听说 .NET 的运行时代码优化最近变得非常好)
  • 真实世界 可移植性(两者都意味着可移植,两者的第 22 条军规是什么?)
  • 工具可用性(CI, 、构建自动化、调试、IDE)

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

我的主要目标平台是 Linux。

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


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

有帮助吗?

解决方案

嗯...Java实际上更便携。Mono 并非在所有地方都得到实现,而且它明显落后于 Microsoft 的实现。Java SDK 似乎在跨平台上保持了更好的同步(并且它可以在更多平台上运行)。

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

2014 年更新

2014年我仍然坚持这个观点。然而,我会说,在很长一段时间没有真正关心之后,我现在才开始关注 Mono,所以 Mono 运行时(或生态系统)可能有我尚未做出的改进意识到。AFAIK,仍然不支持 WPF、WCF、WF、WIF。Mono 可以在 iOS 上运行,但据我所知,Java 运行时仍然比 Mono 运行在更多的平台上。此外,Mono 开始看到一些经过大幅改进的工具(Xamarin),而 Microsoft 似乎有一种更加跨平台的态度,并且愿意与合作伙伴合作,使他们成为互补的,而不是竞争的(例如,Mono 将是即将到来的 OWIN/Helios ASP.NET 领域非常重要的一部分)。我怀疑在未来几年中,可移植性方面的差异将会迅速缩小,尤其是在 .NET 开源之后。

2018 年更新

我对此的看法开始走向相反的方向。我认为 .NET,尤其是 .NET Core,已经开始实现与 Java 的“可移植性对等”。目前正在努力将 WPF 引入某些平台的 .NET Core,并且 .NET Core 本身现在可以在很多平台上运行。Mono(由 Xamarin 所有,现在由 Microsoft 所有)是一个比以往任何时候都更加成熟和完善的产品,编写在多个平台上运行的应用程序不再是 .NET 黑客的深度知识领域,而是一个相对简单的努力。当然,有些库、服务和应用程序仅适用于 Windows,或者只能针对特定平台 - 但 Java(广义上)也是如此。

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

其他提示

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

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

我可以在更多地方分享它:- Windows Phone 7 -Wii -Xbox -PS3-等。

最重要的是 iOS,因为 单点触控 效果非常好。我不知道有什么好的方法可以用 Java 来定位 iOS。您无法使用 Java 来针对 Windows Phone 7,因此我想说 Java 更适合移动设备的时代已经过去了。

对我来说最重要的因素是个人生产力(和幸福感)。恕我直言,C# 作为一种语言比 Java 领先很多年,而且 .NET 框架使用起来很愉快。Java 7 和 Java 8 中添加的大部分内容多年来一直在 C# 中。不过,像 Scala 和 Clojure(都可以在 CLR 上使用)这样的 JVM 语言非常好。

我认为 Mono 本身就是一个平台(一个伟大的平台),并将 .NET 视为 Mono 在 Windows 上的 Microsoft 实现。这意味着我首先在 Mono 上进行开发和测试。这效果非常好。

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

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

我对其他一些评论的看法:

问题:表现。

**回答:JVM 和 CLR 的性能都比批评者所说的要好。我想说 JVM 的性能更好。Mono 通常比 .NET 慢(尽管并非总是如此)。

作为开发人员和最终用户,我个人随时都会选择 ASP.NET MVC 而不是 J2EE。支持 谷歌原生客户端 也很酷。另外,我知道桌面 Java 应用程序的 GUI 性能不佳应该成为过去,但我不断发现性能缓慢的应用程序。话又说回来,我也可以对 WPF 说同样的话。不过 GTK# 已经足够快了,所以没有理由让它们变慢。

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

回答:可能是真的,但在实践中这不是问题。

实际上,每个 Java 库(包括 JDK)都可以在 .NET/Mono 上运行得很好,这要归功于 IKVM网络. 。这项技术确实是一个奇迹。这种整合是惊人的;您可以像使用本机库一样使用 Java 库。不过,我只需要在一个 .NET 应用程序中使用 Java 库。.NET/Mono 生态系统通常提供的功能超出了我的需要。

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

回答:不适用于 Windows。否则我同意。不过 MonoDevelop 也不错。

我想大声疾呼 单一开发;它是一颗宝石。MonoDevelop 集成了我想要使用的大部分工具,包括代码完成(智能感知)、Git/Subversion 集成、单元测试支持、SQL 集成、调试、轻松重构以及带有即时反编译的程序集浏览。对于从服务器端 Web 到移动应用程序的所有内容使用相同的环境真是太棒了。

问题:跨平台兼容性。

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

首先针对 Mono 进行开发,然后根据需要部署到 Windows 上的 .NET。如果将 MS 的 .NET 与 Java 进行比较,那么 Java 在跨平台一致性方面具有优势。看下一个答案...

问题:Mono 落后于 .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 世界中最令人兴奋的新技术之一是 罗西琳. 。Mono 多年来一直提供 C# 编译器服务。Rosylyn 提供的一些功能可通过 N耐火材料 以及。Mono 仍然领先的一个例子是用于加速游戏性能的 SIMD 指令。

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

问题:微软是邪恶的。

回答:真的。所以呢。

许多人提出了以下避免使用 Mono 的理由:

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

2) Mono 很糟糕,因为它不允许你使用微软提供的所有技术

对我来说,很明显这些说法是不相容的。我拒绝第一个陈述,但将在这里跳过该论点。第二个陈述适用于所有 .NET 替代方案。

JVM 是一个伟大的平台,JVM 语言的爆炸式增长令人惊叹。使用让你快乐的东西。目前,对我来说通常是 .NET/Mono。

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

我不太确定有些人从哪里得到 Mono 如此可怕的印象,但在我的案例和观点中,它确实完成了它的工作。确实,对于 .NET 中最新和最伟大的发明,您会有些滞后。但到目前为止,Windows 和 Linux 上的 .NET 2.0 对我来说非常可靠。

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

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

Java实际上正如大家所说的那样是跨平台的。几乎所有主流操作系统都有一个 JVM 实现(最后甚至是 Mac OS X),而且它们都运行得很好。并且有大量的跨平台开源工具。

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

我认为这个问题的措辞不正确。C# 对比Java 在跨平台使用方面远不如(a)您需要支持哪些平台,以及(b)考虑核心库和可用的第三方库更有趣。语言几乎是决策过程中最不重要的部分。

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

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

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

  • 兼容性。这是开发跨平台程序时需要考虑的关键问题。两个问题:第一,平台兼容性。Java 仍然获胜,因为 JDK 由单一且原始的公司 Sun 维护得很好。Mono 不是由 MS 维护的,因此您还无法保证更新兼容性。2.向后兼容性。Sun 在向后兼容性方面保持着良好的声誉,尽管有时这似乎过于僵化并减慢了步伐。

  • 工具。Java 有良好的跨平台 IDE。Netbeans、Eclipse 等其中大部分都是免费的。VS Studio 很好,但仅限于 Windows,而且价格不贵。它们都提供了良好的单元测试、调试、配置文件等。

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

我一直在问同样的问题,恕我直言,.NET/Mono 似乎是一个更好的选择,因为 Mono 在跨平台桌面应用程序方面拥有良好的记录 (相对于 Java)当然, Mono 正在突飞猛进地进步 这些日子。

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

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

根据您的目标客户是谁,您可能还会发现使用 Mono 确实存在阻力 - Novell 是否为 Mono 提供与 Windows 上的 Java 或 .NET 相同类型的供应商支持?

如果您的主要目标是在 Windows 上托管服务,那么考虑这种选择是有意义的,但由于您主要针对 Linux,所以这对我来说似乎是理所当然的事情。

Java 被设计为跨平台的;C#/.Net 则不然。如有疑问,请使用专为您的目的设计的工具。

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

我认为答案是“这取决于”。 Java几乎可以运行任何东西,但是.NET/MONO(IMHO)是桌面的更好框架。所以我想答案实际上取决于您计划瞄准的平台。

补充一点,如果您落后一个版本,Java 会更具可移植性 - Java 5 仍然具有许多出色的功能,因此您可以等待 Java 6,并且在语言和库方面仍然有很大的开发空间和。Mac 是主要平台,可能需要一些时间才能赶上最新的 Java 版本。

Java也有一个优秀的 标准机构 根据许多不同公司的输入智能地发展平台。这是一个经常被忽视的功能,但它甚至可以让新功能在多个平台上正常运行,并为一些深奥的东西提供大量的库支持(作为可选扩展)。

我会投票支持 Java 比 C# 更可移植。Java 当然也有一套非常丰富的标准库。还有一系列广泛的开源第三方库,例如 Jakarta 项目提供的库(http://jakarta.apache.org/).

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

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

虽然 Mono 有它的 问题份额 我认为它具有更好的跨平台兼容性,特别是如果您依赖本机平台调用。

Stack Overflow 上没有足够的文字来强调在 .NET/Mono 上(至少根据我的经验 3...)多平台与多平台上本地调用和执行某些内容要顺畅得多。同等的 Java 工作。

鳄鱼厅 你有一些数据来支持这一点吗?

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

背景:我从 Windows 3.1 开始就使用 Windows,目前是 Linux 用户(仍在运行 Windows 7,出色的操作系统,在用于 Visual Studio 2010 和其他工具的 VM 上)。

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

Java更跨平台?我对此毫不怀疑(历史证明了这一点),但更快(并不是说 .NET 是)不太确定,我希望看到一些真正的基准测试。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top