Ukukhutshwa kweJPype 1.0, amathala eencwadi okufikelela kwiiklasi zeJava ukusuka kwiPython

Iyafumaneka ukukhululwa umaleko JPpype 1.0, evumela izicelo zePython ukuba zibe nokufikelela ngokupheleleyo kwiilayibrari zeklasi ngolwimi lweJava. NgeJPype evela kwiPython, ungasebenzisa amathala eencwadi akhethekileyo kwiJava ukwenza usetyenziso oluxubileyo oludibanisa ikhowudi yeJava kunye nePython. Ngokungafaniyo neJython, ukudibanisa kunye neJava akufezeki ngokudala ukwahluka kwePython kwi-JVM, kodwa ngokusebenzisana kwinqanaba labo bobabini oomatshini abasebenzisa imemori ekwabelwana ngayo. Indlela ecetywayo ayivumeli kuphela ukuphumeza ukusebenza kakuhle, kodwa inika ukufikelela kuzo zonke iilayibrari zeCPython kunye neJava. Ikhowudi yeprojekthi isasazwa ngu ilayisenisi phantsi kweApache 2.0.

Utshintsho oluphambili:

  • 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__», поэтому типы исключений в некоторых проверках на адекватность должны быть обновлены соответствующе.

umthombo: opennet.ru

Yongeza izimvo