Нашри 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. Навъи[s1][s2][s3] барои массивҳои андозаи собит, Навъи[:][:][:] барои массивҳое, ки баъдтар сохта мешаванд.
  • @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 -ро истифода баред.
  • Усулҳои Repr дар синфҳои Java нав карда шуданд.
  • java.util.List шартномаҳоро барои collects.abc.Sequence ва collections.abc.MutableSequence иҷро мекунад.
  • java.util.Collection шартномаро барои collects.abc.Collection иҷро мекунад.
  • Синфҳои Java хусусӣ мебошанд ва ҳангоми васеъшавӣ аз Python TypeError-ро мепартоянд.
  • Control-C-ро бодиққат идора кунед. Версияҳои қаблӣ ҳангоми коркарди сигнали Control-C Java вайрон мешаванд, зеро онҳо Java-ро ҳангоми занг қатъ мекунанд. JPype ҳоло ҳангоми бозгашт аз Java InterruptedException -ро мепартояд. Control-C расмиёти бузурги Java-ро, ки ҳоло амалӣ карда мешавад, хориҷ намекунад, зеро Java барои ин асбоби махсус надорад.

Баъдан, версияи ислоҳкунандаи 1.0.1 сохта шуд, ки барои ҳалли мушкилот бо версияи Python 3.8.4 тағйирот илова кард. Python мантиқи истифодаи "__setattr__" -ро барои "объект" ва "навъ" тағир дод ва аз истифодаи он барои тағир додани синфҳои ҳосилшуда пешгирӣ кард. Санҷиши хатогиҳо низ аз усули "__setattr__" ваколат дода шудааст, аз ин рӯ намудҳои истисно дар баъзе санҷишҳои мутобиқат бояд мувофиқан нав карда шаванд.

Манбаъ: opennet.ru

Илова Эзоҳ