uvedenie vrstvy , ktoré umožňuje plný prístup Python aplikácií k Java knižniciam. S JPype môžu Python aplikácie využívať špecifické Java knižnice a vytvárať hybridné aplikácie kombinujúce kód v Jave a Pythone. Na rozdiel od Jythonu, integrácia s Javou sa dosahuje nie cez vytvorenie verzie Pythonu pre JVM, ale cez interakciu na úrovni oboch virtuálnych strojov, pričom sa využíva zdieľaná pamäť. Navrhovaný prístup umožňuje nielen dosiahnuť dobrý výkon, ale aj poskytuje prístup ku všetkým knižniciam CPython a Javy. Kód projektu pod licenciou Apache 2.0.
Hlavné zmeny:
- JChar je podporovaný ako návratový typ. Pre kompatibilitu je JChar dedičný od 'str' a implementuje implicitnú konverziu na 'int'. Preto prechádza kontrolami v zmluvách. To však znamená, že už sa považuje za číselný typ v Pythone, a preto isinstance(c, int) prijíma hodnotu False, čo je v súlade s pravidlami konverzie typov v Jave.
- Bola zavedená operátor pre prevod Java typu Type@obj (@ je operátor Pythona pre vnútorný súčin, v Jave neexistuje).
- Pridaná notácia na vytváranie polí Javy. Type[s1][s2][s3] pre polia pevných rozmerov, Type[:][:][:] pre polia, ktoré budú vytvorené neskôr.
- @FunctionalInterface umožňuje vytvárať Java funkciu z Python objektov s __call__.
- Boli odstránené zastarané JIterator, používanie JException ako továrne, get_default_jvm_path a jpype.reflect.
- Podľa predvoleného nastavenia nedochádza k prevodu Java reťazcov na reťazce Pythonu.
- Python označil '.__int__' za neodporúčané, preto budú neimplicitné konverzie medzi celočíselnými a s plávajúcou desatinnou čiarkou typmi spôsobovať TypeError.
- Používanie JException bolo označené za zastarané. Ak chcete zachytiť všetky výnimky alebo skontrolovať, či objekt má typ Java výnimky, použite java.lang.Throwable.
- Kaskádové príčiny Java výnimiek sa teraz zobrazujú na zásobníkoch Pythonu.
- Používanie JString bolo označené za zastarané. Ak chcete vytvoriť Java reťazec, alebo skontrolovať, či objekt má typ Java reťazca, použite java.lang.String.
- V Java triedach boli aktualizované repr metódy.
- java.util.List plní kontrakty pre collections.abc.Sequence a collections.abc.MutableSequence.
- java.util.Collection plní kontrakt pre collections.abc.Collection.
- Java triedy sú uzavreté a pri rozširovaní z Pythonu vyvolajú TypeError.
- Spracovanie Control-C je teraz jemnejšie. Predchádzajúce verzie padali, keď Java spracovávala Control-C signál, pretože ukončili Java počas volania. Teraz JPype vytvorí InterruptedException, keď sa vráti z Javy. Control-C nevyhodí z veľkých Java procedúr, ako je to teraz implementované, pretože Java nemá špeciálny prostriedok na to.
Následne bol vytvorený korigujúci release 1.0.1, ktorý obsahuje zmeny na obídenie problémov s vydaním Python 3.8.4. Python zmenil logiku týkajúcu sa používania „__setattr__“ pre „object“ a „type“, čo zabraňuje jeho použitiu na zmenu odvodených tried. Rovnako bola kontrola chýb delegovaná z metódy „__setattr__“, preto typy výnimiek v niektorých kontrolách na vhodnosť musia byť príslušne aktualizované.
Zdroj: opennet.ru
