Реліз 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

Додати коментар або відгук