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.