A JPype 1.0 kiadása, könyvtárak a Java osztályok Pythonból való eléréséhez

Elérhető rétegfelszabadítás JPype 1.0, amely lehetővé teszi a Python alkalmazások számára, hogy teljes hozzáférést kapjanak a Java nyelvű osztálykönyvtárakhoz. A Pythonból származó JPype segítségével Java-specifikus könyvtárak segítségével hozhat létre Java- és Python-kódot kombináló hibrid alkalmazásokat. A Jythontól eltérően a Java-val való integráció nem a JVM Python-változatának létrehozásával, hanem a megosztott memóriát használó mindkét virtuális gép szintjén történő interakcióval valósul meg. A javasolt megközelítés nemcsak jó teljesítmény elérését teszi lehetővé, hanem hozzáférést biztosít az összes CPython és Java könyvtárhoz. Projekt kód forgalmazza Apache 2.0 licenc alatt.

Nagy változások:

  • A JChar visszatérési típusként támogatott. A kompatibilitás érdekében a JChar az "str"-ből örökli, és implicit konverziót hajt végre "int"-re. Ezért átmegy a szerződésekben szereplő ellenőrzéseken. Ez azonban azt jelenti, hogy a Pythonban már nem tekintik numerikus típusnak, ezért az isinstance(c, int) False értékre értékeli ki, ami összhangban van a Java típusú konverziós szabályokkal.
  • Bevezettek egy Java-típust, a Type@obj-t (a @ egy Python-operátor a belső termékhez, a Java-nak nincs ilyen).
  • Hozzáadott jelölés a Java tömbök létrehozásához. Rögzített méretű tömbökhöz írja be az [s1][s2][s3], a később létrehozandó tömbök esetén írja be a [:][:][:] parancsot.
  • A @FunctionalInterface lehetővé teszi Java funktorok létrehozását Python objektumokból a __call__ segítségével.
  • Eltávolítottuk az elavult JIteratort, a JException használata gyárként, get_default_jvm_path és jpype.reflect.
  • Alapértelmezés szerint a Java karakterláncok nem konvertálódnak Python karakterláncokká.
  • A Python elavult "__int__", így az egész számok és a lebegőpontos típusok közötti implicit öntések TypeError-t eredményeznek.
  • A JException használata elavult. Az összes kivétel rögzítéséhez vagy annak ellenőrzéséhez, hogy egy objektum Java kivételtípus-e, használja a java.lang.Throwable parancsot.
  • A Java-kivételek lépcsőzetes okai mostantól a Python veremkeretekben is megjelennek.
  • A JString elavult. Java karakterlánc létrehozásához vagy annak ellenőrzéséhez, hogy egy objektum Java karakterlánc típusú-e, használja a java.lang.String parancsot.
  • A Repr metódusok frissítésre kerültek a Java osztályokban.
  • A java.util.List a collections.abc.Sequence és collections.abc.MutableSequence szerződéseket hajtja végre.
  • A java.util.Collection végrehajtja a gyűjteményekre vonatkozó szerződést.abc.Collection.
  • A Java osztályok privátak, és TypeError-t dobnak ki, ha Pythonból bővítik ki.
  • Óvatosan kezelje a Control-C-t. A korábbi verziók összeomlanak, amikor a Java egy Control-C jelet dolgoz fel, mert a hívás során leállítják a Java-t. A JPype mostantól InterruptedException-t fog dobni, amikor visszatér a Java-ból. A Control-C nem dobja ki a nagy Java-eljárásokat, ahogyan jelenleg implementálva van, mivel a Java-nak nincs erre speciális eszköze.

Ezt követően létrehoztak egy javító 1.0.1-es kiadást, amely változtatásokat adott a Python 3.8.4-es kiadással kapcsolatos problémák megoldására. A Python megváltoztatta a „__setattr__” „object” és „type” kifejezések használatának logikáját, így megakadályozta, hogy azt a származtatott osztályok módosítására használják. A hibaellenőrzés a „__setattr__” metódusból is át lett delegálva, ezért egyes megfelelőségi ellenőrzéseknél a kivételtípusokat ennek megfelelően frissíteni kell.

Forrás: opennet.ru

Hozzászólás