Frage

Wie viel weniger Bibliotheken gibt es für Mono als für Java?

Mir fehlt die Übersicht über beide Alternativen, aber ich habe ziemlich viel Freiheit der Wahl für mein nächstes Projekt. Ich suche nach harten technischen Fakten in den Bereichen

  • Leistung (zum Beispiel ich Java gesagt habe, ist zum Einfädeln gut, und ich höre die Common Language Runtime-Code-Optimierung vor kurzem für .NET sehr gut geworden ist)
  • reale Welt Portabilität (es ist beides gemeint tragbar zu sein, was die Catch-22 für jeden?)
  • Werkzeugverfügbarkeit ( CI , Build-Automatisierung, Debugging, IDE)

ich besonders bin auf der Suche für das, was Sie in Ihrer eigenen Arbeit tatsächlich erlebt, anstatt die Dinge, die ich Google konnte. Meine Anwendung wäre ein Back-End-Service-Verarbeitung großer Datenmengen von Zeitreihen sein.

Meine Hauptzielplattform wäre Linux.

Edit: Begriff adäquater meine Frage, ich bin an den gesamte Paket (3rd-Party-Bibliotheken etc.), nicht nur die Sprache. Für Bibliotheken, das kocht wahrscheinlich auf die Frage nach unten „wie viel weniger Bibliotheken gibt es für Mono als für Java“?


Zur Info, ich habe da Java für dieses Projekt ausgewählt, weil es nur mehr kampf getragen auf der Portabilität Seite schien und es ist um auf älteren Systemen für eine Weile gewesen, auch. Ich bin ein ganz klein wenig traurig darüber, weil ich sehr neugierig auf C # bin und ich würde gerne etwas großes Projekt in ihm getan zu haben, aber vielleicht beim nächsten Mal. Vielen Dank für die Beratung.

War es hilfreich?

Lösung

Nun .... Java ist eigentlich mehr tragbar. Mono ist nicht überall umgesetzt, und es bleibt hinter der Microsoft-Implementierung erheblich. Der Java-SDK scheint in einem besseren Synchronisierung zwischen verschiedenen Plattformen zu bleiben (und es funktioniert auf mehr Plattformen).

Ich würde auch sagen, Java mehr Werkzeugverfügbarkeit über alle diese Plattformen hat, obwohl es viele Tools für .NET auf Windows-Plattformen sind.

Update für das Jahr 2014

Ich halte immer noch diese Meinung im Jahr 2014. Allerdings hat ich diese qualifizieren würde sagen, ich bin jetzt nur etwas Aufmerksamkeit zu zahlen beginne nach einem langen auf Mono während der nicht wirklich Sorgen, so dass es Verbesserungen in der Mono-Laufzeit sein kann (oder ein Ökosystem), die ich nicht bewusst gemacht worden. AFAIK, gibt es noch keine Unterstützung für WPF, WCF, WF, von WIF. Mono kann auf iOS laufen, aber mein Wissen, der Java-Runtime läuft noch weit mehr Plattformen als Mono auf. Auch Mono beginnt ein deutlich verbesserten Werkzeuge (Xamarin) zu sehen, und Microsoft eine viel plattformübergreifende Art der Haltung zu haben scheint und die Bereitschaft, mit Partnern zusammenzuarbeiten, um sie kostenlos zu machen, anstatt Wettbewerb (zum Beispiel Mono werden ein ziemlich wichtiger Teil der kommenden OWIN / Helios ASP.NET Landschaft). Ich vermute, dass die Unterschiede in der Übertragbarkeit in den kommenden Jahren stark verringern werden, vor allem nach .NET Open-Source sein.

Update für 2018

Meine Meinung dazu beginnt die andere Richtung zu gehen. Ich denke, .NET, im Großen und Ganzen, vor allem mit .NET-Core, hat damit begonnen, mit Java zu erreichen „Portabilität Parität“. Es gibt Bemühungen im Gange, WPF für einige Plattformen .NET-Core zu bringen und .NET-Core selbst läuft auf sehr vielen Plattformen jetzt. Mono (im Besitz von Xamarin, die jetzt im Besitz von Microsoft ist) ist ein reifes und poliert Produkt als je zuvor, und Schreiben von Anwendungen, die auf mehreren Plattformen arbeiten, ist nicht mehr die Domäne der tiefen Gnosis von .NET hackery, aber es ist ein relativ einfachen Unterfangen . Es gibt natürlich, Bibliotheken und Dienste und Anwendungen, die nur für Windows oder kann bestimmte Plattformen nur Ziel - aber das gleiche kann von Java (breit) gesagt werden.

Wenn ich an dieser Stelle in dem OP Schuhen war, kann ich keinen Grund, in den Sprachen inhärenten denken oder Tech-Stacks selbst, dass mich von diesem Punkt .NET für jede Anwendung von der Wahl für die Zukunft verhindern würde.

Andere Tipps

Mono hat einen besseren Job bei den Plattformen Targeting ich unterstützen will. Other than that, es ist alles subjektiv.

Ich teile C # -Code für die folgenden Plattformen: - iOS (iPhone / iPad) - Android - The Web (HTML5) - Mac OS X) - Linux - Fenster

Ich kann es noch mehr Plätze teilen: - Windows Phone 7 - Wii - XBox - PS3 -. Etc

Die Biggie ist iOS seit Monotouch fantastisch funktioniert. Ich weiß nicht, von jedem guten Weg iOS mit Java zielen. Sie können nicht Windows Phone 7 mit Java Ziel, so würde ich sagen, dass die Tage der Java besser für mobil zu sein hinter uns sind.

Der größte Faktor für mich ist, wenn die persönliche Produktivität (und Glück). C # als Sprache ist Jahre voraus Java IMHO und der .NET-Framework ist eine Freude zu bedienen. Das meiste, was wird in Java 7 und Java 8 hinzugefügt in C # seit Jahren. JVM-Sprachen wie Scala und Clojure (beide auf der CLR) sind allerdings sehr schön.

Ich sehe Mono als Plattform in seinem eigenen Recht (ein großer) und .NET als Microsoft-Implementierung von Mono unter Windows behandeln. Das bedeutet, dass ich die Entwicklung und Test auf Mono zuerst. Das funktioniert wunderbar.

Wenn Java und .NET (Mono sagen wir mal) ohne Corporate Unterstützung Open Source Projekte, würde ich jedes Mal, Mono über Java wählen. Ich glaube, es ist nur eine bessere Plattform.

Sowohl .NET / Mono und die JVM sind große Auswahl, obwohl ich persönlich eine andere Sprache als Java auf der JVM verwenden würde.

Mein Nehmen auf einige der anderen Kommentare:

. Problem: Leistung

** Antwort: Sowohl die JVM und die CLR eine bessere Leistung als Verleumder sagen, sie tun. Ich würde sagen, dass die JVM zu besseren Ergebnissen führen. Mono ist in der Regel langsamer als .NET (wenn auch nicht immer).

Ich persönlich würde ASP.NET MVC über J2EE nehmen jeden Tag sowohl als Entwickler und eines Endbenutzers. Unterstützung für Google Native Client ist auch ziemlich cool. Auch weiß ich, dass eine schlechte GUI Leistung für Desktop-Java-Anwendungen soll eine Sache der Vergangenheit sein, aber ich halten Langsamen zu finden. Dann wieder, könnte ich das gleiche für WPF sagen. GTK # ist viel schneller, obwohl so gibt es keinen Grund, sie haben, langsam sein.

. Problem: Java hat ein größeres Ökosystem von Bibliotheken zur Verfügung:

Antwort: Wahrscheinlich stimmt, aber es ist kein Thema in der Praxis

.

Praktisch läuft jede Java-Bibliothek (einschließlich des JDK) nur Dandy auf .NET / Mono dank IKVM.NET . Dieses Stück Technik ist ein wahres Wunder. Die Integration ist erstaunlich; Sie können eine Java-Bibliothek verwenden, wie es war heimisch. Ich hatte nur wenn Java-Bibliotheken in einer .NET-Anwendung zu verwenden. Das .NET / Mono Ökosystem im Allgemeinen bietet mehr als ich brauche.

Problem: Java hat eine bessere (breitere) Tools unterstützen

Antwort: nicht auf Windows. Ansonsten stimme ich zu. MonoDevelop ist aber schön.

Ich möchte einen Shout-out MonoDevelop geben; es ist ein Juwel. MonoDevelop integriert die meisten Tools möchte ich mit Code-Vervollständigung verwenden (IntelliSense), Git / Subversion-Integration, Unterstützung für Unit-Tests, SQL-Integration, Debugging, einfach Refactoring und Montage Surfen mit Dekompilierung on-the-fly. Es ist wunderbar, die gleiche Umgebung für alles von serverseitigen Web auf mobile Anwendungen zu verwenden.

. Problem: Kompatibilität zwischen verschiedenen Plattformen

Antwort: Mono ist eine einzige Code-Basis auf allen Plattformen, einschließlich Windows

.

für Mono Develop ersten und Bereitstellen von Windows auf .NET, wenn Sie mögen. Wenn Sie .NET von MS auf Java vergleichen obwohl dann hat Java die Kante in Bezug auf die Konsistenz zwischen verschiedenen Plattformen. Siehe nächste Antwort ...

Problem: Mono nacheilt .NET

.

Antwort:. Nein, es nicht IMHO, ist dies ein häufig festgestellt, abereine falsche Aussage.

Die Mono Verteilung von Xamarin Schiffe mit C #, VB.NET, F #, Ironpython, IronRuby, und ich denke, vielleicht Boo aus dem Kasten heraus. Die Mono C # Compiler ist vollständig auf dem neuesten Stand mit MS. Der Mono VB.NET Compiler funktioniert die MS Version hinken. Die anderen Compilern sind die gleichen auf beiden Plattformen (wie auch andere .NET-Sprachen wie Nemerle, Boo und Phalanger (PHP)).

Mono Schiffe mit viel der tatsächlichen Microsoft geschriebenen Code einschließlich der Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F # und ASP.NET MVC. Da Razor ist nicht Open Source, Mono zur Zeit Schiffe mit MVC2 aber MVC3 arbeitet auf Mono gut.

Der Kern Mono Plattform mit .NET oder vielen Jahren Schritt gehalten und die Kompatibilität ist beeindruckend. Sie können die vollständige C # 4.0 Sprache verwenden und sogar einige C # 5.0-Features heute. In der Tat führt Mono oft .NET in vielerlei Hinsicht.

Mono implementiert Teile der CLR-Spezifikation, die auch Microsoft nicht (wie 64-Bit-Arrays) unterstützen. Eines der interessantesten neuen Stücke der Technologie in der .NET-Welt ist Rosylyn . Mono hat den C # -Compiler als Service seit vielen Jahren angeboten. Manches, was Rosylyn bietet, ist über NRefractory ebenfalls zur Verfügung. Ein Beispiel waren Mono ist noch wären vor den SIMD-Befehle Gaming-Performance zu beschleunigen.

hat Microsoft eine Reihe von Produkten auf der .NET anbieten, die in Mono nicht verfügbar sind, die waren das Missverständnis über Mono kommt aus hinken. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) sind Beispiele für Produkte, die nicht funktionieren, oder sind schlecht unterstützt, auf Mono. Die offensichtliche Lösung ist stattdessen plattformübergreifende Alternativen wie GTK #, NHibernate und ServiceStack zu verwenden.

. Problem: Microsoft ist böse

Antwort: Richtig. Also, was.

Viele Menschen bieten die folgenden Gründe mit Mono zu vermeiden:

1) Sie sollten nicht Mono verwenden, da Microsoft Tech vermieden werden sollte

2) Mono saugt, weil es nicht zulassen, nicht verwendet man jede Technologie, die Microsoft bietet

Für mich ist es klar, dass diese Aussagen nicht kompatibel sind. Ich lehne die erste Aussage wird aber hier dieses Argument überspringen. Die zweite Aussage gilt für alle .NET-Alternativen.

Die JVM ist eine großartige Plattform, und die Explosion der JVM Sprachen ist genial. Verwenden Sie, was Sie glücklich macht. Denn jetzt, das ist oft .NET / Mono für mich.

Ich entwickle tatsächlich in .NET, laufen alle meine Tests zunächst auf Mono, und dann auf Windows. So kann ich meine Anwendungen kennen, sind Cross-Plattform. Ich habe dies getan sehr erfolgreich auf beiden ASP.NET und WinForms-Anwendungen.

Ich bin nicht wirklich sicher, wo einige Leute den Eindruck Mono bekommen, ist so schrecklich aus, aber es hat sicherlich getan, um es in meinen Fällen Job ist und opinions.It ist wahr, dass Sie ein wenig Verzögerung für die neuesten und größten Erfindungen haben in die .NET-Welt, aber so weit, .NET 2.0 unter Windows und Linux ist für mich sehr fest.

Beachten Sie, da offensichtlich viele Macken dies sind, aber die meisten von ihnen kommen aus dafür, dass Sie portablen Code schreiben. Während die Rahmenbedingungen eine große Arbeit zu abstrahieren weg tun, was OS Sie laufen, kleine Dinge wie Empfindlichkeit Linux Fall in Pfade und Dateinamen dauert ein wenig gewöhnungsbedürftig, wie Dinge wie Berechtigungen tun.

NET ist auf jeden Fall sehr Cross-Plattform aufgrund Mono auf Grund meiner bisherigen Erfahrungen.

Java ist eigentlich als Cross-Plattform wie jeder sagt, es ist. Es gibt eine JVM-Implementierung für fast jedes Mainstream-O gibt (auch Mac OS X, schließlich), und sie alle wirklich gut funktionieren. Und es gibt jede Menge Open-Source-Tools gibt, die nur als Cross-Plattform sind.

Der einzige Haken ist, dass es bestimmte einheimische Operationen, die Sie nicht in Java ohne einige DLLs oder SOs Schreiben tun. Es ist sehr selten, dass diese in der Praxis kommen. In allen diesen Fällen aber, habe ich in der Lage gewesen, durch die Laichen nativen Prozesse und Screen-Scraping der Ergebnisse um es zu bekommen.

Ich denke, die Frage falsch formuliert ist. C # vs. Java ist viel weniger interessant in Bezug auf plattformübergreifende Nutzung als (a), welche Plattformen Sie unterstützen müssen, und (b) unter Berücksichtigung der Kernbibliotheken und verfügbare Bibliotheken von Drittanbietern. Die Sprache ist fast der unwichtigste Teil des Entscheidungsprozesses.

Java ist eine bessere Wahl für Cross-Platform-Entwicklung.

  • Performance. Java und .Net haben ähnliche Leistungsniveau aufgrund der virtuellen Maschine, aber JVM hat in der Regel eine bessere Leistung, da viele Jahre Optimierung.

  • In der Bibliothek. Obwohl dies auf Ihre Aufgabe ist abhängig, hat Java viel mehr Open-Source oder dritte dort zur Verfügung Party-Bibliotheken. Für Server-App, J2EE, Spring, Struts, etc. Für GUI, obwohl .Net Win32-Schicht-API bietet aber dies führt zu Kompatibilitätsproblemen. Java hat Swing, SWT, AWT, etc. Es funktioniert in den meisten Fällen.

  • Kompatibilität. Dies ist die Schlüsselfragen, die berücksichtigt werden müssen, wenn das Cross-Plattform-Programm entwickeln. Zwei Problem: Erstens, Plattform-Kompatibilität. Java gewinnt immer noch da JDK auch durch einzelne und ursprüngliche Firma Sun. gehalten wird Mono wird nicht von MS gehalten, so dass Sie haben keine Garantie, noch für Update-Kompatibilität. 2. Abwärtskompatibilität. Sun unterhält einen guten Ruf auf ihrer Abwärtskompatibilität, obwohl dies manchmal zu steif scheint und verlangsamt das Tempo.

  • Tools. Java hat eine gute Cross-Plattform-IDEs. Netbeans, Eclipse etc. Die meisten von ihnen sind kostenlos. VS Studio ist gut, aber nur unter Windows, und nicht ein wenig kosten. Beide liefern gute Unit-Tests, debuggt, Profile, etc.

Daher würde ich vorschlagen, dass Java eine bessere Wahl ist. Als Schaufenster, gibt es einige bekannte Desktop-Cross-Plattformen Apps Java entwickelt: Vuze, Limewire, Blogbridge, CrossFTP, nicht jene IDEs zu erwähnen. In Bezug auf .Net, habe ich Kenntnisse Apps auf einen solchen Erfolg beschränkt.

Java wurde als Cross-Plattform entworfen; C # /. Net war es nicht. Wenn Sie Zweifel haben, verwenden Sie das Tool, das für Ihren Zweck entworfen wurde.

EDIT: in Fairness, wurde .NET entwickelt, auf Embedded / PC / Server-Umgebungen zu arbeiten, so dass eine Art Cross-Plattform ist. Aber es war nicht die für Linux.

Ich denke, die Antwort ist „es kommt.“ Java läuft auf so ziemlich allem, aber .NET / Mono ist (IMHO) ein besserer Rahmen für den Desktop. Also ich denke, die Antwort hängt wirklich davon ab, welche Plattformen Sie planen Targeting.

ein bisschen mehr, um das Gespräch hinzuzufügen, ist Java mehr tragbar, wenn Sie bleiben über eine Version hinter - Java 5 noch viele hervorragende Eigenschaften hat, so dass Sie für Java 6 und haben noch eine Menge Bereich in Bezug auf Sprache warten können und Bibliotheken zu entwickeln, mit. Der Mac ist die primäre Plattform, die einige Zeit auf die neueste Java-Version, um aufzuholen nehmen kann.

Java hat auch ein ausgezeichneten Standards Körper dass auf intelligente Weise die Plattform basierend auf einer Eingabe von vielen verschiedenen Unternehmen wächst. Dies ist ein Merkmal oft übersehen, aber es hält auch neue Funktionen auch über mehrere Plattformen hinweg arbeiten und bietet eine Menge Bereich in der Bibliothek Unterstützung für einige esoterischen Dinge (als optionale Erweiterungen).

Ich würde stimmen für Java mehr tragbar als C #. Java auf jeden Fall hat auch eine sehr breite Palette an Standardbibliotheken. Es gibt auch eine breite Palette von Open-Source-3rd-Party-Bibliotheken gibt, wie diejenigen, die durch das Projekt Jakarta zur Verfügung gestellt ( http: // jakarta .apache.org / ).

Alle üblichen Verdächtigen existieren für CI, Unit-Tests, etc. auch. Cross-Plattform-IDE-Unterstützung ist auch sehr gut mit den Gleichen von Eclipse, Netbeans, IntelliJ IDEA etc.

Es gibt auch andere Sprachen zur Auswahl auch. Ich habe ganz lieb worden von Python, die gut auf Windows, Linux funktioniert und Mac, und verfügt über einen umfangreichen Satz von Bibliotheken.

Während Mono seinen Anteil von Problemen hat Ich denke, es hat eine bessere Cross-Plattform-Kompatibilität Geschichte vor allem, wenn haben Sie Vertrauen auf native Plattform Aufruf.

Es gibt nicht genug Worte auf Stack-Überlauf zu betonen, wie viel glatter es ist etwas nativem genannt zu bekommen und in .NET / Mono auf (zumindest in meiner Erfahrung 3 ...) mehr Plattformen gegen den äquivalenten Java Aufwand ausgeführt .

Gatorhall haben Sie einige Daten haben, dass sichern?

  

Performance. Java und .Net haben ähnliche Leistungsniveau aufgrund der virtuellen Maschine, aber JVM hat in der Regel eine bessere Leistung, da viele Jahre Optimierung.

Hintergrund: Ich bin ein Kerl von Windows seit Windows 3.1 und zur Zeit ein Benutzer Linux (noch Windows 7, große OS, auf einer VM für Visual Studio 2010 und andere Tools ausgeführt wird)

.

Der Punkt: ich und viele Benutzer (Windows, Linux, etc.) Ich weiß, können von Ihnen nicht zustimmen. Java neigt dazu, auf einer Linux-Desktop-Anwendung langsamer ausführen sogar, ASP.NET auszuführen ist schneller, die Java-Server-Seiten viele der Zeit. Einige können sich einig, dass auch nicht-kompilierte PHP besser abschneidet i mehrere Szenarien.

Java ist mehr Cross-Plattform? Ich habe keine Zweifel darüber (die Geschichte zurück diese auf), aber schneller (nicht .NET sagen ist) nicht so sicher, und ich möchte einige echte Benchmarks sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top