SORU
20 ŞUBAT 2013, ÇARŞAMBA


Java sınıf dosyalarının oluşturulmasını deterministik?

Kullanırkenaynı olduğunu GÖRDÜM(javac aynı yürütülebilir yani, üretilen sınıfın dosyaları her zaman aynı mı? Bir fark bağlı olabilirişletim sistemiyadonanım? Komple cam versiyonu dışında, başka faktörler farklılıklara yol açıyor olabilir mi? Herhangi bir derleyici farklılıkları önlemek için seçenekler vardır? Muhtemelen sadece teoride bir fark veya Oracle javac aslında aynı giriş için farklı sınıf dosyaları ve derleyici seçenekleri üretir?

Güncelleme 1Bu ilgileniyorumnesilister sınıf bir dosya da olabilir , yani derleyici çıkış değilçalıştırınçeşitli platformlarda.

Güncelleme 2'Aynı olduğunu GÖRDÜM, ben de javac Aynı çalıştırılabilir demek.

Güncelleme 3Oracle derleyici fark teorik ve pratik arasındaki fark, ayrım.

[DEĞİŞTİR, başka sözcüklerle ifade soru ekleme]
"Farklı bir platformda çalıştırıldığında aynı javac yürütülebilir,farklı bayt kodu üretecek koşullar nelerdir?"

CEVAP
20 ŞUBAT 2013, ÇARŞAMBA


Hadi şöyle:

Kolayca asla .class aynı dosya iki kez üreten tamamen uygun bir Java derleyicisi, .java aynı dosyaya verilen üretebilirim.

Sadece benim için gereksiz bir yöntem öznitelikleri izin verilir () ekleyerek bayt inşaat her türlü verdiği ya da bunu yapabilirim.

Bu göz önüne alındığındabelirtimideğilgerektirirbyte-için-byte aynı sınıf üretmek için derleyici istiyorum dosyalarıbağlı olarak kaçınınböyle bir sonuç.

Ancakbirkaç kez kontrol ettim , aynı kaynaktan derleme aynı anahtarları (ve aynı kütüphaneler!) ile aynı derleyici ile dosyayaptı.class aynı dosyaları neden.

Güncelleme:Son zamanlarda this interesting blog post about the implementation of switch on String in Java 7 üzerinde denk geldim. Bu blog yazısı, burada alıntı yapacağım bu konu ile ilgili bazı bölümleri, (vurgu benim)

Bunun için derleyici çıktısı tahmin edilebilir ve tekrarlanabilir, haritalar ve ayarlar kullanılan bu veri yapıları LinkedHashMaps LinkedHashSets yerine sadece HashMaps HashSets.Fonksiyonel açısından kod doğruluğu oluşturduverilen derleme sırasındaHashMap HashSet kullanarak iyi olurdu; yineleme sırası önemli değildir. Ancakyararlı javac'In çıkış değil sistem sınıfları uygulama ayrıntıları göre değişir . ihtiyacımız var .

Bu oldukça net bir şekilde sorunu göstermektedir: derleyicigerekli değilbelirli bir biçimde davranmaya, spec eşleştiği sürece. Derleyici geliştiriciler, ancak, olduğunu fark etmişsinizdirgenellikleiyi bir fikir içindeneyin(çok pahalı, muhtemelen olmamak kaydıyla).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ArkticPlanet

    ArkticPlanet

    9 ŞUBAT 2010
  • Easy Learn Tutorial

    Easy Learn T

    10 Kasım 2012
  • Machinima

    Machinima

    17 Ocak 2006