GNU/Linux >> Belajar Linux >  >> Linux

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

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

Menurut saya, Java memiliki lebih banyak ketersediaan alat di semua platform tersebut, meskipun ada banyak alat yang tersedia untuk .NET di platform Windows.

Pembaruan untuk tahun 2014

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

Pembaruan untuk 2018

Pandangan saya tentang ini mulai mengarah ke arah lain. Saya pikir .NET, secara luas, terutama dengan .NET Core, telah mulai mencapai "portabilitas paritas" dengan Java. Ada upaya yang 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 tentang peretasan .NET, tetapi merupakan upaya yang relatif mudah . Ada, tentu saja, perpustakaan dan layanan dan aplikasi yang hanya untuk Windows atau hanya dapat menargetkan platform tertentu - tetapi hal yang sama berlaku untuk 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 mulai dari titik ini.


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 di lebih banyak tempat:- Windows Phone 7- Wii- XBox- PS3- dll.

Masalahnya adalah iOS karena MonoTouch bekerja dengan luar biasa. Saya tidak tahu cara yang baik untuk menargetkan iOS dengan Java. Anda tidak dapat menargetkan Windows Phone 7 dengan Java, jadi menurut saya hari-hari Java yang lebih baik untuk seluler sudah berlalu.

Faktor terbesar bagi saya adalah produktivitas pribadi (dan kebahagiaan). C # sebagai bahasa bertahun-tahun lebih maju dari Java IMHO dan .NET framework sangat menyenangkan untuk digunakan. Sebagian besar yang ditambahkan di Java 7 dan Java 8 telah ada 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 mengembangkan dan menguji Mono terlebih dahulu. Ini bekerja dengan sangat baik.

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

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

Pendapat saya tentang beberapa komentar lainnya:

Masalah:Kinerja.

**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 menggunakan ASP.NET MVC melalui J2EE kapan saja baik sebagai pengembang maupun pengguna akhir. Dukungan untuk Google Native Client juga cukup keren. Juga, saya tahu bahwa kinerja GUI yang buruk untuk aplikasi Java desktop seharusnya sudah ketinggalan zaman, tetapi saya terus menemukan yang lambat. Kemudian lagi, saya bisa mengatakan hal yang sama untuk WPF. GTK# sangat cepat, jadi tidak ada alasan mereka harus lambat.

Masalah:Java memiliki ekosistem pustaka yang lebih besar.

Jawaban:Mungkin benar, tetapi dalam praktiknya bukan masalah.

Praktis setiap perpustakaan Java (termasuk JDK) berjalan dengan baik di .NET/Mono berkat IKVM.NET. Sepotong teknologi ini adalah keajaiban sejati. Integrasinya luar biasa; Anda dapat menggunakan perpustakaan Java seperti aslinya. Saya hanya perlu menggunakan pustaka Java dalam satu aplikasi .NET. 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.

Saya ingin memberikan sapaan 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, pemfaktoran ulang yang mudah, dan penjelajahan perakitan dengan dekompilasi on-the-fly. Sangat menyenangkan menggunakan lingkungan yang sama untuk semuanya, mulai dari web sisi server hingga aplikasi seluler.

Masalah:Kompatibilitas lintas 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 lag .NET.

Jawaban: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 out of the box. Kompiler Mono C# benar-benar mutakhir dengan MS. Kompiler Mono VB.NET tidak ketinggalan versi MS. Kompiler lainnya sama di kedua platform (seperti juga 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 saat ini. Faktanya, Mono sering memimpin .NET dalam banyak hal.

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

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

Masalah:Microsoft jahat.

Jawaban:Benar. Jadi apa.

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 setiap teknologi yang ditawarkan Microsoft

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

JVM adalah platform hebat dan ledakan bahasa JVM luar biasa. Gunakan apa yang membuat Anda bahagia. Untuk saat ini, itu sering kali .NET/Mono untuk saya.


Linux
  1. 8 tips untuk baris perintah Linux

  2. Linux vs Windows:OS Mana yang Lebih Baik untuk Game PC

  3. Perlu Untuk `builtin` Builtin?

  1. Auryo – Klien Desktop Lintas Platform untuk SoundCloud

  2. Mengapa Atlantic.Net Pilihan Tepat Dibandingkan Penyedia Cloud Lainnya? Bagian 1 dari 3

  3. C # di lingkungan linux

  1. Gunakan anacron untuk crontab yang lebih baik

  2. Apakah ada F# Interactive untuk Linux di .NET Core, tanpa menggunakan Mono?

  3. Apa nilai JAVA_HOME untuk CentOS?