.NET / Mono veya Java, platformlar arası geliştirme için daha iyi bir seçim mi? [kapalı]


108

Mono için Java için olduğundan ne kadar daha az kitaplık var?

Her iki alternatife de genel bakıştan yoksun, ancak bir sonraki projem için oldukça fazla seçim özgürlüğüne sahibim. Şu alanlarda zor teknik gerçekler arıyorum

  • performans (örneğin, Java'nın iş parçacığı için iyi olduğu söylendi ve son zamanlarda çalışma zamanı kod optimizasyonunun .NET için çok iyi hale geldiğini duydum)
  • gerçek dünya taşınabilirliği (her ikisinin de taşınabilir olması gerekiyor, her biri için Catch-22 nedir?)
  • araç kullanılabilirliği ( CI , derleme otomasyonu, hata ayıklama, IDE)

Google'da yapabileceğim şeylerden çok, özellikle kendi işinde gerçekten deneyimlediğin şeyleri arıyorum. Uygulamam, zaman serilerinden büyük miktarda veri işleyen bir arka uç hizmeti olacaktır.

Ana hedef platformum Linux olacaktır.

Düzenleme: Sorumu daha uygun bir şekilde ifade etmek için, sadece dil ile değil, tüm paketle (3. parti kitaplıklar vb.) İlgileniyorum. Kütüphaneler için, bu muhtemelen "Mono için Java için olduğundan ne kadar daha az kütüphane vardır" sorusuyla sonuçlanır?


Bilginize, o zamandan beri bu proje için Java'yı seçtim, çünkü taşınabilirlik tarafında daha çok aşınmış görünüyordu ve bir süredir eski sistemlerde de var. Biraz üzgünüm çünkü C # konusunu çok merak ediyorum ve bunun içinde büyük bir proje yapmayı çok isterim, ama belki bir dahaki sefere. Tüm tavsiyeler için teşekkürler.


3
Harika soru. Platformlar arası geliştirme için de bir değerlendirmeye bakıyoruz.
Mat Nadrofsky

"Hangi dil" etiketini eklerdim ama zaten 5 var, bu yüzden şans yok.
Daniel Daranas

Büyük ölçüde hangi platformları hedeflediğinize bağlıdır ...
Thorbjørn Ravn Andersen

1
Şimdi golang'a bakmanın tam zamanı olabilir ...
StartupGuy

Xojo da dikkate değer olabilir. Windows, Mac Linux için LLVM kullanarak yerel uygulamaları derler. Bir IDE oluşturma otomasyonu, hata ayıklama vb. Vardır. Kitaplık birçok özelliğe sahiptir ve gerektiğinde genişletilebilir. www / xojo.com
Paul Lefebvre

Yanıtlar:


96

Şey .... Java aslında daha taşınabilir. Mono her yerde uygulanmaz ve Microsoft uygulamasının önemli ölçüde gerisinde kalır. Java SDK, platformlar arasında daha iyi senkronizasyonda kalıyor gibi görünüyor (ve daha fazla platformda çalışıyor).

Ayrıca, Windows platformlarında .NET için çok sayıda araç olmasına rağmen, Java'nın tüm bu platformlarda daha fazla araç kullanılabilirliğine sahip olduğunu söyleyebilirim.

2014 Güncellemesi

Bu düşünceyi 2014'te hala tutuyorum. Ancak, uzun bir süre gerçekten umursamadığımdan sonra Mono'ya biraz dikkat etmeye başladığımı söyleyerek bunu nitelendireceğim, bu nedenle Mono çalışma zamanında (veya ekosistemde gelişmeler olabilir) ) farkına varmadım. AFAIK, WIF'in WPF, WCF, WF'si için hala destek yok. Mono iOS'ta çalışabilir, ancak bildiğim kadarıyla Java çalışma zamanı hala Mono'dan çok daha fazla platformda çalışıyor. Ayrıca Mono, çok daha gelişmiş araçlar (Xamarin) görmeye başlıyor ve Microsoft, iş ortaklarıyla rekabetten ziyade tamamlayıcı hale getirmek için çok daha fazla platformlar arası bir tutum ve istekliliğe sahip görünüyor (örneğin, Mono yaklaşan OWIN / Helios ASP.NET manzarasının oldukça önemli bir parçası). Önümüzdeki yıllarda taşınabilirlik farklılıklarının hızla azalacağından şüpheleniyorum,

2018 Güncellemesi

Bu konudaki görüşüm diğer tarafa gitmeye başlıyor. Bence .NET, genel olarak, özellikle .NET Core ile, Java ile "taşınabilirlik eşitliği" sağlamaya başladı. Bazı platformlar için WPF'yi .NET Core'a getirme çabaları var ve .NET Core'un kendisi artık pek çok platformda çalışıyor. Mono (artık Microsoft'a ait olan Xamarin'e aittir) her zamankinden daha olgun ve şık bir üründür ve birden çok platformda çalışan uygulamalar yazmak artık .NET korsanlığının derin gnozunun alanı değil, nispeten basit bir çabadır. . Elbette, yalnızca Windows için olan veya yalnızca belirli platformları hedefleyebilen kitaplıklar, hizmetler ve uygulamalar vardır - ancak aynısı Java için de söylenebilir (genel olarak).

Bu noktada OP'nin yerinde olsaydım, bu noktadan sonraki herhangi bir uygulama için .NET'i seçmemi engelleyecek dillerin veya teknoloji yığınlarının doğasında bulunan hiçbir neden düşünemiyorum.


2
Bunu okumaktan ve Microsoft dünyasındaki oylamalardan gerçekten memnunum. NET gerçekten iyidir ama her zaman olduğu gibi anlatmaya çalıştı gibi Java bir Meşruluğu sahip bir .NET developper ve eski bir Java biri;)
JoeBilly

Bunun için +1. Java taşınabilirliğini (önemsiz olmayan uygulamalar için, yani web sunucuları, karmaşık GUI'ler, analitik motorlar) diğer alternatiflerden daha iyi buldum. Tam olarak mükemmel değil, ama şu anda alabileceğinizin en iyisi.
mikera

1
@Ben, 2013'te hala bu fikrin var mı? Eğer yaparsanız, bundan bahsetmek ister misiniz ve bu cevabı güncellemezseniz? 4 yaşındaki cevapları okurken çoğu zaman söylemek zor.
Benjamin Gruenbaum

1
@BenjaminGruenbaum evet, bu noktada fikrimi uzun süredir Mono'ya fazla dikkat etmediğimi söyleyerek nitelendirmeme rağmen, Mono çalışma zamanında (veya ekosistemde) henüz yapmadığım gelişmeler olabilir farkında oldu. AFAIK, WPF, WCF veya WF için hala destek yok. Mono iOS'ta çalışabilir, ancak bildiğim kadarıyla Java çalışma zamanı hala Mono'dan çok daha fazla platformda çalışıyor. Yani evet. Nitelikli, ancak evet.
Ben Collins

@HighCore argüman Mono'ya karşı değil , aslında. Bu sadece bir gerçek: WPF'ye bağlı kod yazarsanız, Mono kullanamazsınız; ergo bu şekilde taşınamaz. Java'nın UI çerçeveleri berbat olabilir, ancak bildiğim kadarıyla Java'nın çalıştığı her yerde çalışacaklar (ve donanım bu tür bir UI'yi destekliyor). Bu, Java'yı daha iyi yapmaz , onu bu şekilde daha taşınabilir hale getirir.
Ben Collins

112

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.


3
Oyunun sonlarında böylesine kapsamlı bir cevap için teşekkürler. Mono / .Net / C # 'i hiç kullanmadım, ancak gönderiniz o evrendeki son gelişmelerden bazılarını yansıtıyor gibi görünüyor. Örneğin, 3.5 yıl önce MonoTouch'ın bu kadar önemli olduğunu hatırlamıyorum.
Hanno Fietz

3
"Mono .NET gecikmez" cevabınız beni şaşırttı. Bunu iddia ediyorsunuz, daha sonra aslında .NET'i (Entity Framework, vb.) Geciktirdiği yarım düzine yolu belirtiyorsunuz. Microsoft'un C # derleyicisinde gecikmediğini söylemek güvenlidir, ancak .NET ekosistemi en iyi ihtimalle Mono'da parçalıdır. Bu sizin amaçlarınız için uygun görünüyor, ancak herkes için değil ve orada meşru bir endişe var.
samkass

1
@samkass: Sanırım buradaki nokta 'gecikmeler' ve 'bu kitaplığı uygulamıyor' arasındaki fark. Java dünyasında, bunu, Swing kitaplığını uygulamayan Android'e benzetebilirsiniz. Ayrıca, çapraz platform (ve açık kaynak, btw) eşdeğerlerinin verildiğini lütfen unutmayın. Her gün Mono kullanıyorum ve 'en iyi ihtimalle parçalı' kesinlikle benim deneyimim değildi.
konrad.kruczynski

9
Eksiksiz ve sağlam WCF ve EF desteğinin olmaması ve WPF olmaması, .NET 3.0'dan beri üzerinde çalıştığım hemen hemen her şey için Mono için bir katildir. Evet, alternatifler var ama .NET'in gücünün büyük bir kısmı bu ek çerçevelerdir. Bunlar olmadan Mono'yu .NET ile uyumlu diyebileceğinizi sanmıyorum. En iyi ihtimalle kısmi bir uygulamadır. Ayrıca NHibernate kullandım ve açıkçası EF bir yol daha iyi bir teknoloji. ServiceStack'i hiç kullanmadım. IMO Mono, çok büyük bir risktir.
MrLane

1
WCF'yi kaçıran herkes servicestack'e bir göz atmalıdır. cidden, WCF'yi uygulamamak iyi bir şeydi!
gerçek dışı

54

Aslında .NET'te geliştiriyorum, tüm testlerimi önce Mono'da, sonra Windows'ta çalıştırıyorum. Bu şekilde uygulamalarımın çapraz platform olduğunu biliyorum. Bunu hem ASP.NET hem de Winforms uygulamalarında çok başarılı bir şekilde yaptım.

Bazı insanların Mono'nun bu kadar korkunç olduğu izlenimini nereden aldığından tam olarak emin değilim, ama benim durumumda ve görüşlerimde işini kesinlikle yaptı. ama şu ana kadar Windows ve Linux'ta .NET 2.0 benim için çok sağlam.

Bunun pek çok tuhaf yönü olduğunu unutmayın, ancak bunların çoğu taşınabilir kod yazdığınızdan emin olmaktan kaynaklanmaktadır. Çerçeveler, çalıştırdığınız işletim sistemini soyutlamak için harika bir iş çıkarırken, Linux'un yollarda ve dosya adlarında büyük / küçük harf duyarlılığı gibi küçük şeylere, izinler gibi şeyler de alışmak biraz zaman alır.

NET şimdiye kadarki deneyimlerime dayanarak Mono sayesinde kesinlikle çok çapraz platform.


Beni cahil deyin, ancak ASP.NET'i mono ile test etmeniz bile gerekiyor mu? NET olacak her şey sunucu tarafıdır, bu nedenle hangi işletim sisteminde görüntülendiği önemli değil, değil mi?
Ethan Gunderson

9
Ethan, Mono kullanarak ASP.net uygulamalarını Linux'ta barındırabilirsin.
Eric Haskins

2
Her ne sebeple olursa olsun herkes uygulamasını Windows'ta çalıştırmak istemez.
Bernard

2
@Rich B: Bir müşteri MS ürünlerini istemiyorsa, .NET açıkça yanlış seçimdir.
Kjetil Ødegaard

21
@Kjetil: Mono bir MS ürünü değildir.
GEOCHET

26

Java aslında herkesin söylediği gibi çapraz platformdur. Dışarıdaki hemen hemen her ana işletim sistemi için bir JVM uygulaması var (nihayet Mac OS X bile) ve hepsi gerçekten iyi çalışıyor. Ve dışarıda, çapraz platform gibi olan tonlarca açık kaynaklı araç var.

Tek sorun, bazı DLL'ler veya SO'lar yazmadan Java'da yapamayacağınız belirli yerel işlemler olmasıdır. Bunların pratikte ortaya çıkması çok nadirdir. Tüm bu durumlarda, yine de, yerel süreçleri ortaya çıkararak ve sonuçları tarayarak aşıladım.


1
Ayrıca, Java'nın platformlar arası bir şekilde yerel bir işlem yapamadığı hemen hemen her durumda, aynısı .NET için de geçerli
Eli Courtwright

En sonunda? Mac OS X, 10.0.1'den beri JVM uygulamasına sahiptir. :)
mipadi

3
@Eli - Muhtemelen doğru. NET / Mono'daki yerel işlevsellikle entegre etmek Java'dakinden kesinlikle çok, çok daha kolaydır. Bu nedenle, yalnızca yerel platformla iyi bir şekilde entegre olmaya çalışıyorsanız, .NET / Mono gerçek bir avantaj sunar.
Justin

"yerel süreçleri ortaya çıkarma ve sonuçları ekran kazıma" titremesi
Temel

Android veya iOS için kutudan çıkmış bir JVM olmadığı için 'hemen hemen her ana işletim sistemi' ile tartışırdım. Bu arada .NET'teki yeni taşınabilir sınıf kitaplıkları ile, mobil dahil platformlar arasında derlenmiş kodu (pratik olarak UI kodu olmasa da) gerçekten paylaşabilirsiniz.
Mathieson

18

Sorunun yanlış ifade edildiğini düşünüyorum. C # ve Java, çapraz platform kullanımı açısından (a) hangi platformları desteklemeniz gerektiğinden ve (b) çekirdek kitaplıkları ve mevcut üçüncü taraf kitaplıklarını dikkate aldığından çok daha az ilgi çekicidir. Dil, karar verme sürecinin neredeyse en az önemli kısmıdır.


Kabul. Sanal makinelerin çeşitli mimarilerde ne kadar iyi desteklendiği meselesi.
Allain Lalonde

Kabul. Müşteri onu çalıştıramazsa, tam bir geliştirme yapmak hiç eğlenceli değil.
Thorbjørn Ravn Andersen

15

Java, Çapraz Platform geliştirme için daha iyi bir seçimdir.

  • Verim. Java ve .Net, sanal makine nedeniyle benzer performans düzeyine sahiptir, ancak JVM normalde yıllar ve yıllar optimizasyonu nedeniyle daha iyi performansa sahiptir.

  • Kütüphane. Bu görevinize bağlı olsa da, Java'da çok daha fazla açık kaynak veya üçüncü taraf kitaplığı vardır. Sunucu Uygulaması, J2EE, Spring, Struts, vb. İçin GUI için, .Net Win32 katman API'si sağlasa da bu uyumluluk sorunlarına neden olur. Java'da Swing, SWT, AWT, vb vardır. Çoğu durumda çalışır.

  • Uyumluluk. Platformlar arası programı geliştirirken dikkate alınması gereken temel konular budur. İki konu: birincisi, platform uyumluluğu. JDK, tek ve orijinal Sun şirketi tarafından bakımlı olduğundan Java hala kazanıyor. Mono MS tarafından sağlanmadığından güncelleme uyumluluğu konusunda henüz bir garantiniz yok. 2. Geriye dönük uyumluluk. Sun, geriye dönük uyumluluk konusunda iyi bir üne sahiptir, ancak bazen bu çok katı görünebilir ve hızı yavaşlatır.

  • Araçlar. Java, platformlar arası iyi bir IDE'ye sahiptir. Netbeans, Eclipse, vb. Çoğu ücretsizdir. VS Studio iyidir, ancak yalnızca Windows'ta ve biraz maliyeti yoktur. Her ikisi de iyi birim testleri, hata ayıklama, profiller vb. Sağlar.

Bu nedenle Java'nın daha iyi bir seçim olduğunu öneririm. Örnek olarak, Java tarafından geliştirilen bazı ünlü masaüstü çapraz platform uygulamaları var: Vuze, Limewire, BlogBridge, CrossFTP, bu IDE'lerden bahsetmeye bile gerek yok. .Net ile ilgili olarak, bu tür başarılı uygulamalar hakkında sınırlı bilgiye sahibim.


"Diğer" Linux'ta mono ile çalışmak zorlaştı. Bu, mono ile ilgili en büyük sorunu yansıtıyor: Mono'nun geleceği, Miguel de Icaza'nın diktatörlüğüne fazlasıyla bağlı. Örnek olay: "Diğer ... (desteklenmeyen)" için azalan destek [ mono-project.com/Other_Downloads] Linux , Miguel de Icaza'nın Linux ile hayal kırıklığı ( tirania.org/blog/archive/ ) ile ( IMHO ) ilişkili görünüyor. 2013 / Mart-05.html ). Java bu diktatörlük sorununu yaşamaz. C # daha fazla platformda çalışabilir, ancak bu daha fazla maliyet, risk, uzlaşma ve Bay de Icaza'ya bağımlılıkla birlikte gelir. Hayır teşekkürler.
StartupGuy

@ Michael.M, yani Oracle'ın kaprisinde olmayı tercih ediyorsun?
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: Yanlış. Yapabildiğim kadar basit bir şekilde ayrıştırmama izin verin: .Net -> MSFT platformu (istikrarlı başarılı şirket; sınırlı ama düzgün eko-sistem); Mono -> De Icaza çerçevesi (el dictador; Linux için sıcak değil ve şunu gösteriyor: [ cultofmac.com/218632/… - Mono'yu Centos 6.4'e yüklemeyi deneyin, bu "desteklenmeyen" bir kabus); Java , topluluğa ait olan ve birçok farklı satıcı uygulamasına sahip bir belirtimdir (Oracle yalnızca bir tanesidir) [ coderanch.com/t/327542/java/java/…
StartupGuy

@ ThorbjørnRavnAndersen: .. dahası büyük bir Java topluluğu sponsoru Oracle'ı dışlayabilir ve yine de başarılı ve son derece iyi desteklenebilir - Java hiçbir şekilde Oracle'ın kaprisinde değildir - lütfen bakınız: news.techworld.com/applications/3252787/ … Oracle, tüm Java katılımını terk edebilir ve bu yine de yaşayabilir. Başka hangi satıcıların .Net platformu var? Xamarin dışında başka kim mono çalışma zamanı sağlar? Java, bunlardan diktatörlüğe tabi olmayan tek kişidir ve gerçek topluluk denetimi, topluluk desteği ve topluluk yönetimine sahiptir.
StartupGuy

1
@ Michael.M Şartname? Topluluğa mı ait? Sanırım yanılıyorsunuz - Sun'un satın alınmasından sonra OpenJDK projesinin kapatılmamasının tek sebebinin GPL olduğuna da inanıyorum . Java, Oracle'ın demir yumruğundadır, çünkü TCK ücretsiz olarak kullanılabilir değildir ve Oracle JVM gibi davranan bir JVM yapmak için gerekli olan budur. Mono veya De Icaza ile bir sorunum yok ama Java'nın durumunun çok daha iyi olduğunu düşünmüyorum. İvme kazanan tek alternatif JVM projesi, IBM onu desteklemeyi bıraktığında öldü.
Thorbjørn Ravn Andersen


8

Ben de Java diyeceğim. Olgunluk açısından bakarsanız, Sun (ve diğerleri) JVM'nin Windows olmayan platformlarda çalışmasını sağlamak için çok daha fazla zaman ve çaba harcadı.

Buna karşılık, Mono kesinlikle .NET ekosisteminde ikinci sınıf bir vatandaştır.

Hedef müşterilerinizin kim olduğuna bağlı olarak, Mono kullanımına karşı gerçek bir geri itme olduğunu da görebilirsiniz - Novell, Windows'ta Java veya .NET için alacağınız Mono için aynı türde bir satıcı desteği sunuyor mu?

Öncelikle hizmetinizi Windows üzerinde barındırmayı hedefliyorsanız, bu seçimi düşünmek mantıklı olacaktır, ancak öncelikle Linux'u hedeflediğiniz için, bu bana biraz akıllıca görünmüyor.


Mono'nun 2. sınıf vatandaşı olmasına katılıyorum, ancak sonuca katılmıyorum. Java uzun zamandır etrafta dolaşıyor ve eski tuhaflıklar ve hafıza yönetimi sorunlarıyla dolu değil, neredeyse her zaman bir şeyler yapmanın en ayrıntılı yolunu seçtiğini belirtmek için. Aynı zamanda yıllardır oldukça durgun (dil) ve son zamanlarda .Net'te yıllardır bulunan özellikleri birleştirmeye başladı. IMHO, bu iki kötülük arasında bir seçimdir ... Flakey platformu w / .Net veya gelişmesi çok yavaş olan ve kodlanması gereken bir angarya olan hantal bir devi destekler.
Temel

7

Java, çapraz platform olacak şekilde tasarlanmıştır; C # /. Net değildi. Şüphe duyduğunuzda, amacınız için tasarlanmış aracı kullanın.

DÜZENLEME: Adil olmak gerekirse, .NET tümleşik / PC / Sunucu ortamlarında çalışmak üzere tasarlandı, yani bu, çapraz platformun SORTU. Ancak Linux için tasarlanmadı.


3
Eh, C # ISO standardize edilmiştir, bu nedenle fikir, platformlar arası bir şeye sahip olmaktı. microsoft diğer platformlar için uygulamalar geliştirmek istemedi, ancak dil bir standart olduğu için diğer taraflara bırakıldı. .Net çerçevesi ise daha karmaşık bir hikaye.
zappan

Mono yine de iyi bir uygulama ve DotGNU (Mac için de)
Andrei Rînea

1
zappan: C # üzerinde geçerli nokta (bilmiyordum), ancak .NET çok büyük. Kuşkusuz burada kişisel deneyimim yok.
AlexeyMK 01

@zappan - pratik bir bakış açısıyla, C # 'nın standartlaştırılması (veya Mono'nun oldukça iyi bir C # klonu yapması) alakasızdır. Platform taşınabilirliği, yalnızca dilin kendisiyle değil, tüm platformla (kitaplıklar ve araç ekosistemi dahil) ilgilidir. Bu anlamda .Net kesinlikle tam anlamıyla çapraz platform değildir.
mikera

7

Bence cevap "duruma göre değişir". Java hemen hemen her şeyde çalışır, ancak .NET / Mono (IMHO) masaüstü için daha iyi bir çerçevedir. Bu yüzden sanırım cevap gerçekten hangi platformları hedeflemeyi planladığınıza bağlı.


Masaüstü, masaüstü alanının en büyük kısmına sahip olmasına rağmen, Windows ile eşanlamlı değildir.
ZOXIS

6

Konuşmaya biraz daha fazla eklemek için, yaklaşık bir sürüm geride kalırsanız Java daha taşınabilirdir - Java 5 hala birçok mükemmel özelliğe sahiptir, böylece Java 6'yı bekleyebilir ve yine de dil ve kitaplıklar açısından geliştirilecek çok sayıda aralığa sahip olabilirsiniz. ile. Mac, en son Java sürümüne yetişmesi biraz zaman alabilen birincil platformdur.

Java ayrıca, platformu birçok farklı şirketten gelen girdilere dayalı olarak akıllıca büyüten mükemmel bir standartlara sahiptir . Bu genellikle gözden kaçan bir özelliktir, ancak yeni özelliklerin bile birden fazla platformda iyi çalışmasını sağlar ve bazı ezoterik şeyler için (isteğe bağlı uzantılar olarak) çok sayıda kitaplık desteği sağlar.


OS X 10.6 artık Sun Java 6 sürümüne tam olarak yetişti.
Thorbjørn Ravn Andersen

5

Java'nın C # 'dan daha taşınabilir olmasına oy verirdim. Java kesinlikle çok zengin bir standart kitaplık setine sahiptir. Ayrıca, Jakarta projesi ( http://jakarta.apache.org/ ) tarafından sağlananlar gibi geniş bir açık kaynak üçüncü taraf kitaplıkları kümesi de bulunmaktadır .

Tüm olağan şüpheliler CI, Birim testi vb. İçin de mevcuttur. Çapraz platform IDE desteği, Eclipse, Netbeans, IntelliJ IDEA vb. İle çok iyidir.


4

Başka dil seçenekleri de var. Windows, Linux ve Mac'te iyi çalışan ve zengin bir kitaplık setine sahip olan Python'a oldukça düşkün oldum.


Evet, Python'u seviyorum ve web uygulamaları için sevdiğim Django var, ancak onu kabul edilemez kılan bazı şeyler vardı, en önemlisi yorumlayıcının standart C uygulamasındaki GIL'di. Çok çekirdekli makinelerde paralel hesaplamadan büyük ölçüde yararlanan bir dizi işlemim var ve bunu cPython'da yapmak için süreçler oluşturmam gerekiyor.
Hanno Fietz

3

Mono'nun sorun payına sahip olmasına rağmen, özellikle yerel platform çağrısına güveniyorsanız, daha iyi bir platformlar arası uyumluluk hikayesine sahip olduğunu düşünüyorum.

Stack Overflow'da .NET / Mono'da (en azından benim deneyimlerime göre 3 ...) birden çok platformda eşdeğer Java çabası ile yerel olarak adlandırılan ve çalıştırılan bir şeyi elde etmenin ne kadar sorunsuz olduğunu vurgulamak için yeterli kelime yok.


Katılıyorum, .NET / Mono'dan platforma özel kod çağırmak, C'den çağrılabildiği sürece çok kolay. CXXI ​​(seksi olarak telaffuz edilir) ile C ++ kodunu aramak da bir çocuk oyuncağı haline geliyor. tirania.org/blog/archive/2011/Dec-19.html
Justin

2

Gatorhall, bunu yedekleyecek verileriniz var mı?

Verim. Java ve .Net, sanal makine nedeniyle benzer performans düzeyine sahiptir, ancak JVM normalde yıllar ve yıllar optimizasyonu nedeniyle daha iyi performansa sahiptir.

Arka plan: Windows 3.1'den beri bir Windows adamıyım ve şu anda bir Linux kullanıcısıyım (hala Windows 7, harika işletim sistemi, Visual Studio 2010 için bir VM ve diğer araçlar üzerinde çalışıyor).

Mesele: ben ve pek çok kullanıcı (windows, linux, vb.) Size katılmayabilir. Java, linux masaüstü uygulamasında bile daha yavaş performans gösterme eğilimindedir, ASP.NET çoğu kez java sunucusu sayfalarından daha hızlı performans gösterir. Bazıları derlenmemiş PHP'nin bile birkaç senaryoda daha iyi performans gösterdiğini kabul edebilir.

Java daha çok platformlar arası mı? Bu konuda hiç şüphem yok (geçmişe bakalım), ancak daha hızlı (.NET olduğunu söylemiyorum) o kadar kesin değil ve bazı gerçek ölçütler görmek istiyorum.


Yardımcı olabilecek başka bir soru daha var ve tabii ki dil çatışması var . JVM daha yoğun bir şekilde optimize edilmiş olabilir, ancak yakındır (özellikle Windows'ta). ASP.NET ile J2EE veya JSP karşılaştırmaları daha da şüpheli, ancak çalışma zamanları birbirine uysa bile ASP.NET'in çok daha hızlı olduğuna inanmakta sorun yaşamıyorum.
Justin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.