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.
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
Saya telah menanyakan pertanyaan yang sama terlambat dan IMHO, .NET / Mono tampaknya menjadi pilihan yang lebih baik hanya karena Mono memiliki rekam jejak yang bagus untuk aplikasi desktop lintas platform (sebagai lawan dari Java) dan tentu saja, Mono adalah meningkat pesat hari ini.
sumber
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.
sumber
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.
sumber
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.
sumber
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).
sumber
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
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.
sumber
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.
sumber
Gatorhall, apakah Anda memiliki beberapa data untuk mendukungnya?
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.
sumber