Mono, desteklemek istediğim platformları hedeflemede daha iyi bir iş çıkarıyor. Bunun dışında her şey özneldir.
C # kodunu aşağıdaki platformlarda paylaşıyorum: - iOS (iPhone / iPad) - Android - Web (HTML5) - Mac (OS X) - Linux - Windows
Daha fazla yerde paylaşabilirim: - Windows Phone 7 - Wii - XBox - PS3 - vb.
MonoTouch harika bir şekilde çalıştığı için en önemli şey iOS . Java ile iOS'u hedeflemenin iyi bir yolunu bilmiyorum. Windows Phone 7'yi Java ile hedefleyemezsiniz, bu yüzden Java'nın mobil için daha iyi olduğu günlerin geride kaldığını söyleyebilirim.
Benim için en büyük faktör kişisel üretkenlik (ve mutluluk). Dil olarak C #, Java IMHO'dan yıllarca ileridedir ve .NET çerçevesini kullanmak bir zevktir. Java 7 ve Java 8'e eklenenlerin çoğu yıllardır C # dilinde. Scala ve Clojure gibi JVM dilleri (ikisi de CLR'de mevcuttur) yine de oldukça iyidir.
Mono'yu başlı başına bir platform olarak görüyorum (harika bir platform) ve .NET'i Windows'ta Mono'nun Microsoft uygulaması olarak görüyorum. Bu, önce Mono üzerinde geliştirip test ettiğim anlamına geliyor. Bu harika çalışıyor.
Hem Java hem de .NET (diyelim ki Mono) herhangi bir kurumsal desteği olmayan Açık Kaynak projeleri olsaydı, her seferinde Java yerine Mono'yu seçerdim. Bunun daha iyi bir platform olduğuna inanıyorum.
Hem .NET / Mono hem de JVM harika seçimlerdir, ancak kişisel olarak JVM'de Java'dan başka bir dil kullanacaktım.
Diğer yorumlardan bazılarını ele alıyorum:
Sorun: Performans.
** Cevap: Hem JVM hem de CLR, kötüleyenlerin söylediklerinden daha iyi performans gösteriyor. JVM'nin daha iyi performans gösterdiğini söyleyebilirim. Mono genellikle .NET'ten daha yavaştır (her zaman olmasa da).
Şahsen hem geliştirici hem de son kullanıcı olarak her gün ASP.NET MVC'yi J2EE üzerinden alırdım. Google Native Client desteği de oldukça iyidir. Ayrıca, masaüstü Java uygulamaları için zayıf GUI performansının geçmişte kaldığını biliyorum, ancak yavaş olanları bulmaya devam ediyorum. Sonra tekrar, WPF için aynı şeyi söyleyebilirim. GTK # oldukça hızlıdır, bu yüzden yavaş olmaları için hiçbir sebep yoktur.
Sorun: Java'nın daha geniş bir kitaplık ekosistemi var.
Cevap: Muhtemelen doğrudur, ancak pratikte sorun teşkil etmez.
Pratik olarak her Java kitaplığı (JDK dahil), IKVM.NET sayesinde .NET / Mono üzerinde mükemmel çalışır . Bu teknoloji parçası gerçek bir harikadır. Entegrasyon harika; bir Java kitaplığını yerel olduğu gibi kullanabilirsiniz. Yine de tek bir .NET uygulamasında Java kitaplıklarını kullanmak zorunda kaldım. .NET / Mono ekosistemi genellikle ihtiyacım olandan fazlasını sunuyor.
Sorun: Java'nın daha iyi (daha geniş) araç desteği var
Cevap: Windows'ta değil. Aksi takdirde katılıyorum. MonoDevelop güzeldir.
MonoDevelop'a bir not vermek istiyorum ; o bir mücevher. MonoDevelop, kod tamamlama (intellisense), Git / Subversion entegrasyonu, birim testleri için destek, SQL entegrasyonu, hata ayıklama, kolay yeniden düzenleme ve anında derleme ile derlemeye göz atma dahil olmak üzere kullanmak istediğim araçların çoğunu entegre ediyor. Sunucu tarafı web'den mobil uygulamalara kadar her şey için aynı ortamı kullanmak harika.
Sorun: Platformlar arası uyumluluk.
Cevap: Mono, Windows dahil tüm platformlarda tek bir kod tabanıdır.
Önce Mono için geliştirin ve isterseniz Windows'ta .NET'e dağıtın. .NET'i MS ile Java'yı karşılaştırırsanız, Java'nın platformlar arasında tutarlılık açısından üstünlüğü vardır. Sonraki cevaba bakın ...
Sorun: Mono gecikmeler .NET.
Cevap: Hayır değil. IMHO, bu sıklıkla ifade edilen ancak yanlış bir ifadedir.
Xamarin'den Mono dağıtımı C #, VB.NET, F #, IronPython, IronRuby ile birlikte geliyor ve sanırım kutudan Boo çıkabilir. Mono C # derleyicisi MS ile tamamen günceldir. Mono VB.NET derleyicisi MS versiyonunu geride bırakıyor. Diğer derleyiciler her iki platformda da aynıdır (Nemerle, Boo ve Phalanger (PHP) gibi diğer .NET dilleri gibi).
Mono, Dinamik Dil Çalışma Zamanı (DLR), Yönetilen Genişletilebilirlik Çerçevesi (MEF), F # ve ASP.NET MVC dahil olmak üzere birçok gerçek Microsoft yazılı koduyla birlikte gelir. Razor Açık Kaynak olmadığından, Mono şu anda MVC2 ile birlikte geliyor ancak MVC3 Mono üzerinde çalışıyor.
Çekirdek Mono platformu, .NET'e ya da uzun yıllara ayak uydurmuştur ve uyumluluk etkileyicidir. Tam C # 4.0 dilini ve hatta bazı C # 5.0 özelliklerini bugün kullanabilirsiniz. Aslında, Mono genellikle birçok yönden .NET'e liderlik eder.
Mono, CLR spesifikasyonunun Microsoft'un bile desteklemediği kısımlarını uygular (64 bit diziler gibi). .NET dünyasındaki en heyecan verici yeni teknoloji parçalarından biri Rosylyn'dir . Mono, C # derleyicisini yıllardır hizmet olarak sunmaktadır. Ne Rosylyn tekliflerin bazıları üzerinden ulaşılabilir NRefractory de. Mono'nun hala önde olduğu bir örnek, oyun performansını hızlandırmak için SIMD talimatları olabilir.
Microsoft, .NET üzerinde, Mono gecikmesi ile ilgili yanlış kanıdan kaynaklanan Mono'da bulunmayan bir dizi ürün sunmaktadır. Windows Presentation Foundation (WPF), Entity Framework (EF), WCF (Windows Communication Foundation), Mono'da çalışmayan veya yetersiz desteklenen ürün örnekleridir. Bariz çözüm, bunun yerine GTK #, NHibernate ve ServiceStack gibi çapraz platform alternatiflerini kullanmaktır.
Sorun: Microsoft kötüdür.
Cevap: Doğru. Ne olmuş yani.
Birçok kişi Mono kullanmaktan kaçınmak için aşağıdaki nedenleri sunar:
1) Microsoft teknolojisinden kaçınılması gerektiği için Mono kullanmamalısınız
2) Mono berbat çünkü Microsoft'un sunduğu her teknolojiyi kullanmanıza izin vermiyor
Bana göre, bu ifadelerin uyumsuz olduğu açıktır. İlk ifadeyi reddediyorum ama burada bu argümanı atlayacağım. İkinci ifade tüm .NET alternatifleri için geçerlidir.
JVM harika bir platform ve JVM dillerinin patlaması harika. Seni mutlu eden şeyi kullan. Şimdilik, bu benim için genellikle .NET / Mono.