108 votes

Le meilleur choix pour le développement multi-plateforme, est .NET/Mono ou Java ?

Comment les bibliothèques sont là pour Mono que pour Java?

Je manque de vue d'ensemble sur les deux alternatives, mais j'ai énormément de liberté de choix pour mon prochain projet. Je suis à la recherche pour les efforts faits techniques dans les domaines de la

  • de performance (par exemple, je me dit que Java est bon pour le filetage, et j'entends le moteur d'exécution d'optimisation de code est devenu très bon, tout récemment .NET)
  • monde réel de la portabilité (c'est à la fois destiné à être portable, ce Catch-22 de chaque?)
  • outil de disponibilité (CI, l'automatisation de la compilation, le débogage, l'IDE)

Je suis particulièrement à la recherche de ce que vous avez vécu dans votre propre travail plutôt que sur les choses que je pourrais google. Ma demande serait un service back-end du traitement de grandes quantités de données de séries chronologiques.

Mon objectif principal plateforme Linux.

Edit: Pour reformuler ma question de manière plus adéquate, je suis intéressé par l'ensemble du paquet (3ème partie, les bibliothèques, etc.), non seulement la langue. Pour les bibliothèques, qui, probablement, se résume à la question "comment les bibliothèques sont là pour Mono que pour Java"?


Pour info, depuis, j'ai choisi Java pour ce projet, parce qu'il me semblait juste de combat plus porté sur la portabilité côté et il a été autour depuis un certain temps sur des systèmes plus anciens, trop. Je suis un petit peu triste, parce que je suis très curieux à propos de C# et j'aimerais bien avoir fait quelques gros projet, mais peut-être la prochaine fois. Merci pour tous les conseils.

112voto

Justin Points 5321

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.

96voto

Ben Collins Points 11318

Well....Java est en fait plus portable. Mono n'est pas mis en œuvre partout, et il est à la traîne derrière l'implémentation Microsoft de manière significative. Le SDK Java semble rester dans une meilleure synchronisation entre les plates-formes (et il fonctionne sur plusieurs plates-formes).

Je voudrais aussi dire que Java n'est plus l'outil de la disponibilité à travers toutes ces plates-formes, bien qu'il existe beaucoup d'outils disponibles pour .NET sur les plates-formes Windows.

Mise à jour pour 2014

Je garde toujours cette opinion en 2014. Cependant, je vais qualifier cela en disant que je suis juste en train de commencer à prêter attention à Mono après un long moment de ne pas vraiment se soucier, il peut donc y avoir des améliorations dans le Mono d'exécution (ou de l'écosystème) que je n'ai pas été mis au courant de. Autant que je sache, il n'y a toujours pas de support pour WPF, WCF, ou WF. Mono peut fonctionner sur iOS, mais à ma connaissance, le Java runtime fonctionne encore bien plus de plates-formes que Mono. Aussi, Mono commence à voir une partie de l'amélioration de l'outillage (Xamarin), et Microsoft semble avoir beaucoup plus de croix-plate-forme genre d'attitude et la volonté de travailler avec des partenaires afin de les rendre complémentaires, plutôt que concurrentiel (par exemple, Mono sera une très importante partie de la prochaine OWIN/Helios ASP.NET le paysage). Je soupçonne que, dans les années à venir, les différences dans la portabilité va diminuer rapidement.

54voto

GEOCHET Points 13787

J'ai effectivement se développer .NET, exécuter toutes mes premiers tests sur Mono, puis sur Windows. De cette façon, je sais que mes applications sont multi-plateforme. Je l'ai fait avec beaucoup de succès sur les deux ASP.NET et Winforms applications.

Je ne suis pas vraiment sûr où certaines personnes ont l'impression Mono est si horrible, mais il a certainement fait c'est du boulot dans mon cas et opinions.Il est vrai que vous allez avoir un peu de lag dans les plus récents et les plus grandes inventions dans le .NET monde, mais jusqu'à présent, .NET 2.0 sur Windows et Linux est très solide pour moi.

Gardez à l'esprit, il y a évidemment beaucoup de bizarreries, mais la plupart d'entre eux viennent de vous assurer que vous êtes écrire du code portable. Bien que les cadres font un excellent travail d'abstraction de ce que votre système d'exploitation, des petites choses comme Linux est sensible à la casse " dans les chemins et noms de fichiers prend un peu de temps pour s'y habituer, comme faire des choses comme les autorisations.

.NET est certainement très de la croix-plate-forme en raison de Mono basé sur mon expérience jusqu'à présent.

26voto

jodonnell Points 14999

Java est en fait que la croix-plate-forme que tout le monde dit qu'il est. Il y a une JVM pour juste environ n'importe quel système d'exploitation traditionnel là-bas (même Mac OS X, enfin), et ils fonctionnent tous très bien. Et il y a des tonnes d'outils open source là-bas qui sont tout aussi multi-plateforme.

Le seul hic, c'est qu'il y a certains natifs opérations que vous ne pouvez pas le faire en Java sans écrire certaines Dll ou SOs. Il est très rare que ceux-ci viennent dans la pratique. Dans tous ces cas, cependant, j'ai été en mesure de se déplacer par la ponte des processus natifs et grattage d'écran des résultats.

18voto

Brad Wilson Points 22910

Je pense que la question est mal formulée. C # vs. Java est beaucoup moins intéressant en termes d'utilisation multi-plateforme que (a) les plates-formes que vous devez prendre en charge, et (b) en prenant en compte les bibliothèques principales et les bibliothèques tierces disponibles. La langue est presque la partie la moins importante du processus de prise de décision.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X