Mono n'mieux cibler les plates-formes que je veux soutenir. Autre que cela, c'est toute subjective.
Je partage de code C# à travers les plates-formes suivantes:
- iOS (iPhone/iPad)
- Android
- Le Web (HTML5)
- Mac (OS X)
- Linux
- Windows
J'ai pu partager encore plus d'endroits:
- Windows Phone 7
- Wii
- XBox
- PS3
- etc.
Le point clef est iOS depuis MonoTouch fonctionne fantastiquement. Je ne sais pas du tout bon moyen pour cibler les iOS avec Java. Vous ne pouvez pas cibler Windows Phone 7 avec Java, donc je dirais que les jours de Java étant de mieux pour mobile sont derrière nous.
Le facteur le plus important pour moi est de productivité personnelle (et de bonheur). C# comme langage est années à venir, de Java, à mon humble avis et les .NET framework est un plaisir à utiliser. La plupart de ce qui est ajoutée dans Java 7 et Java 8 a été en C# depuis des années. JVM langues comme Scala et Clojure (les deux sont disponibles sur le CLR) sont assez bien quand même.
Je vois Mono comme une plate-forme dans son propre droit (un grand) et de les traiter .NET de Microsoft de la mise en œuvre de la Mono sur Windows. Cela signifie que j'ai développer et tester sur Mono premier. Cela fonctionne à merveille.
Si Java et en .NET (Mono disons) ont été des projets Open Source, sans le soutien d'une société, je choisirais Mono au lieu de Java à chaque fois. Je crois que c'est juste une meilleure plate-forme.
Les deux .NET/Mono et la JVM sont d'excellents choix, bien que je serais personnellement utiliser un autre langage que Java sur la JVM.
De mon point de vue sur certains des autres commentaires:
Problème: Les Performances.
**Réponse: à la Fois la JVM et le CLR faire mieux que ses détracteurs disent qu'ils font. Je dirais que la JVM de meilleures performances. Mono est généralement plus lent que .NET (mais pas toujours).
Personnellement, je prendrait ASP.NET MVC sur J2EE toute la journée à la fois en tant que développeur et de l'utilisateur final. Support pour Google Native Client est très cool aussi. Aussi, je sais que la mauvaise interface graphique de performances pour les pc de bureau applications Java est censé être une chose du passé, mais je continue de trouver lentes. Puis de nouveau, je pourrais dire la même chose pour WPF. GTK# est beaucoup rapide bien que si il n'y a pas de raison qu'ils ont à être lent.
Question: Java dispose d'un grand écosystème de bibliothèques disponibles.
Réponse: Probablement vrai, mais c'est un non-problème dans la pratique.
Pratiquement chaque bibliothèque Java (y compris le JDK) s'exécute juste dandy .NET/Mono grâce à IKVM.NET. Ce morceau de technologie est une vrai merveille. L'intégration est incroyable, vous pouvez utiliser une bibliothèque Java, tout comme il était originaire. Je n'ai eu qu'à utiliser les bibliothèques Java .NET application. L' .NET/Mono écosystème en général offre plus que j'ai besoin.
Question: Java a de mieux (plus large) des outils de soutien
Réponse: non, Pas sur Windows. Sinon je suis d'accord. MonoDevelop est bien quand même.
Je veux donner un shout-out à MonoDevelop; c'est un bijou. MonoDevelop intègre la plupart des outils que je veux utiliser, y compris l'achèvement du code (intellisense), Git/Subversion d'intégration, de support pour les tests unitaires, d'intégration de SQL, le débogage facile refactoring, et l'assemblage de naviguer avec à la volée à la décompilation. Il est merveilleux à utiliser le même environnement pour tout, de la côté serveur web à des applications mobiles.
Question: la Compatibilité entre les plates-formes.
Réponse: Mono est une base de code unique à travers toutes les plateformes, y compris Windows.
Développer pour les Mono premier et le déploiement .NET sur Windows si vous le souhaitez. Si vous comparez .NET à partir de MS de Java si Java a l'avantage en termes de cohérence entre les plates-formes. Voir réponse suivante...
Question: Mono gal .NET.
Réponse: Non, il ne fonctionne pas. À mon humble avis, ce qui est souvent affirmé, mais instruction incorrecte.
Le Mono de distribution de Xamarin est livré avec C#, VB.NET, F#, IronPython, IronRuby, et je pense que peut-être Boo hors de la boîte. Le Mono compilateur C# est complètement à jour avec MME Le Mono VB.NET compilateur ne lag la MME version. Les autres compilateurs sont les mêmes sur les deux plates-formes (comme le sont les autres .NET des langues comme Nemerle, Boo, et Phalanger (PHP) ).
Mono est livré avec beaucoup de Microsoft code écrit, y compris le Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F#, et ASP.NET MVC. Parce que le Rasoir n'est pas Open Source, Mono est actuellement livré avec MVC2 mais MVC3 fonctionne sur Mono amende juste.
Le noyau Mono plate-forme a gardé le rythme .NET ou de nombreuses années, et la compatibilité est impressionnant. Vous pouvez utiliser C# 4.0 langue et même certains C# 5.0 dispose d'aujourd'hui. En fait, Mono conduit souvent .NET dans de nombreuses façons.
Mono met en œuvre les parties de la CLR spec que même Microsoft ne prend pas en charge (en 64 bits tableaux). L'un des plus excitants nouveaux morceaux de la technologie dans le .NET monde est Rosylyn. Mono a offert le compilateur C# comme un service pour de nombreuses années. Une partie de ce que Rosylyn offre est disponible via NRefractory . Un exemple de Mono est encore à venir seraient les instructions SIMD pour accélérer les performances de jeu.
Microsoft offre un certain nombre de produits sur le dessus de .NET qui ne sont pas disponibles en Mono qui ont l'idée fausse au sujet de la Mono à la traîne. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) sont des exemples de produits qui ne fonctionnent pas, ou sont mal pris en charge, sur Mono. La solution évidente est d'utiliser de la croix-plate-forme de solutions de rechange, comme GTK#, NHibernate, et ServiceStack à la place.
Question: Microsoft c'est le mal.
Réponse: Vrai. Donc, ce que.
Beaucoup de gens offrent les raisons suivantes pour éviter d'utiliser Mono:
1) Vous ne devez pas utiliser de Mono parce que Microsoft tech devrait être évitée
2) Mono est nul car il ne vous permet pas d'utiliser toutes les technologies que Microsoft offre
Pour moi, il est clair que ces déclarations sont incompatibles. Je rejette la première déclaration, mais d'ignorer que l'argument ici. La deuxième affirmation est vraie de tous .NET solutions de rechange.
La JVM est une grande plate-forme et l'explosion de la JVM langues est génial. Utilisez ce qui vous rend heureux. Pour l'instant, c'est souvent .NET/Mono pour moi.