Java (hala) tercih edilen platformlar arası dil mi? [kapalı]


20

Doksanlı yıllarda Java kullanmaya başladığımda, ilk günden itibaren " Bir kez yaz, her yerde koş! " Muhtemelen hepsi doğruydu ve ben de koronun bir parçasıydım.

Çoklu platform çalışma zamanları (python, flash, perl, html, php ...) kullanan diğer tüm dilleri göz önünde bulundurarak artık bunun hakkında ne düşüneceğimi bilmiyorum. Ancak hala Java'yı kullanmanız gerektiğini söyleyen birçok argüman görüyorum çünkü platformlar arası geliştirme için sözde daha iyi.

Peki, bugün hala doğru mu? Java hala çoklu platform geliştirme için tercih edilen dil mi?

  • Lütfen platformlar arası yönlere odaklanın.
  • Genel dil özellik karşılaştırmaları istemiyorum.

Güncelleme: Şimdiye kadar harika yanıtlar! Yanıtların çoğu Java veya web'i destekliyor gibi görünüyor. Senaryo kalabalığından girdi var mı?



3
Bu yorum sorunun özünü ele almaz, ancak dikkate alınması gereken bir faktördür: Windows kullanıcılarını hedef alan Java tabanlı web uygulamaları uzak durulması gereken bir şeydir. Windows için Oracle JVM'nin son zamanlarda çok fazla güvenlik sorunu vardı. Bu nedenle, bilgili kullanıcıların JVM'yi kaldırdıkları için Java tabanlı web uygulamalarını kullanmayacaklarını görebilirsiniz.
dürtmek

Sorunuz, başlangıçta tercih edilen çapraz platform dilinin olduğu varsayımına dayanmaktadır.
Lucas Ramage

Yanıtlar:


10

python gibi komut dosyası stili dilleri de platformlar arası geliştirmeyi kolaylaştırır. Şimdi, Python'u (veya diğer dilleri) beğenip beğenmediğiniz size bağlı ve muhtemelen bu tartışmayı burada başlatmamız gerekmiyor.

Python taşınabilir kod yazmanıza izin verirken, Java sizi portatif olarak çalışacak kodu yazmaya zorlar. Gerçek python dilinin kendisi taşınabilir olarak çalışacaktır, ancak harici kütüphaneler çalışabilir veya çalışmayabilir. Ayrıca, python platforma özgü hizmetlere serbestçe erişim sağlayacaktır.

Java orada bir avantaj sağlıyor mu? Her iki durumda da taşınabilir kodu benzer şekilde yazabilirsiniz. Yani, kod yazabilirsiniz ve genellikle farklı platformlarda çalışır. Ancak, sadece kod yazarak ve her yerde çalışacağını varsaymaktan kurtulamazsınız. Windows, Linux ve Mac için sürüm üreten bir python projesi üzerinde çalıştım ve çok az çapraz platform sorunu ile karşılaştık. (Hatırladığım tek şey, Linux'ta çizim sorunlarına neden olan pygame kullandığımız kütüphanedeki bir hatadan kaynaklanıyordu. Bu, kullandığımız pygame sürümünün yükseltilmesiyle düzeltildi)

Başka bir sorun dağıtımdır. Kodunuzu çalıştıran bağımsız programları dağıtmak istiyorsanız, farklı platformlar için farklı sürümler oluşturmanız gerekir. Java için bir sürümü dağıtabilir ve kullanıcının Java'nın yüklü olduğunu veya yükleyebileceğini varsayabilirsiniz. Bu durumda Java muhtemelen dağıtım departmanının basitliğini kazanır.

Sonunda, hangi dilde çalışmaktan hoşlandığınız ve ne tür bir dağıtım yapmanız gerektiğini düşünüyorum.


18

Java olmayabilir veya tek geçerli çapraz platform aracı, bazı güçlü vardır:

  • Son derece hızlı.
  • Son derece sağlam.
  • Son derece taşınabilirdir (örneğin, Windows 95'te 10 yıl önce derlenen bayt kodu bugün OS X'de iyi çalışır).

ve bazı zayıflıklar:

  • Çekirdek GUI kütüphaneleri (Swing ...) yaşlarını gösteriyor (3. taraf eklemeleri burada yardımcı oluyor).
  • Dilin kendisi daha az ayrıntılı olabilir (örneğin işaretli istisnalar ...).
  • Başlangıç ​​zamanı daha çabuk olabilir (her zaman gelişmesine rağmen).

Özellikle platform Java hakkında konuşurken , bir nokta daha var:

  • Orada epeyce JVM ve yayınlanmaları diller birlikte çalışan Java ile.

19
Son derece hızlı? Neyle karşılaştırılmış?
HardCode

18
@HardCode: Yorumlanan herhangi bir dil veya en derlenmiş dillerle karşılaştırıldığında. C ve C ++ bazı durumlarda daha hızlı yapılabilir, ancak zordur ve çekirdek sayısı arttıkça zorlaşmaya devam eder. Java eşzamanlılığıyla (bu çoklu çekirdeklerin verimli bir şekilde kullanılması) pratikte elde edilmesi çok daha kolaydır.
Joonas Pulakka

5
@HardCode, görünüşe göre JVM hemen hemen her yorumlanmış dil için mevcut en hızlı çalışma zamanıdır (dil bilgisayar korsanlarının kendilerinin yaptıklarının aksine)

14

Bugün o zamanlar olduğu gibi doğrudur - yani tamamen değil. Java bir kez yazmak, her yerde test ve hata ayıklama. Tabii ki bu tamamen yeni bir limandan çok daha az iş ama genellikle ilk hype bize inandığından daha fazla iş.

Ürünümüzün Windows veya Linux üzerinde çalışacak bir Java sunucusu var, ancak işletim sistemiyle ilgili belirli sorunlar gördük ve gerekirse destek / test için hem Linux hem de Windows sunucularının mevcut olduğundan emin olun. Java UI'leri sunuculardan daha fazla sorun yaşama eğilimindedir (birçoğu kozmetiktir ve bu nedenle uygulamaya bağlı olarak potansiyel olarak yok sayılabilir).

Benim için kesinlikle bir dil olmasa da, web tercih edilen platformlar arası platform. Bir HTML / JavaScript ön ucu, uygulamanızın hemen hemen tüm istemci platformlarında ve çoğu durumda gerçek hedef olarak çalışacağı anlamına gelir - Mac veya PC olup olmadığı, hangi işletim sistemi sürümü vb.

Tabii ki genellikle sunucu platformunu dikte edeceksiniz, ancak sadece insanlar çok daha esnek hale geldiğinde, özellikle de çoğu şirketin zaten Windows ve Linux sunucularının bir karışımını desteklediği günümüzde.


8
İyi cevap. Tabii ki, uygulamanızın tüm çeşitli tarayıcı sürümlerinde doğru çalıştığından emin olmak da baş ağrısı olabilir.
Tim Goodman

5
@Tim: iyi bir nokta. Tarayıcı uygulamalarının Java masaüstü uygulamalarından çok "her yerde test ve hata ayıklama" olduğuna inanıyorum.
Joonas Pulakka

5
@Zaman: +1. Bir webapp uygulamasının tüm büyük tarayıcılarda aynı şekilde çalışmasını sağlamak, bir Java uygulamasının birden fazla işletim sisteminde aynı şekilde çalışmasını sağlamak kadar zordur.
Yevgeniy Brikman

3
"bir kez yaz, her yerde hata ayıkla" deneyimimde doğru değil. mantıklı olduğunuz ve platforma özgü bağımlılıkları önlediğiniz sürece, aynı Java kodunu birden çok platformda (GUI olanlar dahil) çalıştırırken sorun yaşamadım. Evet tabii ki test etmelisiniz, ama Java kodlama yaklaşık 15 yıl içinde sadece bir kez gerçek bir taşınabilirlik sorunu vardı (bu Java'nın çapraz platform File.pathSeparator yerine daha kodlama Windows dizin ayırıcılar için benim hatam olduğunu düşünüyorum !)
mikera

2
@mikera - Linux ve Windows arasında kodumuzla ilgisi olmayan sorunlar gördük. Nadirdirler fakat vardırlar.
Jon Hopkins

9

Şahsen, Java'nın hala tercih edilen platformlar arası dil olduğunu ve bir süre orada kalması gerektiğini söyleyebilirim (web uygulamalarının yanında). Bu yazıdaki konu hakkında bir seçim platformu olarak biraz daha yazdım , ancak özellikle çapraz platform cephesinde:

  • Bağımlılıklarınıza dikkat ettiğiniz sürece (örn. Yerel kodla arabirim oluşturmak için JNI kullanan kitaplıklardan kaçınmak), Java tüm büyük JVM platformlarında değiştirilmemiş olarak çalıştırılabilir.

  • Beacuse Java genellikle makineden bağımsız bayt kodu olarak dağıtılır , herhangi bir JVM'de yeniden derleme yapmadan çalışabilirsiniz (yerel JVM'nin kendisi yerel koda JIT-derlemesini işlediğinden). Örneğin, aynı jar dosyasıyla Windows'ta geliştirdikten sonra Mac'te ilk kez çalışacak makul bir karmaşık GUI uygulaması elde etmeyi başardım . Genellikle farklı kütüphaneler veya farklı bir platform için yeniden derleme gerektiren diğer platformlar arası dillerin aksine.

  • İhtiyacınız olan çekirdek kütüphanelerin çoğu (GUI, ağ oluşturma, IO vb.) Standart çalışma zamanının bir parçasıdır ve platformlar arası bir şekilde yazılmıştır. Bu nedenle, platformlar arası kütüphaneleri araştırmaya ve test etmeye gerek yok, ihtiyacınız olan her şeyin çalışma zamanında zaten olduğu garantilidir.


3

Bence bu seçeneklerin var:

1) ya

  • derlenmiş veya
  • yorumlanmış dil.

2) Kodunuzu nasıl paketleyip teslim edeceksiniz?

  • Bir "ön uç", bir ikili / komut dosyası mı?
  • Bir "ön uç" mu, birden çok ikili dosya / komut dosyası mı?
  • Birden çok "kullanıcı arabirimi", birden çok ikili dosya / komut dosyası mı?

Bu seçenekler performansı etkiler, kod görünürlüğünü ve dağıtımını sağlar.

Kaynak kodunuzu vermek ister misiniz? Derlenmiş diller sizin için olabilir. Derlenmiş diller, mikro ölçütlerde yorumlanmış (hatta JITed) dillerden daha iyi performans gösterir. Ayrıca Java, Python, Ruby vb.Gibi bir çalışma ortamına bağımlıysanız, kodunuzu dağıtmak daha zor olabilir.

En popüler platformlar arası masaüstü uygulamalarının C / C ++ ve platformlar arası bir widget kütüphanesi, örneğin Audacity, Blender, Firefox, Google Earth, OpenOffice, Skype, Songbird, Stellarium, VLC.


Örneklerinizde Skype listelemesinde ilginç bir hata yaptınız, ancak bu süper popüler uygulama aslında Windows'ta Delphi / Pascal ile başlatıldı ve
linux'da

Ben derlenmiş / yorumlanmış ikilik biraz yanıltıcı olduğunu - Java ne anlamda dağıtım için makineden bağımsız bytecode (yani artık kaynak formunda değil) için derlenmiş ve daha sonra JIT yerel kod üzerinde daha sonra derlenmiş çünkü bir anlamda hangi makinede çalışıyor olursanız olun. Tamamen çapraz platform, aynı zamanda yerel performans sağlar, ayrıca istemiyorsanız kaynağınızı dağıtmanız gerekmez. kazan / kazan / kazan.
mikera

0

Hayır diyeceğim. python ve ruby ​​çok kullanılır ve bu yüzden hem istemci hem de sunucu tarafı için javascript. Ben şahsen .NET kullanın ve mac ve linux (Windows üzerinde geliştirirken) çalıştırmak için sorun yok

-edit- LLVM'nin popüler hale geldiğini duyuyorum ama hala çok küçük. Bu, çapraz platform C ++ 'ı tek bir ikili dosyada kullanmanıza izin verecektir. Görünüşe göre tarayıcıda yürütülecek, ancak dom veya çağrı javascript değiştirmenize izin veren bir örnek görmedim.


LLVM bir tarayıcıda çalışmakla ilgili değil ... emscripten'den mi bahsediyorsunuz?
Camilo Martin

tarihi kontrol edin. 4 yıl önce emscripten yoktu. NativeClient çalışmak gerekiyordu (ve kıyameti çalışan vardı) ama olmadı.

Şimdi tarihi görüyorum, ama yine de, LLVM hiçbir zaman tarayıcılarla ilgili değildi, değil mi?
Camilo Martin

1
Hayır! Keşke JS yerine C ++ veya başka bir dil LLVM desteği


-1

Mobil platformları karışıma getirirseniz, en azından yeniden derlemeyi de eklemeniz gerekir. Örneğin android, j2me.

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.