Рэліз 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__", таму тыпы выключэнняў у некаторых праверках на адэкватнасць павінны быць абноўлены адпаведна.

Крыніца: opennet.ru

Дадаць каментар