Релиз 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 выполняет контракт for 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__», поэтому типы исключений в некоторых проверках на адекватность должны быть обновлены соответствующе.
Источник: http://www.opennet.ru/opennews/art.shtml? num=53382
© OpenNet