издаване на слоя , което позволява пълен достъп на 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-класовете са обновени.
- 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
