izdanje sloja , ki omogoča popoln dostop Python aplikacij do knjižnic razredov v jeziku Java. Z uporabo JPype lahko iz Pythona uporabljate specifične knjižnice Java in ustvarjate hibridne aplikacije, ki združujejo kodo v Java in Python. V nasprotju z Jythonom se integracija z Javo ne doseže s kreiranjem različice Pythona za JVM, temveč z interakcijo na ravni obeh virtualnih strojev, pri čemer se uporablja deljena pomnilniška prostorska. Predlagan pristop omogoča dosego dobre zmogljivosti ter dostop do vseh knjižnic CPython in Java. Koda projekta pod licenco Apache 2.0.
Glavne spremembe:
- Izjeme, ki jih povzročijo C++ in Java koda, zdaj zagotavljajo sklad izjem ob nastopu izjeme v Python kodu. Tako da za pridobitev informacij o skladu izjem več ni potrebno klicati stacktrace().
- Hitrost povrnitve ob klicih je povečana trikrat.
- Močno (večkrat) je bila povečana hitrost prenosa v
numpy buferje večdimenzionalnih matrik. Večdimenzionalni primitivni podatki prenašajo le za branje dostopne kopije, ustvarjene znotraj JVM s kontinuirnim razporedkom C. - Vse izpostavljene notranje komponente so bile zamenjane z implementacijami iz CPython, simboli __javaclass__, __javavalue__ in __javaproxy__
so bili odstranjeni. Vsem tipom CPython, dedovanim iz tipov razreda jpype, je dodana posebna Java-slot. Vse privatne tabele so bile prenesene v CPython. Java tipi zdaj morajo biti dedovani iz metaklase JClass, ki uporablja tipe slotov. Mešanice za osnovne razrede Python niso dovoljene. Tipi Object, Proxy, Exception, Number in Array so neposredno dedovani iz notranjih implementacij CPython. - Izboljšano je sledenje in obravnava izjem.
- Rezine matrik (Array slices) so zdaj obravnavane kot prikazi, ki podpirajo obratno pisanje v izvor, kot je matrika numpy. Za rezine matrik je zagotovljena podpora za nastavitev in pridobitev vrednosti s korakom (slice(start, stop, step)).
- V matrikah je bila implementirana podpora za „__reversed__“.
- V Java matrikah je zagotovljena podpora za API memoryview in odstranjena je odvisnost od numpy za prenos vsebine buferja.
- Numpy zdaj ni več odvisnost (extra) in prenos pomnilnika v numpy je mogoč brez kompilacije s podporo za numpy.
- JInterface je oblikovan kot metaklas. Uporabite isinstance(cls, JInterface) za preverjanje vmesnikov.
- V privzete importe so dodane manjkajoče TLD „mil“, „net“ in „edu“.
- Ob zagonu so izboljšana sporočila o napakah za UnsupportedClassVersion.
- java.util.Map zdaj vrne KeyError, če element ni najden. Vrednosti, ki so null, še vedno vrnejo None, kot se pričakuje. Uporabite get(), če je potrebno obravnavati prazne ključe kot None.
- java.util.Collection je bil odstranjen, saj je čudno preobremenjen med remove(Object) in remove(int) na seznamih. Uporabite Java metodo remove() za dostop do originalnega Java vedenja, vendar je strogo priporočeno izvedeti tip za obvladovanje preobremenitve.
- java.lang.IndexOutOfBoundsException se zdaj lahko ujame z razredom za izjeme IndexError pri dostopu do elementov java.util.List.
Izvor: opennet.ru
