使用Mono相较于Java的主要优势是什么?

33
使用Mono相比Java(或任何其他“免费”或Linux友好语言/运行时)的主要优势是什么?
即使Mono始终落后于.NET框架的最新发展,为什么您还想使用Mono而不是另一种传统的开源语言/框架(Java)?
编辑: 正如下面有人提到的那样,我想根本问题是,为什么您要在Linux平台上使用.NET?

19
因为Mono有C#,而C#不是Java。 - Rayne
1
只是好奇,这个问题已经有2个踩了,为什么? - fmsf
4
我认为这并不主观,我只是想知道你为什么希望在Linux上“奋斗”使用.NET,而不是使用本来就被设计用于Linux的语言。 :) - Andy White
2
“Mono将始终落后于.NET框架的最新发展。”这是什么意思?在某些情况下,Mono已经比微软的“官方”运行时更快了。 - jrockway
2
我更多地谈论语言特性,例如LINQ、WCF等。当微软发布新功能时,Mono支持它们之前总会有一段时间的滞后。 - Andy White
显示剩余4条评论
13个回答

62
答案很明显:因为你想在Linux上使用.Net。
当然,这引出了一个问题(我认为这才是你真正关心的问题):为什么你想在Linux上使用.Net(而不是Java)?
有很多原因:
  • 服务器和WPF或Winforms应用程序之间的通用代码;
  • 使用特定的.Net语言,比如F#;
  • Java中没有的语言特性(闭包、运算符重载、部分类、运行时泛型、索引器、委托、LINQ、变量类型等等);
  • 你或你的团队已经熟悉C#;
  • 等等。

2
我最喜欢的Linux应用程序之一“Gnome-do”(类似于Mac Quicksilver)是用Mono编写的。http://do.davebsd.com/ - mmcdole
10
只是挑刺一下“beg the question”正确用法:http://begthequestion.info/。 Jeff Atwood在播客中经常犯同样的错误... - Renaud Bompuis
2
是的,我在大学学过入门哲学课程,当时这个问题也被提了出来。不管喜欢与否,我们赋予“Jeff”、“I”和其他人的用法已经成为现代语言中被接受的用法。 - cletus
3
我喜欢你在谈论自己误用某个词语时,正确地使用了“beg the question”(纠缠问题)这个词汇。做得好,Cletus,做得好。 - Kevin
啊哈!Cletus一定是Jeffs的超级秘密替身! - Bryan Legend
显示剩余2条评论

11

就我个人而言,我更信任Linux作为服务器平台,但想使用C#作为编程语言。


8

7

有些人比起Java更喜欢C#。此外,需要考虑到C#是ISO标准语言,而Java则不是。也许你想在Linux服务器上运行ASP.NET代码?事实上,有很多原因。


4

我认为这取决于个人喜好。我熟悉c#,想开发可以在我的Ubuntu笔记本电脑或Vista笔记本电脑上运行的应用程序。因此,我使用mono。如果我更熟悉Java,那可能就是我会使用的。

仅供参考。


2
我曾经在一家以ASP.NET为主要产品的公司工作。他们意识到,如果能让产品在Linux服务器上运行,就可以提高市场份额。如果没有Mono,这当然会相当困难。我被赋予了任务,花些时间看看他们的代码在Mono下能否运行(如果有的话)。这大约是两年前的事情,大部分代码都编译成功了,但当时Mono对泛型的支持还有些欠缺。我认为现在它已经成熟了,但有些代码甚至无法解析。代码还使用了p/invoke来调用本地代码,这也使事情变得有点有趣。尽管如此,尝试让它运行仍然很有趣。

2

由于微软在实施变更之前向C# ISO标准提交更改,理论上Mono不需要跟随.NET。但现实情况是,庞大的微软预算能够率先到达终点。


2

正如大家所说的,“在Linux上运行C#”或“跨平台”或其他相关内容。

我对Mono感兴趣的原因是它可以利用所有.NET的优势,而Java无法做到这一点。基本上,你的问题归结为Java与.NET的比较,我不会开始列举它们之间的数百个比较点(在Google上,你会找到许多J2EE vs. ASP.NET和Java vs. C#的比较)。

那么.NET和Java之间的主要区别是什么呢?它与.NET背后庞大的力量(Microsoft,Novell正在将其翻译为其他平台)或Java的多厂商方法有关。仅选择一个应用程序服务器的过程可能足以让一些人选择Mono。

像微软这样的一个大型独立供应商相对于Java似乎有哪些优势:

  1. 集中化文档(曾经是“惊人的好文档,全部在一个地方”,但有几个人告诉我我错了)
  2. 无需进行单独的平台选择(例如ASP.NET或ASP.NET,不需要servlets+JSP+JSTL?+Axis)
  3. 其他一些我忘记了的东西

然后还有其他巨大的区别:Java是一种单一的语言,而Mono(我认为)可以运行从各种语言编译的CLR代码。


就我个人而言,我认为与Java相比,.Net的文档非常糟糕。很奇怪。 - Lawrence Dol
是的,我想有些人可能会有这种感觉。我们需要做一些比较,或者在SO上提出另一个问题来解决它 :) - Dan Rosenstark
嗯...也许是Java已经进步了,而我一直在玩其他编程语言 :) 我只记得Winforms文档非常完善,而Swing Javadocs则难以理解。但我们说的是2004/5年的事情。 - Dan Rosenstark
@yar:我认为你的第一点不正确。Java也有集中化的文档。而且,我同意其他帖子中提到的Microsoft .NET文档很糟糕。 - sivabudh
1
此外,Java确实是一种单一的编程语言,但JVM支持多种语言使用,比如Clojure、Groovy、Scala等等。 - sivabudh
显示剩余2条评论

2

Mono在某些方面落后,但在其他方面则领先。例如,Mono支持SSE和全AOT编译 - 内置的。另一方面... Mono需要一些时间来实现即将推出的新 .NET 版本中的所有新功能... 例如... 相当广泛的并行库。


1

任何使用Mono的人都面临来自Microsoft的软件专利危险。

这就是为什么不仅新应用程序应避免使用Mono,而且首先应避免使用C#。

只有当你已经被Windows束缚并想要逃脱时,迁移到Mono才有意义。

为什么自由软件不应该依赖于Mono或C#


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接