JPype 1.0'ın sürümü, Python'dan Java sınıflarına erişim için kütüphaneler

Mevcut katman serbest bırakma JP tipi 1.0Python uygulamalarının Java dilindeki sınıf kitaplıklarına tam erişime sahip olmasını sağlar. Python'un JPype'ı ile Java'ya özgü kitaplıkları kullanarak Java ve Python kodunu birleştiren hibrit uygulamalar oluşturabilirsiniz. Jython'dan farklı olarak Java ile entegrasyon, JVM için bir Python varyantı oluşturularak değil, paylaşılan belleği kullanan her iki sanal makine düzeyinde etkileşim yoluyla elde edilir. Önerilen yaklaşım yalnızca iyi bir performans elde etmeyi sağlamakla kalmaz, aynı zamanda tüm CPython ve Java kitaplıklarına erişim sağlar. Proje kodu tarafından dağıtıldı Apache 2.0 altında lisanslanmıştır.

Ana değişiklikler:

  • JChar dönüş türü olarak desteklenir. Uyumluluk için JChar, "str" ​​ifadesini devralır ve "int" biçimine örtülü bir dönüşüm uygular. Bu nedenle sözleşmelerde kontrollerden geçer. Ancak bu, Python'da artık sayısal bir tür olarak kabul edilmediği ve bu nedenle isinstance(c, int) öğesinin Java türü dönüştürme kurallarıyla tutarlı olarak False olarak değerlendirildiği anlamına gelir.
  • Bir Java tipi oluşturmak için bir operatör tanıtıldı, Type@obj (@, iç çarpım için bir Python operatörüdür; Java'da böyle bir operatör yoktur).
  • Java dizileri oluşturmak için gösterim eklendi. Sabit boyutlu diziler için[s1][s2][s3] yazın, daha sonra oluşturulacak diziler için[:][:][:] yazın.
  • @FunctionalInterface, __call__ ile Python nesnelerinden Java işlevleri oluşturmanıza olanak tanır.
  • Kullanımdan kaldırılan JIterator, fabrika olarak JException kullanımı, get_default_jvm_path ve jpype.reflect kaldırıldı.
  • Varsayılan olarak Java dizeleri Python dizelerine dönüştürülmez.
  • Python "__int__"yi kullanımdan kaldırmıştır, dolayısıyla tamsayı ve kayan nokta türleri arasındaki örtülü dönüşümler TypeError üretecektir.
  • JException'ın kullanımı kullanımdan kaldırıldı. Tüm istisnaları yakalamak veya bir nesnenin Java istisna türü olup olmadığını kontrol etmek için Java.lang.Throwable'ı kullanın.
  • Java istisnalarının basamaklı nedenleri artık Python yığın çerçevelerine yansıtılıyor.
  • JString kullanımdan kaldırıldı. Bir Java dizesi oluşturmak veya bir nesnenin Java dizesi türünde olup olmadığını kontrol etmek için Java.lang.String'i kullanın.
  • Java sınıflarında repr yöntemleri güncellendi.
  • java.util.List, koleksiyonlar.abc.Sequence ve koleksiyonlar.abc.MutableSequence için sözleşmeleri yürütür.
  • java.util.Collection, koleksiyonlar.abc.Collection sözleşmesini yürütür.
  • Java sınıfları özeldir ve Python'dan genişletildiğinde TypeError hatası verir.
  • Control-C'yi dikkatli kullanın. Önceki sürümler, Java bir Control-C sinyalini işlediğinde çöküyordu çünkü çağrı sırasında Java'yı sonlandıracaklardı. JPype artık Java'dan dönerken bir InterruptedException oluşturacak. Control-C, Java'nın bunun için özel bir aracı olmadığından, şu anda uygulanan büyük Java prosedürlerini bir kenara atmayacak.

Daha sonra, Python 1.0.1 sürümündeki sorunların çözümüne yönelik değişiklikler ekleyen düzeltici sürüm 3.8.4 oluşturuldu. Python, "nesne" ve "tür" için "__setattr__" kullanımına ilişkin mantığı değiştirerek türetilmiş sınıfları değiştirmek için kullanılmasını engelledi. Hata kontrolü de "__setattr__" yönteminden devredilmiştir, dolayısıyla bazı yeterlilik kontrollerindeki istisna türlerinin buna göre güncellenmesi gerekir.

Kaynak: opennet.ru

Yorum ekle