JPype 0.7.2 versiyasi, Python'dan Java sinflariga kirish uchun kutubxonalar

Mavjud qatlamni chiqarish JPype 0.7.2, bu Python ilovalariga Java tilidagi sinf kutubxonalariga to'liq kirish imkonini beradi. Python'dan JPype bilan siz Java va Python kodlarini birlashtirgan gibrid ilovalarni yaratish uchun Java-ga xos kutubxonalardan foydalanishingiz mumkin. Jython-dan farqli o'laroq, Java bilan integratsiya JVM uchun Python variantini yaratish orqali emas, balki umumiy xotiradan foydalangan holda ikkala virtual mashina darajasida o'zaro ta'sir qilish orqali erishiladi. Taklif etilayotgan yondashuv nafaqat yaxshi ishlashga erishishga imkon beradi, balki barcha CPython va Java kutubxonalariga kirishni ta'minlaydi. Loyiha kodi tarqaladi Apache 2.0 ostida litsenziyalangan.

Asosiy o'zgarishlar:

  • C++ va Java kodlarida chiqarilgan istisnolar endi Python kodida istisno yuzaga kelganda istisnolar to'plamini taqdim etadi. Shunday qilib, istisno stek haqida ma'lumot olish uchun endi siz stacktrace() ga qo'ng'iroq qilishingiz shart emas.
  • Qo'ng'iroqlarni qaytarish tezligi uch baravar oshirildi.
  • Sezilarli darajada (kattalik buyurtmalari bo'yicha) uzatish tezligi oshdi
    ko'p o'lchovli massivlarning numpy buferlari. Ko'p o'lchovli primitivlar JVM ichida yaratilgan faqat o'qish uchun mo'ljallangan nusxalarni qo'shni C tartibi bilan o'tkazadi.

  • Barcha ochiq ichki qismlar CPython ilovalari va __javaclass__, __javavalue__ va __javaproxy__ belgilari bilan almashtirildi.
    o'chirildi. Jpype sinf turlaridan meros bo'lib qolgan barcha CPython turlariga maxsus Java uyasi qo'shildi. Barcha shaxsiy jadvallar CPython-ga ko'chirildi. Java turlari endi JClass metasinfidan meros bo'lishi kerak, u tip slotlaridan foydalanadi. Python asosiy sinflari uchun miksinlarga ruxsat berilmaydi. Turlar Ob'ekt, Proksi, Istisno, Raqam va Massiv bo'lib, to'g'ridan-to'g'ri CPython ichki ilovalaridan meros bo'lib qoladi.

  • Yaxshilangan kuzatuv va istisnolardan foydalanish.
  • Endi massiv boʻlaklari asl nusxaga yozishni qoʻllab-quvvatlaydigan koʻrinishlar sifatida qayta ishlanadi, masalan, numpy massiv. Massivlarni kesish uchun qiymatlarni qadamlar (bo'lim (boshlash, to'xtatish, qadam)) o'rnatish va olish uchun yordam taqdim etiladi.
  • Endi massivlar "__reversed__" ni qo'llab-quvvatlaydi.
  • Java massivlari endi xotira ko'rish API-ni qo'llab-quvvatlaydi va bufer tarkibini o'tkazish uchun numpy-ga bog'liqlikni olib tashlaydi.
  • Numpy endi bog'liqlik emas (qo'shimcha) va numpy-ga xotirani numpy yordami bilan kompilyatsiya qilmasdan o'tkazish mumkin.
  • JInterface meta-sinf sifatida yaratilgan. Interfeyslarni tekshirish uchun isinstance (cls, JInterface) dan foydalaning.
  • Standart importlarga etishmayotgan TLD "mil", "net" va "edu" qo'shildi.
  • Ishga tushirish vaqtida UnsupportedClassVersion uchun yaxshilangan xato xabarlari.
  • Agar element topilmasa, java.util.Map endi KeyError beradi. Null bo'lgan qiymatlar kutilganidek hech birini qaytarmaydi. Bo'sh kalitlarni Yo'q deb hisoblamoqchi bo'lsangiz get() dan foydalaning.
  • Java.util.Collection o'chirildi, chunki u Ro'yxatlardagi remove(Object) va remove(int) o'rtasida g'alati darajada haddan tashqari yuklanadi. Mahalliy Java xatti-harakatiga kirish uchun Java remove() usulidan foydalaning, ammo ortiqcha yukni boshqarish uchun turdagi translatsiya tavsiya etiladi.
  • java.lang.IndexOutOfBoundsException endi java.util.List elementlariga kirishda IndexError istisno klassi yordamida ushlanishi mumkin.

Manba: opennet.ru

a Izoh qo'shish