Is.NET/Mono czy Java lepszym wyborem dla rozwoju wieloplatformowego? [zamknięte]

Ile bibliotek jest dla mono niż dla Javy?

Brakuje mi przeglądu obu alternatyw, ale mam dużą swobodę wyboru dla mojego następnego projektu. Szukam twardych faktów technicznych w dziedzinie

  • wydajność (na przykład powiedziano mi, że Java jest dobra do tworzenia wątków i słyszałem, że optymalizacja kodu uruchomieniowego stała się ostatnio bardzo dobra dla. Net)
  • real world przenośność (oba mają być przenośne, do czego służy Catch-22 każdy?)
  • W związku z tym, że nie jest to możliwe, nie jest to możliwe.]}

Szukam przede wszystkim tego, czego doświadczyłeś we własnej pracy, a nie rzeczy, które mógłbym wygooglować. Moja aplikacja byłaby usługą zaplecza przetwarzającą duże ilości danych z szeregów czasowych.

Moją główną platformą docelową byłby Linux.

Edit: aby lepiej sformułować Moje pytanie, jestem zainteresowany całym pakietem (biblioteki stron trzecich itd.), nie tylko język. W przypadku bibliotek, to chyba sprowadza się do pytania "ile bibliotek jest dla mono mniej niż dla Javy"?


Dla twojej wiadomości, od tego czasu wybrałem Javę do tego projektu, ponieważ wydawało się to po prostu bardziej zużyte w walce po stronie przenośności i jest już od jakiegoś czasu na starszych systemach, zbyt. Trochę mi smutno, bo jestem bardzo ciekaw C# i chciałbym zrobić w nim jakiś duży projekt, ale może następnym razem. Dzięki za wszystko Rady.

Author: Peter Mortensen, 2008-09-14

15 answers

No cóż....Java jest bardziej przenośna. Mono nie jest zaimplementowane wszędzie i pozostaje znacznie w tyle za implementacją Microsoftu. SDK Java wydaje się być lepiej zsynchronizowany na różnych platformach (i działa na większej liczbie platform).

Powiedziałbym również, że Java ma większą dostępność narzędzi na wszystkich tych platformach, chociaż istnieje wiele narzędzi dostępnych dla. NET na platformach Windows.

Aktualizacja dla 2014

Nadal podtrzymuję tę opinię w 2014 roku. Jednakże, Zakwalifikuję to, mówiąc, że dopiero teraz zaczynam zwracać uwagę na Mono po długim czasie nie dbania o to, więc mogą pojawić się ulepszenia w środowisku uruchomieniowym Mono (lub ekosystemie), o których nie byłem świadomy. AFAIK, nadal nie ma wsparcia dla WPF, WCF, WF, WIF. Mono może działać na iOS, ale według mojej wiedzy Java runtime nadal działa na znacznie większej liczbie platform niż Mono. Ponadto Mono zaczyna dostrzegać znacznie ulepszone narzędzia (Xamarin), a Microsoft wydaje się mieć znacznie więcej wieloplatformowe podejście i chęć współpracy z partnerami, aby uczynić ich komplementarnymi, a nie konkurencyjnymi (na przykład Mono będzie dość ważną częścią nadchodzącego OWIN / Helios ASP.NET krajobraz). Podejrzewam, że w nadchodzących latach różnice w przenośności szybko się zmniejszą, zwłaszcza po tym, jak. NET będzie open-source.

Aktualizacja dla 2018

Moje zdanie na ten temat zaczyna iść w drugą stronę. Myślę, że. NET, ogólnie, szczególnie z. NET Core, zaczął osiągać "parytet przenośności" w Javie. Trwają wysiłki, aby wprowadzić WPF do. Net Core dla niektórych platform, a sam. Net Core działa teraz na wielu platformach. Mono (własność Xamarin, która jest obecnie własnością Microsoftu) jest bardziej dojrzałym i dopracowanym produktem niż kiedykolwiek, a pisanie aplikacji działających na wielu platformach nie jest już domeną głębokiej gnozy hackerów. NET, ale jest stosunkowo prostym przedsięwzięciem. Są oczywiście biblioteki i usługi i aplikacje, które są tylko Windows lub mogą być skierowane tylko do określonych platform-ale to samo można powiedzieć o Javie (ogólnie).

Gdybym był w tym momencie na miejscu OP, nie mogę wymyślić żadnego powodu tkwiącego w samych językach lub stosach technologicznych, który uniemożliwiałby mi wybranie. NET dla każdej aplikacji, która będzie od tego momentu.

 94
Author: Ben Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 00:31:26

Mono lepiej sprawdza się w celowaniu w platformy, które chcę wspierać. Poza tym wszystko jest subiektywne.

Udostępniam kod C# na następujących platformach: - iOS (iPhone/iPad) - Android - Www (HTML5) - Mac (OS X) - Linux - Windows

I could share it even more places: - Windows Phone 7 - Wii - XBox - PS3 - itd.

The biggie is iOS since MonoTouch działa fantastycznie. Nie znam żadnego dobrego sposobu na celowanie w Ios za pomocą Javy. Nie możesz celować Windows Phone 7 z Javą, więc powiedziałbym, że czasy, kiedy Java była lepsza dla telefonów komórkowych, już za nami.

Największym czynnikiem jest jednak dla mnie osobista Produktywność (i szczęście). C# jako język jest lata przed Java IMHO i. NET framework jest radość w użyciu. Większość tego, co jest dodawane w Javie 7 i Javie 8, jest w C# od lat. Języki JVM, takie jak Scala i Clojure (oba dostępne w CLR), są dość ładne.

Widzę Mono jako platformę w swoim własnym (a świetny) i traktować. NET jako Microsoft implementację Mono na Windows. Oznacza to, że najpierw rozwijam i testuję na Mono. To działa wspaniale.

Gdyby zarówno Java, jak i.NET (powiedzmy Mono) były projektami Open Source bez żadnego korporacyjnego wsparcia, za każdym razem wybrałbym Mono zamiast Javy. Uważam, że jest to po prostu lepsza Platforma.

Zarówno. NET / Mono, jak i JVM to świetny wybór, chociaż osobiście użyłbym innego języka niż Java na JVM.

My take on niektóre z innych komentarzy:

Problem: Wydajność.

**odpowiedź: zarówno JVM, jak i CLR działają lepiej niż twierdzą krytycy. Powiedziałbym, że JVM działa lepiej. Mono jest generalnie wolniejsze od. NET (choć nie zawsze).

Ja osobiście wziąłbym ASP.NET MVC przez J2EE każdego dnia zarówno jako programista, jak i użytkownik końcowy. Wsparcie dla natywnego klienta Google jest również całkiem fajne. Wiem też, że słaba wydajność GUI dla desktopowych aplikacji Java ma to już przeszłość, ale wciąż znajduję powolne. Z drugiej strony, mogę powiedzieć to samo o WPF. GTK# jest jednak dużo szybki, więc nie ma powodu, aby być powolne.

Problem: Java ma większy ekosystem bibliotek.

Odpowiedź: prawdopodobnie prawda, ale w praktyce nie jest to problem.

Praktycznie każda biblioteka Javy (w tym JDK) działa tylko dandy na. Net / mono dzięki IKVM.NET ta technologia to prawdziwy cud. Integracja jest niesamowita; możesz używać biblioteki Java tak, jak była natywna. Musiałem używać tylko bibliotek Java w jednej aplikacji.NET. Ekosystem. NET/Mono ogólnie oferuje więcej niż potrzebuję.

Problem: Java ma lepszą (szerszą) obsługę narzędzi

Odpowiedź: Nie w systemie Windows. W przeciwnym razie zgadzam się. MonoDevelop jest fajny.

Chcę dać okrzyk MonoDevelop ; jest to klejnot. MonoDevelop integruje większość narzędzi, których chcę używać w tym uzupełnianie kodu (intellisense), integracja Git/Subversion, wsparcie dla testów jednostkowych, integracja SQL, debugowanie, łatwe refaktoryzowanie i przeglądanie assembly z dekompilacją on-the-fly. Wspaniale jest używać tego samego środowiska do wszystkiego, od strony serwera po aplikacje mobilne.

Problem: kompatybilność na różnych platformach.

Odpowiedź: Mono jest jedną bazą kodu na wszystkich platformach, w tym Windows.

Develop for mono first and deploy to . Net na Windows, jeśli chcesz. Jeśli porównasz. NET z MS do Javy, to Java ma przewagę pod względem spójności między platformami. Zobacz następną odpowiedź...

Temat: mono. NET.

Odpowiedź: Nie. IMHO, jest to często stwierdzone, ale błędne stwierdzenie.

Dystrybucja Mono z Xamarin zawiera C#, VB.NET, F#, IronPython, IronRuby, i myślę, że może Boo z pudełka. Kompilator Mono C# jest całkowicie na bieżąco z MS. The Mono VB.NET kompilator nie opóźnia wersji MS. Inne Kompilatory są takie same na obu platformach (podobnie jak inne języki. NET, takie jak Nemerle, Boo i Phalanger (PHP) ).

Mono zawiera wiele rzeczywistego kodu napisanego przez Microsoft, w tym dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F# i ASP.NET MVC. Ponieważ Razor nie jest Open Source, mono jest obecnie dostarczane z MVC2, ale MVC3 działa na Mono po prostu dobrze.

Platforma core Mono dotrzymała kroku . NET lub wiele lat i kompatybilność jest imponująca. Możesz dziś używać pełnego języka C # 4.0, a nawet niektórych funkcji C# 5.0. W rzeczywistości Mono często prowadzi. net na wiele sposobów.

Mono implementuje części specyfikacji CLR, które nawet Microsoft nie obsługuje (Jak 64-bitowe macierze). Jednym z najbardziej ekscytujących nowych elementów technologii w świecie.NET jest Rosylyn. Mono od wielu lat oferuje kompilator C# jako usługę. Niektóre z ofert Rosylyn są dostępne za pośrednictwem NRefractory jak również. Przykładem były Mono jest jeszcze przed byłoby instrukcje SIMD, aby przyspieszyć wydajność gier.

Microsoft oferuje wiele produktów oprócz. NET, które nie są dostępne w Mono, co jest błędne przekonanie o Mono lagging pochodzi z. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) to przykłady produktów, które nie działają lub są słabo obsługiwane na Mono. Oczywiste rozwiązanie zamiast tego należy użyć alternatyw międzyplatformowych, takich jak GTK#, NHibernate i ServiceStack.

Problem: Microsoft jest zły.

Odpowiedź: Prawda. I co z tego.

Wiele osób oferuje następujące powody, aby unikać używania Mono:

1) nie należy używać Mono, ponieważ Microsoft tech należy unikać

2) Mono jest do bani, bo nie pozwala korzystać z każdej technologii, którą oferuje Microsoft

Dla mnie jest jasne, że te stwierdzenia są niezgodne. Odrzucam pierwsze stwierdzenie, ale pominę ten argument tutaj. Drugie stwierdzenie dotyczy wszystkich alternatyw. NET.

JVM to świetna platforma, a eksplozja języków JVM jest niesamowita. Użyj tego, co cię uszczęśliwia. Na razie to dla mnie często. NET/Mono.

 110
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-28 22:07:30

Właściwie rozwijam się w. NET, wszystkie testy uruchamiam najpierw na Mono, a potem na Windows. Dzięki temu Wiem, że moje aplikacje są wieloplatformowe. Zrobiłem to bardzo skutecznie na obu ASP.NET i aplikacji Winforms.

Nie jestem do końca pewien, skąd niektórzy mają wrażenie, że Mono jest tak straszne, ale na pewno zrobił to zadanie w moich przypadkach i opinions.It to prawda, że będziesz miał trochę opóźnienia dla najnowszych i największych wynalazków w świecie. NET, ale do tej pory,. NET 2.0 na Windows i Linux są dla mnie bardzo solidne.

Pamiętaj, że jest w tym oczywiście wiele dziwactw, ale większość z nich wynika z upewnienia się, że piszesz przenośny Kod. Podczas gdy frameworki wykonują świetną robotę abstrakcji systemu operacyjnego, na którym pracujesz, małe rzeczy, takie jak wrażliwość na wielkość liter Linuksa w ścieżkach i nazwach plików, wymagają trochę przyzwyczajenia, podobnie jak uprawnienia.

. NET jest zdecydowanie bardzo wieloplatformowy ze względu na Mono w oparciu o moje dotychczasowe doświadczenia.

 54
Author: GEOCHET,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-14 19:13:08

Java jest tak wieloplatformowa, jak wszyscy mówią. Istnieje implementacja JVM dla prawie każdego głównego systemu operacyjnego (nawet Mac OS X) i wszystkie działają naprawdę dobrze. Istnieje mnóstwo narzędzi open source, które są tak samo wieloplatformowe.

Jedynym haczykiem jest to, że istnieją pewne natywne operacje, których nie można wykonać w Javie bez pisania bibliotek DLL lub SOs. To bardzo rzadkie, że pojawiają się one w praktyce. We wszystkich tych przypadkach, jednak, byłem w stanie obejść go, wywołując natywne procesy i skrobając wyniki.

 26
Author: jodonnell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-14 19:10:14

Myślę, że pytanie jest sformułowane niepoprawnie. C# vs. Java jest znacznie mniej interesująca pod względem wykorzystania międzyplatformowego niż (a) platformy, które należy obsługiwać, oraz (b) biorąc pod uwagę podstawowe biblioteki i dostępne biblioteki stron trzecich. Język jest prawie najmniej ważną częścią procesu decyzyjnego.

 18
Author: Brad Wilson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-14 19:02:46

Java jest lepszym wyborem dla rozwoju wieloplatformowego.

  • Wydajność. Java i. Net mają podobny poziom wydajności ze względu na maszynę wirtualną, ale JVM zwykle ma lepszą wydajność ze względu na lata i lata optymalizacji.

  • Biblioteka. Chociaż zależy to od Twojego zadania, Java ma tam znacznie więcej bibliotek open source lub innych firm. Dla aplikacji serwerowej, J2EE, sprężyny, Rozpórki itp. Dla GUI, chociaż. Net dostarcza Win32 layer API, ale to powoduje problemy ze zgodnością. Java ma Swing, SWT, AWT itp. To działa w większości przypadków.

  • Kompatybilność. Jest to kluczowa kwestia, którą należy wziąć pod uwagę przy opracowywaniu programu wieloplatformowego. Dwie kwestie: po pierwsze, Kompatybilność platformy. Java nadal wygrywa, ponieważ JDK jest dobrze utrzymywany przez pojedynczą i oryginalną firmę Sun. Mono nie jest utrzymywane przez MS, więc nie masz jeszcze gwarancji zgodności aktualizacji. 2. Kompatybilność wsteczna. Sun utrzymuje dobrą reputację na swoich zacofanych kompatybilność, choć czasami wydaje się to zbyt sztywne i spowalnia tempo.

  • Narzędzia. Java ma dobre wieloplatformowe IDE. Netbeans, Eclipse, itp. Większość z nich jest darmowa. VS Studio jest dobre, ale tylko na Windows, i nie kosztuje trochę. Oba zapewniają dobre testy jednostkowe, debugy, profile itp.

Dlatego sugerowałbym, że Java jest lepszym wyborem. W przypadku pokazu, istnieje kilka znanych aplikacji międzyplatformowych opracowanych przez Javę: Vuze, Limewire, BlogBridge, CrossFTP, nie wspominając o tych Idach. Co do. Net, mam ograniczoną wiedzę na temat takich aplikacji sukcesu.

 15
Author: Gatorhall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-15 22:45:25

Zadawałem to samo pytanie z opóźnieniem i IMHO,. NET / Mono wydaje się być lepszą opcją po prostu dlatego, że Mono ma świetne osiągnięcia w zakresie wieloplatformowych aplikacji desktopowych (w przeciwieństwie do Javy) i oczywiście, mono poprawia się skokowo w dzisiejszych czasach.

 9
Author: Swaroop C H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 04:19:35

Ja też powiem Java. Jeśli spojrzeć na to z punktu widzenia dojrzałości, Sun (i inni) poświęciła dużo więcej czasu i wysiłku na przygotowanie JVM do pracy na platformach innych niż Windows.

W przeciwieństwie do tego, mono jest zdecydowanie obywatelem drugiej klasy w ekosystemie. NET.

W zależności od tego, kim są Twoi docelowi klienci, możesz również zauważyć, że istnieje realny sprzeciw wobec używania Mono - czy Novell oferuje taki sam rodzaj wsparcia dostawcy dla mono, jaki otrzymałbyś dla Java lub. NET na Windows?

Jeśli kierujesz się przede wszystkim hostingiem swojej usługi na Windows, sensownym byłoby rozważenie tego wyboru, ale ponieważ kierujesz się przede wszystkim na Linuksa, wydaje mi się, że nie ma to dla mnie żadnego znaczenia.

 8
Author: warren_s,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-01 12:13:28

Java została zaprojektowana tak, aby była wieloplatformowa, A C#/. Net Nie. w razie wątpliwości użyj narzędzia, które zostało zaprojektowane do twojego celu.

EDIT: szczerze mówiąc,. NET został zaprojektowany do pracy w środowiskach embedded / PC / Server, więc jest to rodzaj cross-platform. Ale nie został zaprojektowany dla Linuksa.

 7
Author: AlexeyMK,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-14 20:37:15

Myślę, że odpowiedź brzmi: "to zależy."Java działa na prawie wszystkim, ale. NET / Mono są (IMHO) lepszym frameworkiem dla pulpitu. Więc myślę, że odpowiedź naprawdę zależy od tego, jakie platformy planujesz kierować.

 7
Author: Giovanni Galbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 04:48:55

Aby dodać trochę więcej do rozmowy, Java jest bardziej przenośna, jeśli pozostaniesz o jedną wersję za-Java 5 nadal ma wiele doskonałych funkcji, więc możesz poczekać na Java 6 i nadal mieć duży zakres pod względem języka i bibliotek do rozwijania. Mac jest podstawową platformą, która może zająć trochę czasu, aby nadrobić zaległości w najnowszej wersji Java.

Java posiada również doskonałe ciało standardów , które inteligentnie rozwija platformę opartą na wejściach z wielu różnych firmy. Jest to często pomijana funkcja, ale utrzymuje nawet nowe funkcje działające dobrze na wielu platformach i zapewnia duży zakres obsługi bibliotek dla niektórych rzeczy ezoterycznych (jako opcjonalne rozszerzenia).

 6
Author: Kendall Helmstetter Gelner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 03:41:32

Głosowałbym za tym, aby Java była bardziej przenośna niż C#. Java zdecydowanie posiada również bardzo bogaty zestaw standardowych bibliotek. Istnieje również szeroki zestaw bibliotek 3rd party open source, takich jak te dostarczane przez projekt Jakarta ( http://jakarta.apache.org/).

Wszyscy zwykli podejrzani istnieją również do CI, testów jednostkowych itp. Obsługa wieloplatformowego IDE jest również bardzo dobra w przypadku Eclipse, Netbeans, IntelliJ IDEA itp.

 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 03:03:34

Są też inne opcje językowe. Bardzo lubię Pythona, który działa dobrze na systemach Windows, Linux i Mac i ma bogaty zestaw bibliotek.

 4
Author: George V. Reilly,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-15 02:48:54

Podczas gdy Mono ma swój udział problemów myślę, że ma lepszą historię kompatybilności międzyplatformowej, zwłaszcza jeśli polegasz na wywołaniu natywnej platformy.

Nie ma wystarczającej ilości słów na Stack Overflow, aby podkreślić, jak płynniej jest uzyskać coś natywnego wywołanego i wykonanego w. NET/Mono na (przynajmniej z mojego doświadczenia 3 ...) wielu platform a równoważny wysiłek Javy.

 3
Author: damageboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:26

Gatorhall Czy masz jakieś dane, aby to potwierdzić?

wydajność. Java i. Net mają podobny poziom wydajności ze względu na maszynę wirtualną, ale JVM zwykle ma lepszą wydajność ze względu na lata i lata optymalizacji.

Tło: jestem facetem od systemu Windows od Windows 3.1, a obecnie użytkownikiem Linuksa(nadal działa Windows 7, świetny system operacyjny, na maszynie wirtualnej dla Visual Studio 2010 i innych narzędzi).

Punkt: ja i wielu użytkowników (windows, linux, etc) wiem, może się nie zgadzać z Tobą. Java działa wolniej nawet na linuksowej aplikacji desktopowej, ASP.NET wykonywanie jest szybsze niż strony java server wiele razy. Niektórzy mogą się zgodzić, że nawet nie skompilowane PHP działa lepiej i kilka scenariuszy.

Java jest bardziej wieloplatformowa? Nie mam co do tego wątpliwości (historia się powtarza), ale szybsze (nie mówiąc, że. NET jest) nie jest takie pewne i chciałbym zobaczyć jakieś prawdziwe benchmarki.

 2
Author: Rui Marques,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 12:24:29