Издание на JPype 1.0, библиотека за достъп до Java класове от Python

Достъпен релиз на слоя JPype 1.0, което позволява на 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster