Apakah .NET / Mono atau Java adalah pilihan yang lebih baik untuk pengembangan lintas platform? [Tutup]

108

Berapa banyak perpustakaan yang tersedia untuk Mono daripada untuk Java?

Saya tidak memiliki gambaran umum tentang kedua alternatif tersebut tetapi saya memiliki cukup banyak kebebasan untuk memilih proyek saya berikutnya. Saya mencari fakta teknis yang sulit di bidang

  • kinerja (misalnya, saya diberi tahu Java bagus untuk threading, dan saya dengar pengoptimalan kode runtime menjadi sangat bagus baru-baru ini untuk .NET)
  • portabilitas dunia nyata (keduanya dimaksudkan untuk menjadi portabel, apa Catch-22 untuk masing-masing?)
  • ketersediaan alat ( CI , otomatisasi build, debugging, IDE)

Saya terutama mencari apa yang sebenarnya Anda alami dalam pekerjaan Anda sendiri daripada hal-hal yang saya bisa google. Aplikasi saya akan menjadi layanan back-end yang memproses data dalam jumlah besar dari deret waktu.

Platform target utama saya adalah Linux.

Sunting: Untuk membuat pertanyaan saya lebih tepat, saya tertarik pada keseluruhan paket (perpustakaan pihak ketiga dll.), Bukan hanya bahasanya. Untuk perpustakaan, yang mungkin bermuara pada pertanyaan "seberapa sedikit perpustakaan yang tersedia untuk Mono daripada untuk Java"?


FYI, saya telah memilih Java untuk proyek ini, karena sepertinya Java lebih usang di sisi portabilitas dan sudah ada cukup lama pada sistem yang lebih lama juga. Saya sedikit sedih tentang itu, karena saya sangat ingin tahu tentang C # dan saya ingin melakukan beberapa proyek besar di dalamnya, tapi mungkin lain kali. Terima kasih atas semua sarannya.

Hanno Fietz
sumber
3
Pertanyaan bagus. Kami juga sedang melihat evaluasi untuk pengembangan lintas platform.
Mat Nadrofsky
Saya akan menambahkan tag "bahasa mana" tetapi sudah ada 5, jadi tidak berhasil.
Daniel Daranas
Sangat tergantung pada platform mana yang Anda targetkan ...
Thorbjørn Ravn Andersen
1
Sekarang mungkin saat yang tepat bagi Anda untuk melihat golang ...
StartupGuy
Xojo mungkin juga layak dipertimbangkan. Ini mengkompilasi aplikasi asli menggunakan LLVM untuk Windows, Mac Linux. Ia memiliki otomatisasi build IDE, debugging, dll. Library memiliki banyak fitur dan dapat diperluas sesuai kebutuhan. www / xojo.com
Paul Lefebvre

Jawaban:

96

Nah .... Java sebenarnya lebih portabel. Mono tidak diterapkan di mana-mana, dan sangat tertinggal dari implementasi Microsoft. Java SDK tampaknya tetap tersinkronisasi dengan lebih baik di seluruh platform (dan berfungsi di lebih banyak platform).

Saya juga akan mengatakan Java memiliki lebih banyak ketersediaan alat di semua platform tersebut, meskipun ada banyak alat yang tersedia untuk .NET di platform Windows.

Pembaruan untuk 2014

Saya masih memegang pendapat ini di tahun 2014. Namun, saya akan menilai ini dengan mengatakan bahwa saya baru saja mulai memperhatikan Mono setelah sekian lama tidak terlalu peduli, jadi mungkin ada peningkatan dalam runtime Mono (atau ekosistem ) yang belum saya sadari. AFAIK, masih belum ada dukungan untuk WPF, WCF, WF, WIF. Mono dapat berjalan di iOS, tetapi sepengetahuan saya, runtime Java masih berjalan di lebih banyak platform daripada Mono. Selain itu, Mono mulai melihat beberapa perkakas yang jauh lebih baik (Xamarin), dan Microsoft tampaknya memiliki sikap dan kemauan lintas platform yang jauh lebih banyak untuk bekerja dengan mitra untuk menjadikannya saling melengkapi, daripada kompetitif (misalnya, Mono akan menjadi bagian yang cukup penting dari lanskap OWIN / Helios ASP.NET mendatang). Saya menduga bahwa di tahun-tahun mendatang perbedaan dalam portabilitas akan berkurang dengan cepat,

Pembaruan untuk 2018

Pandangan saya tentang ini mulai mengarah ke arah lain. Saya pikir .NET, secara luas, terutama dengan .NET Core, telah mulai mencapai "paritas portabilitas" dengan Java. Ada upaya yang sedang dilakukan untuk membawa WPF ke .NET Core untuk beberapa platform, dan .NET Core sendiri berjalan di banyak platform sekarang. Mono (dimiliki oleh Xamarin, yang sekarang dimiliki oleh Microsoft) adalah produk yang lebih matang dan terpoles dari sebelumnya, dan menulis aplikasi yang bekerja pada banyak platform tidak lagi menjadi domain gnosis mendalam dari peretasan .NET, tetapi merupakan upaya yang relatif mudah . Tentu saja ada pustaka dan layanan serta aplikasi yang hanya untuk Windows atau hanya dapat menargetkan platform tertentu - tetapi hal yang sama dapat dikatakan tentang Java (secara luas).

Jika saya berada di posisi OP pada saat ini, saya tidak dapat memikirkan alasan yang melekat dalam bahasa atau tumpukan teknologi itu sendiri yang akan mencegah saya memilih .NET untuk aplikasi apa pun yang akan datang dari titik ini.

Ben Collins
sumber
2
Saya sangat senang membaca ini dan gembira tentang voting di dunia Microsoft. .NET benar-benar bagus tetapi Java memiliki legitimasi seperti yang selalu saya coba jelaskan sebagai pengembang .NET dan Java yang lama;)
JoeBilly
1 untuk ini. Saya telah menemukan portabilitas Java (untuk aplikasi non-sepele, yaitu server web, GUI yang kompleks, mesin analitik) lebih baik daripada alternatif lainnya. Ini tidak terlalu sempurna, tapi ini adalah yang terbaik yang bisa Anda dapatkan sekarang.
mikera
1
@ Ben, apakah Anda masih memegang pendapat ini di tahun 2013? Jika ya, maukah Anda menyebutkannya, dan jika Anda tidak memperbarui jawaban ini? Seringkali ketika membaca jawaban berusia 4 tahun itu sulit untuk dikatakan.
Benjamin Gruenbaum
1
@BenjaminGruenbaum ya, meskipun saya memenuhi syarat pendapat saya pada saat ini dengan mengatakan bahwa saya belum terlalu memperhatikan Mono dalam waktu yang lama, jadi mungkin ada peningkatan dalam runtime Mono (atau ekosistem) yang belum saya kunjungi disadari. AFAIK, masih belum ada dukungan untuk WPF, WCF, atau WF. Mono dapat berjalan di iOS, tetapi sepengetahuan saya, runtime Java masih berjalan di lebih banyak platform daripada Mono. Jadi iya. Memenuhi syarat, tapi ya.
Ben Collins
@HighCore argumennya tidak menentang Mono, per se. Ini hanya pernyataan fakta: jika Anda menulis kode yang bergantung pada WPF, maka Anda tidak dapat menggunakan Mono; ergo tidak bisa dibawa dengan cara itu. Kerangka kerja UI Java mungkin payah, tetapi sejauh yang saya tahu mereka akan bekerja di mana pun yang berfungsi Java (dan perangkat keras mendukung UI semacam itu). Itu tidak membuat Java lebih baik , itu membuatnya lebih portabel dengan cara khusus ini.
Ben Collins
112

Mono melakukan pekerjaan yang lebih baik dalam menargetkan platform yang ingin saya dukung. Selain itu, semuanya subjektif.

Saya membagikan kode C # pada platform berikut: - iOS (iPhone / iPad) - Android - Web (HTML5) - Mac (OS X) - Linux - Windows

Saya dapat membagikannya lebih banyak tempat: - Windows Phone 7 - Wii - XBox - PS3 - dll.

Masalah besarnya adalah iOS karena MonoTouch bekerja dengan sangat baik. Saya tidak tahu cara yang baik untuk menargetkan iOS dengan Java. Anda tidak dapat menargetkan Windows Phone 7 dengan Java, jadi saya akan mengatakan bahwa hari-hari Java yang lebih baik untuk seluler telah berlalu.

Faktor terbesar bagi saya adalah produktivitas pribadi (dan kebahagiaan). C # sebagai bahasa jauh lebih maju dari Java IMHO dan kerangka .NET sangat menyenangkan untuk digunakan. Sebagian besar dari apa yang ditambahkan di Java 7 dan Java 8 telah di C # selama bertahun-tahun. Bahasa JVM seperti Scala dan Clojure (keduanya tersedia di CLR) cukup bagus.

Saya melihat Mono sebagai platform dengan haknya sendiri (yang hebat) dan memperlakukan .NET sebagai implementasi Microsoft dari Mono di Windows. Artinya saya kembangkan dan uji coba di Mono dulu. Ini bekerja dengan sangat baik.

Jika Java dan .NET (Mono katakanlah) adalah proyek Open Source tanpa dukungan perusahaan, saya akan memilih Mono daripada Java setiap saat. Saya yakin ini adalah platform yang lebih baik.

Baik .NET / Mono dan JVM adalah pilihan yang bagus, meskipun saya pribadi akan menggunakan beberapa bahasa selain Java di JVM.

Saya mengambil beberapa komentar lainnya:

Masalah: Performa.

** Jawaban: Baik JVM dan CLR berkinerja lebih baik daripada yang dikatakan para pencela. Saya akan mengatakan bahwa JVM berkinerja lebih baik. Mono umumnya lebih lambat dari .NET (meskipun tidak selalu).

Saya pribadi akan mengambil ASP.NET MVC dari J2EE setiap hari baik sebagai pengembang dan pengguna akhir. Dukungan untuk Google Native Client juga cukup keren. Juga, saya tahu bahwa kinerja GUI yang buruk untuk aplikasi Java desktop seharusnya menjadi bagian dari masa lalu tetapi saya terus menemukan yang lambat. Kemudian lagi, saya bisa mengatakan hal yang sama untuk WPF. GTK # sangat cepat meskipun jadi tidak ada alasan mereka harus lambat.

Masalah: Java memiliki ekosistem perpustakaan yang lebih besar.

Jawaban: Mungkin benar, tetapi dalam praktiknya tidak ada masalah.

Hampir setiap perpustakaan Java (termasuk JDK) berjalan dengan baik di .NET / Mono berkat IKVM.NET . Teknologi ini benar-benar luar biasa. Integrasinya luar biasa; Anda dapat menggunakan pustaka Java seperti aslinya. Saya hanya harus menggunakan pustaka Java dalam satu aplikasi .NET sekalipun. Ekosistem .NET / Mono umumnya menawarkan lebih dari yang saya butuhkan.

Masalah: Java memiliki dukungan alat yang lebih baik (lebih luas)

Jawaban: Tidak di Windows. Kalau tidak, saya setuju. MonoDevelop bagus juga.

Saya ingin memberikan teriakan kepada MonoDevelop ; itu adalah permata. MonoDevelop mengintegrasikan sebagian besar alat yang ingin saya gunakan termasuk penyelesaian kode (intellisense), integrasi Git / Subversion, dukungan untuk pengujian unit, integrasi SQL, debugging, refactoring mudah, dan penjelajahan perakitan dengan dekompilasi on-the-fly. Sangat menyenangkan menggunakan lingkungan yang sama untuk segala hal mulai dari web sisi server hingga aplikasi seluler.

Masalah: Kompatibilitas di seluruh platform.

Jawaban: Mono adalah basis kode tunggal di semua platform, termasuk Windows.

Kembangkan untuk Mono terlebih dahulu dan terapkan ke .NET di Windows jika Anda mau. Jika Anda membandingkan .NET dari MS ke Java, maka Java memiliki keunggulan dalam hal konsistensi di seluruh platform. Lihat jawaban selanjutnya ...

Masalah: Mono tertinggal .NET.

Jawaban: Tidak, tidak. IMHO, ini adalah pernyataan yang sering dinyatakan tetapi salah.

Distribusi Mono dari Xamarin dikirimkan dengan C #, VB.NET, F #, IronPython, IronRuby, dan saya pikir mungkin Boo di luar kotak. Kompiler Mono C # benar-benar up-to-date dengan MS. Kompiler Mono VB.NET tidak ketinggalan versi MS. Kompiler lain sama pada kedua platform (seperti bahasa .NET lainnya seperti Nemerle, Boo, dan Phalanger (PHP)).

Mono dikirimkan dengan banyak kode tertulis Microsoft yang sebenarnya termasuk Dynamic Language Runtime (DLR), Managed Extensibility Framework (MEF), F #, dan ASP.NET MVC. Karena Razor bukan Open Source, Mono saat ini dikirimkan dengan MVC2 tetapi MVC3 berfungsi dengan baik di Mono.

Platform inti Mono telah mengimbangi .NET atau bertahun-tahun dan kompatibilitasnya sangat mengesankan. Anda dapat menggunakan bahasa C # 4.0 lengkap dan bahkan beberapa fitur C # 5.0 hari ini. Faktanya, Mono sering memimpin .NET dalam banyak hal.

Mono mengimplementasikan bagian dari spesifikasi CLR yang bahkan tidak didukung oleh Microsoft (seperti array 64 bit). Salah satu bagian teknologi baru yang paling menarik di dunia .NET adalah Rosylyn . Mono telah menawarkan compiler C # sebagai layanan selama bertahun-tahun. Beberapa dari apa yang ditawarkan Rosylyn tersedia melalui NRefractory juga. Salah satu contoh jika Mono masih unggul adalah instruksi SIMD untuk mempercepat kinerja gaming.

Microsoft memang menawarkan sejumlah produk selain .NET yang tidak tersedia di Mono yang berasal dari kesalahpahaman tentang Mono lagging. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation) adalah contoh produk yang tidak berfungsi, atau tidak didukung dengan baik, di Mono. Solusi yang jelas adalah dengan menggunakan alternatif lintas platform seperti GTK #, NHibernate, dan ServiceStack.

Masalah: Microsoft jahat.

Jawaban: Benar. Terus.

Banyak orang menawarkan alasan berikut untuk menghindari penggunaan Mono:

1) Anda tidak boleh menggunakan Mono karena teknologi Microsoft harus dihindari

2) Mono menyebalkan karena tidak memungkinkan Anda menggunakan semua teknologi yang ditawarkan Microsoft

Bagi saya, jelas bahwa pernyataan ini tidak sesuai. Saya menolak pernyataan pertama tetapi akan melewatkan argumen itu di sini. Pernyataan kedua benar untuk semua alternatif .NET.

JVM adalah platform yang hebat dan ledakan bahasa JVM sangat mengagumkan. Gunakan apa yang membuatmu bahagia. Untuk saat ini, seringkali itu adalah .NET / Mono untuk saya.

Justin
sumber
3
Terima kasih atas jawaban yang begitu ekstensif di akhir pertandingan. Saya belum pernah menggunakan Mono / .Net / C #, tetapi posting Anda tampaknya mencerminkan beberapa perkembangan terbaru di alam semesta itu. Misalnya, saya tidak ingat MonoTouch begitu signifikan 3,5 tahun lalu.
Hanno Fietz
3
Saya bingung dengan jawaban "Mono tidak ketinggalan .NET". Anda mengklaim itu, lalu menyatakan setengah lusin cara yang sebenarnya, lag .NET (Entity Framework, dll). Aman untuk mengatakan itu tidak ketinggalan kompiler C # Microsoft, tetapi ekosistem .NET paling tidak terpisah-pisah di Mono. Tampaknya tidak masalah untuk tujuan Anda, tetapi tidak untuk semua orang, dan ada kekhawatiran yang sah di sana.
samkass
1
@samkass: Saya pikir intinya di sini adalah perbedaan antara 'lags' dan 'not implement this library'. Di dunia Java, Anda dapat menemukan analogi ini dengan Android yang tidak mengimplementasikan library Swing. Harap perhatikan juga bahwa persamaan lintas platform (dan open source, btw) diberikan. Saya menggunakan Mono setiap hari dan 'fragmentary at best' jelas bukan pengalaman saya.
konrad.kruczynski
9
Kurangnya dukungan WCF dan EF yang lengkap dan kuat, dan tidak ada WPF adalah pembunuh Mono untuk hampir semua hal yang telah saya kerjakan sejak .NET 3.0. Ya ada alternatif tetapi sebagian besar dari kekuatan .NET adalah kerangka kerja tambahan ini. Tanpa ini saya rasa Anda tidak dapat menyebut Mono kompatibel dengan NET sama sekali. Ini adalah implementasi parsial yang terbaik. Saya juga telah menggunakan NHibernate dan terus terang EF adalah teknologi yang jauh lebih baik. Tidak pernah menggunakan ServiceStack. IMO Mono sangat berisiko.
MrLane
1
setiap orang yang melewatkan WCF harus melihat servicestack. serius, tidak mengimplementasikan WCF adalah hal yang baik!
tidak nyata
54

Saya benar-benar mengembangkan di .NET, menjalankan semua pengujian saya terlebih dahulu di Mono, dan kemudian di Windows. Dengan cara itu saya tahu aplikasi saya bersifat lintas platform. Saya telah melakukan ini dengan sangat sukses pada aplikasi ASP.NET dan Winforms.

Saya tidak begitu yakin dari mana beberapa orang mendapat kesan bahwa Mono begitu mengerikan, tetapi itu pasti telah berhasil dalam kasus dan pendapat saya. Memang benar Anda akan memiliki sedikit kelambatan untuk penemuan terbaru dan terhebat di .NET dunia, tetapi sejauh ini, .NET 2.0 di Windows dan Linux sangat solid bagi saya.

Ingatlah bahwa ada banyak keanehan dalam hal ini, tetapi kebanyakan berasal dari memastikan Anda menulis kode portabel. Sementara kerangka kerja melakukan pekerjaan yang bagus untuk mengabstraksi OS apa yang Anda jalankan, hal-hal kecil seperti sensitivitas huruf Linux di jalur dan nama file membutuhkan sedikit waktu untuk membiasakan diri, seperti halnya izin.

.NET jelas sangat lintas platform karena Mono berdasarkan pengalaman saya selama ini.

GEOCHET
sumber
Sebut saya bodoh, tetapi apakah Anda bahkan perlu menguji ASP.NET dengan mono? Segala sesuatu yang akan menjadi .NET adalah sisi server, jadi tidak masalah OS mana yang ditampilkannya bukan?
Ethan Gunderson
9
Ethan, menggunakan Mono Anda dapat meng-host aplikasi ASP.net di Linux.
Eric Haskins
2
Tidak semua orang ingin menjalankan aplikasinya di Windows, untuk alasan apa pun.
Bernard
2
@ Rich B: jika klien tidak menginginkan produk MS, NET jelas merupakan pilihan yang salah.
Kjetil Ødegaard
21
@Kjetil: Mono bukan produk MS.
GEOCHET
26

Java sebenarnya adalah lintas platform seperti yang dikatakan semua orang. Ada implementasi JVM untuk hampir semua OS mainstream di luar sana (bahkan Mac OS X, akhirnya), dan semuanya bekerja dengan sangat baik. Dan ada banyak alat sumber terbuka di luar sana yang sama seperti platform lintas.

Satu-satunya tangkapan adalah bahwa ada operasi asli tertentu yang tidak dapat Anda lakukan di Java tanpa menulis beberapa DLL atau SO. Sangat jarang hal ini muncul dalam praktik. Namun, dalam semua kasus itu, saya dapat mengatasinya dengan menghasilkan proses asli dan menyaring hasilnya.

jodonnell
sumber
1
Selain itu, dalam hampir setiap kasus di mana Java tidak dapat melakukan operasi asli dengan cara lintas platform, hal yang sama akan berlaku untuk .NET
Eli Courtwright
Akhirnya? Mac OS X telah menerapkan JVM sejak 10.0. :)
mipadi
3
@Eli - Mungkin benar. Hal ini tentunya jauh lebih mudah untuk diintegrasikan dengan fungsionalitas asli di .NET / Mono daripada di Java. Jadi, jika Anda hanya mencoba berintegrasi dengan baik dengan platform asli, .NET / Mono menawarkan keuntungan nyata.
Justin
"memijahkan proses asli dan hasil layar-scraping" ngeri
Dasar
Saya akan berdalih dengan 'hampir semua OS mainstream', karena tidak ada JVM di luar kotak untuk Android atau iOS. Dengan perpustakaan kelas portabel baru di .NET, sementara itu, Anda sebenarnya dapat berbagi kode yang dikompilasi (meskipun bukan kode UI praktis) di seluruh platform termasuk seluler.
Mathieson
18

Saya pikir pertanyaan itu diutarakan dengan tidak benar. C # vs. Java jauh kurang menarik dalam hal penggunaan lintas platform daripada (a) platform mana yang perlu Anda dukung, dan (b) mempertimbangkan pustaka inti dan pustaka pihak ketiga yang tersedia. Bahasa hampir menjadi bagian paling tidak penting dari proses pengambilan keputusan.

Brad Wilson
sumber
Sepakat. Ini masalah seberapa baik mesin virtual didukung pada berbagai arsitektur.
Allain Lalonde
Sepakat. Tidak menyenangkan melakukan pengembangan penuh jika pelanggan tidak dapat menjalankannya.
Thorbjørn Ravn Andersen
15

Java adalah pilihan yang lebih baik untuk pengembangan Lintas Platform.

  • Performa. Java dan .Net memiliki tingkat kinerja yang serupa karena mesin virtual, tetapi JVM biasanya memiliki kinerja yang lebih baik karena pengoptimalan bertahun-tahun.

  • Perpustakaan. Meskipun ini tergantung pada tugas Anda, Java memiliki lebih banyak pustaka sumber terbuka atau pustaka pihak ketiga yang tersedia di sana. Untuk Aplikasi server, J2EE, Spring, Struts, dll. Untuk GUI, meskipun .Net menyediakan API lapisan Win32 tetapi ini menyebabkan masalah kompatibilitas. Java memiliki Swing, SWT, AWT, dll. Ia bekerja dalam banyak kasus.

  • Kesesuaian. Ini adalah masalah utama yang perlu dipertimbangkan saat mengembangkan program lintas platform. Dua masalah: pertama, kompatibilitas platform. Java masih menang karena JDK dikelola dengan baik oleh perusahaan tunggal dan asli Sun. Mono tidak dikelola oleh MS, jadi Anda belum memiliki jaminan untuk kompatibilitas pembaruan. 2. Kompatibilitas ke belakang. Sun mempertahankan reputasi yang baik pada kompatibilitas mundurnya, meskipun terkadang hal ini tampak terlalu kaku dan memperlambat langkahnya.

  • Alat. Java memiliki IDE lintas platform yang bagus. Netbeans, Eclipse, dll. Sebagian besar gratis. VS Studio bagus tetapi hanya di Windows, dan harganya tidak sedikit. Keduanya menyediakan pengujian unit, debug, profil, dll. Yang baik.

Karenanya saya menyarankan agar Java adalah pilihan yang lebih baik. Sebagai contoh, ada beberapa aplikasi lintas platform desktop terkenal yang dikembangkan oleh Java: Vuze, Limewire, BlogBridge, CrossFTP, belum lagi IDE tersebut. Mengenai .Net, saya memiliki pengetahuan terbatas tentang aplikasi yang sukses seperti itu.

Gatorhall
sumber
Bekerja dengan mono di Linux "lain" menjadi rumit. Ini mencerminkan masalah utama dengan mono: Masa depan mono terlalu bergantung pada kediktatoran Miguel de Icaza. Contoh kasus: Menurunnya dukungan untuk "lainnya ... (tidak didukung)" [ mono-project.com/Other_Downloads] Linux tampaknya berkorelasi ( IMHO ) dengan kekecewaan Miguel de Icaza dengan Linux ( tirania.org/blog/archive/ 2013 / Mar-05.html ). Jawa tidak mengalami masalah kediktatoran ini. C # dapat berjalan di lebih banyak platform, tetapi itu datang dengan lebih banyak biaya, risiko, kompromi dan ketergantungan pada Mr. de Icaza. Tidak, terima kasih.
StartupGuy
@ Michael.M jadi Anda lebih suka berada di tingkah Oracle?
Thorbjørn Ravn Andersen
@ ThorbjørnRavnAndersen: Salah. Izinkan saya memecahnya sesederhana mungkin: .Net -> MSFT platform (perusahaan sukses yang stabil; ekosistem yang terbatas tetapi rapi); Mono -> Kerangka De Icaza (el diktador; tidak populer untuk Linux dan itu menunjukkan: [ cultofmac.com/218632/… - coba instal mono di Centos 6.4, ini adalah mimpi buruk "tidak didukung"); Java adalah spesifikasi yang dimiliki oleh komunitas dan memiliki banyak implementasi vendor yang berbeda (Oracle hanyalah satu) [ coderanch.com/t/327542/java/java/…
StartupGuy
@ ThorbjørnRavnAndersen: .. terlebih lagi sponsor komunitas Java yang besar bahkan dapat mengecualikan Oracle dan tetap sukses dan didukung dengan sangat baik - Java sama sekali bukan keinginan Oracle --- silakan lihat: news.techworld.com/applications/3252787/ … Oracle dapat membuang semua keterlibatan Java mereka dan itu akan tetap hidup. Vendor lain apa yang memiliki platform .Net? Siapa lagi yang menyediakan runtime mono selain Xamarin? Jawa adalah satu-satunya yang tidak tunduk pada kediktatoran dan memiliki kendali komunitas yang benar, dukungan komunitas dan pengawasan komunitas.
StartupGuy
1
@ Michael.M Spesifikasi? Menjadi bagian dari komunitas? Saya pikir Anda salah - saya juga percaya bahwa satu - satunya alasan proyek OpenJDK tidak ditutup setelah akuisisi Sun, adalah GPL. Java berada di tangan besi Oracle, hanya karena TCK tidak tersedia secara bebas dan itulah yang diperlukan untuk membuat JVM yang berperilaku seperti Oracle JVM. Saya tidak punya masalah dengan Mono atau De Icaza, tapi menurut saya situasi Java jauh lebih baik. Satu-satunya proyek JVM alternatif dengan momentum mati ketika IBM berhenti mendukungnya.
Thorbjørn Ravn Andersen
8

Saya akan mengatakan Java juga. Jika Anda melihatnya dari segi kematangan, lebih banyak waktu dan usaha telah dikeluarkan oleh Sun (dan lainnya) untuk membuat JVM bekerja pada platform non-Windows.

Sebaliknya, Mono jelas merupakan warga kelas dua dalam ekosistem .NET.

Bergantung pada siapa target pelanggan Anda, Anda mungkin juga menemukan ada penolakan nyata terhadap penggunaan Mono - apakah Novell menawarkan jenis dukungan vendor yang sama untuk Mono yang akan Anda dapatkan untuk Java atau .NET di Windows?

Jika Anda terutama menargetkan hosting layanan Anda di Windows, masuk akal untuk mempertimbangkan pilihan ini, tetapi karena Anda menargetkan Linux terutama, sepertinya tidak ada masalah bagi saya.

warren_s
sumber
Saya cenderung setuju dengan Mono sebagai warga negara kelas 2, tetapi tidak dengan kesimpulan. Java telah ada sejak lama dan penuh dengan kebiasaan lama dan masalah manajemen memori, belum lagi Java hampir selalu memilih cara paling verbose untuk melakukan sesuatu. Ini juga cukup stagnan (bahasa) selama bertahun-tahun dan baru-baru ini mulai memasukkan fitur-fitur yang telah ada di .Net selama bertahun-tahun. IMHO, ini adalah pilihan antara dua kejahatan ... Dukungan platform Flakey w / .Net atau raksasa lamban yang sangat lambat untuk berkembang dan tugas untuk membuat kode.
Dasar
7

Java dirancang untuk lintas platform; C # /. Net tidak. Jika ragu, gunakan alat yang dirancang untuk tujuan Anda.

EDIT: dalam keadilan, .NET dirancang untuk bekerja pada lingkungan tertanam / PC / Server, jadi itu SORT lintas platform. Tapi itu tidak dirancang untuk Linux.

AlexeyMK
sumber
3
baik, C # adalah standar ISO, jadi idenya adalah memiliki sesuatu yang lintas platform. Microsoft tidak ingin mengembangkan implementasi untuk platform lain, tetapi diserahkan kepada pihak lain karena bahasanya adalah standar. Framework .NET adalah cerita yang lebih rumit.
zappan
Mono adalah implementasi yang baik dan DotGNU (untuk Mac juga)
Andrei Rînea
1
zappan: titik yang valid di C # (tidak tahu), tapi .NET sangat besar. Memang saya tidak punya pengalaman pribadi di sini.
AlexeyMK
@zappan - dari sudut pandang praktis, tidak relevan jika C # distandarisasi (atau Mono membuat tiruan C # yang cukup bagus). Portabilitas platform adalah tentang keseluruhan platform (termasuk perpustakaan dan ekosistem alat), bukan hanya bahasa itu sendiri. Dalam pengertian itu .Net jelas tidak sepenuhnya lintas platform.
mikera
7

Saya pikir jawabannya adalah "tergantung." Java berjalan pada apa saja, tetapi .NET / Mono (IMHO) adalah kerangka kerja yang lebih baik untuk desktop. Jadi saya kira jawabannya sangat tergantung pada platform apa yang Anda rencanakan untuk ditargetkan.

Giovanni Galbo
sumber
Desktop tidak identik dengan windows meskipun memiliki porsi ruang desktop terbesar.
ZOXIS
6

Untuk menambahkan sedikit lebih banyak percakapan, Java lebih portabel jika Anda tetap sekitar satu versi di belakang - Java 5 masih memiliki banyak fitur unggulan sehingga Anda bisa menunggu Java 6 dan masih memiliki banyak jangkauan dalam hal bahasa dan perpustakaan untuk dikembangkan dengan. Mac adalah platform utama yang memerlukan waktu beberapa saat untuk mengikuti versi Java terbaru.

Java juga memiliki badan standar yang sangat baik yang secara cerdas mengembangkan platform berdasarkan masukan dari banyak perusahaan yang berbeda. Ini adalah fitur yang sering diabaikan tetapi tetap membuat fitur-fitur baru bekerja dengan baik di berbagai platform dan menyediakan banyak jangkauan dalam dukungan perpustakaan untuk beberapa hal esoterik (sebagai ekstensi opsional).

Kendall Helmstetter Gelner
sumber
OS X 10.6 sekarang telah sepenuhnya mengikuti rilis Sun Java 6.
Thorbjørn Ravn Andersen
5

Saya akan memilih Java yang lebih portabel daripada C #. Java pasti juga memiliki kumpulan pustaka standar yang sangat kaya. Ada juga perpustakaan pihak ketiga open source yang luas seperti yang disediakan oleh proyek Jakarta ( http://jakarta.apache.org/ ).

Semua tersangka biasa ada untuk CI, Pengujian unit, dll juga. Dukungan IDE lintas platform juga sangat baik dengan Eclipse, Netbeans, IntelliJ IDEA, dll.


sumber
4

Ada pilihan bahasa lain juga. Saya menjadi sangat menyukai Python, yang bekerja dengan baik di Windows, Linux, dan Mac, dan memiliki kumpulan pustaka yang kaya.

George V. Reilly
sumber
Ya, saya suka Python dan memiliki Django yang saya suka untuk aplikasi web, tetapi ada beberapa hal yang membuatnya tidak dapat diterima, yang paling penting adalah GIL dalam implementasi standar C penerjemah. Saya memiliki sejumlah operasi yang sangat diuntungkan dari komputasi paralel pada mesin multicore dan saya harus menelurkan proses untuk melakukannya di cPython.
Hanno Fietz
3

Sementara Mono memiliki bagian masalah, saya pikir ia memiliki kisah kompatibilitas lintas platform yang lebih baik terutama JIKA Anda mengandalkan pemanggilan platform asli.

Tidak ada cukup kata-kata di Stack Overflow untuk menekankan betapa mulusnya mendapatkan sesuatu yang asli dipanggil dan dijalankan di .NET / Mono di (setidaknya dalam pengalaman saya 3 ...) beberapa platform vs. upaya Java yang setara.

damageboy
sumber
Saya setuju, memanggil kode khusus platform dari .NET / Mono sangat mudah asalkan dapat dipanggil dari C. Dengan CXXI ​​(diucapkan seksi) itu menjadi cakewalk untuk memanggil kode C ++ juga. tirania.org/blog/archive/2011/Dec-19.html
Justin
2

Gatorhall, apakah Anda memiliki beberapa data untuk mendukungnya?

Performa. Java dan .Net memiliki tingkat kinerja yang serupa karena mesin virtual, tetapi JVM biasanya memiliki kinerja yang lebih baik karena pengoptimalan bertahun-tahun.

Latar belakang: Saya seorang pria Windows sejak Windows 3.1 dan saat ini pengguna Linux (masih menjalankan Windows 7, OS hebat, di VM untuk Visual Studio 2010 dan alat lainnya).

Intinya: saya dan banyak pengguna (windows, linux, dll) yang saya tahu, mungkin tidak setuju dari Anda. Java cenderung bekerja lebih lambat bahkan pada aplikasi desktop linux, ASP.NET melakukan lebih cepat dari halaman server java berkali-kali. Beberapa orang mungkin setuju bahwa bahkan PHP yang tidak dikompilasi berkinerja lebih baik dalam beberapa skenario.

Java lebih lintas platform? Saya tidak ragu tentang ini (sejarah yang mendukung ini), tetapi lebih cepat (tidak mengatakan NET adalah) tidak begitu pasti dan saya ingin melihat beberapa tolok ukur nyata.

Rui Marques
sumber
Ada pertanyaan lain yang mungkin bisa membantu dan tentu saja ada baku tembak bahasa . JVM mungkin lebih dioptimalkan tetapi sudah dekat (terutama di Windows). Tolok ukur untuk ASP.NET vs J2EE atau JSP bahkan lebih mencurigakan tetapi saya tidak kesulitan mempercayai bahwa ASP.NET jauh lebih cepat bahkan jika runtime mengikat.
Justin