релиз на слоя , което позволява на Python приложенията да имат пълен достъп до библиотеките от класове на Java. С JPype от Python можете да използвате специфични за Java библиотеки, създавайки хибридни приложения, които съчетават код на Java и Python. За разлика от Jython, интеграцията с Java не се извършва чрез създаване на вариант на Python за JVM, а чрез взаимодействие на ниво и на двете виртуални машини, използвайки споделена памет. Предложеният подход позволява не само добра производителност, но и достъп до всички библиотеки CPython и Java. Кодът на проекта е под лицензия Apache 2.0.
Основни промени:
- JChar се поддържа като тип на връщане. За съвместимост JChar е наследен от "str" и реализира неявно преобразуване в "int". Следователно минава проверки в контрактите. Но това означава, че той вече не се счита за числов тип в Python и затова isinstance(c, int) връща False, което съответства на правилата за преобразуване на типове в Java.
- Въведен е оператор за преобразуване на Java тип Type@obj (@ е операторът в Python за вътрешно произведение, в Java такъв не съществува).
- Добавена е нотация за създаване на Java масиви. Type[s1][s2][s3] за масиви с фиксирани размери, Type[:][:][:] за масиви, които ще бъдат създадени по-късно.
- @FunctionalInterface позволява създаването на Java функции от Python обекти с __call__.
- Премахнати са остарелите JIterator, използването на JException като фабрика, get_default_jvm_path и jpype.reflect.
- По подразбиране не се извършва преобразуване на Java низове в Python низове.
- Python обяви "__int__" за несъветван, така че неявните преобразувания между цели и с плаваща запетая типове ще произвеждат TypeError.
- Използването на JException е обявено за остаряло. За да улавяте всички изключения, или да проверите, дали обектът е тип Java изключение, използвайте java.lang.Throwable.
- Каскадните причини за Java изключения сега се отразяват в стековите рамки на Python.
- Използването на JString е обявено за остаряло. За да създадете Java низ, или да проверите, че обектът има тип Java низ, използвайте java.lang.String.
- В Java класовете са обновени методите repr.
- java.util.List изпълнява контрактите за collections.abc.Sequence и collections.abc.MutableSequence.
- java.util.Collection изпълнява контракта за collections.abc.Collection.
- Java класовете са затворени и ще хвърлят TypeError при разширяване от Python.
- Обработка на Control-C внимателно. По-рано версии се сриват, когато Java обработва сигнала Control-C, тъй като те завършват Java по време на повикването. Сега JPype ще генерира InterruptedException, когато се връща от Java. Control-C няма да прекъсва дълги Java процедури, както е реализирано в момента, тъй като Java няма специално средство за това.
След това беше създаден коригиращ релиз 1.0.1, в който са добавени промени за заобикаляне на проблемите с релиза на Python 3.8.4. Python промени логиката относно използването на «__setattr__» за «object» и «type», което предотвратява използването ѝ за промяна на наследените класове. Също така, проверките за грешки бяха делегирани от метода «__setattr__», така че типовете на изключенията в някои проверки за адекватност трябва да бъдат актуализирани съответно.
Източник: opennet.ru
