JPype 1.0 релиз, Python Java класстарына кирүү үчүн китепканалар

Жеткиликтүү катмар чыгаруу JPype 1.0, бул сизге Python тиркемелеринин Java класстарынын китепканаларына толук кирүү мүмкүнчүлүгүн уюштурууга мүмкүндүк берет. Python'дон JPype менен Java жана Python кодун айкалыштырган гибриддик тиркемелерди түзүү үчүн Java үчүн атайын китепканаларды колдоно аласыз. Jythonдон айырмаланып, Java менен интеграция JVM үчүн Python вариантын түзүү аркылуу эмес, жалпы эстутумду колдонгон эки виртуалдык машинанын деңгээлинде өз ара аракеттенүү аркылуу ишке ашат. Сунушталган ыкма жакшы көрсөткүчтөргө жетишүүгө гана мүмкүндүк бербестен, бардык 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__», поэтому типы исключений в некоторых проверках на адекватность должны быть обновлены соответствующе.

Source: opennet.ru

Комментарий кошуу