Рэліз JPype 0.7.2, бібліятэкі для доступу да Java-класаў з Python

даступны рэліз праслойкі JPype 0.7.2, якая дазваляе арганізаваць поўны доступ Python-дадаткаў да бібліятэкам класаў на мове Java. Пры дапамозе JPype з Python можна выкарыстоўваць спецыфічныя для Java бібліятэкі, ствараючы гібрыдныя прыкладанні, якія спалучаюць код на Java і Python. У адрозненне ад Jython, інтэграцыя з Java дасягаецца не праз стварэнне варыянта Python для JVM, а праз узаемадзеянне на ўзроўні абедзвюх віртуальных машын, выкарыстоўваючы падзяляную памяць. Прапанаваны падыход дазваляе не толькі дабіцца добрай прадукцыйнасці, але і дае доступ да ўсіх бібліятэкам CPython і Java. Код праекту распаўсюджваецца пад ліцэнзіяй Apache 2.0.

Асноўныя змены:

  • Исключения, выброшенные в C++ и Java коде, теперь предоставляют стек исключений при возникновении исключения в коде на Python. Таким образом, чтобы получить информацию о стеке исключений отныне не нужно больше вызывать stacktrace().
  • В три раза увеличена скорость возврата при вызовах.
  • Существенно (на порядки) увеличена скорость передачи в
    numpy буферов многомерных массивов. Многомерные примитивы передают доступные только для чтения копии, созданные внутри JVM с непрерывной раскладкой C.

  • Все выставляемые внутренние компоненты заменены на реализации из CPython, а символы __javaclass__, __javavalue__ и __javaproxy__
    удалены. Ко всем типам CPython, унаследованным от типов класса jpype, добавлен выделенный Java-слот. Все приватные таблицы перенесены в CPython. Java-типы теперь должны наследоваться от метакласса JClass, который использует слоты типов. Примеси для базовых классов Python не допускаются. Типы Object, Proxy, Exception, Number и Array и наследуются напрямую от внутренних реализаций CPython.

  • Улучшена трассировка и обработка исключений.
  • Срезы массивов (Array slices) теперь обрабатываются в виде представлений, поддерживающих обратную запись в оригинал, такой как массив numpy. Для срезов массивов обеспечена поддержка установки и получения значения с шагом (slice(start, stop, step)).
  • В массивах реализована поддержка «__reversed__».
  • В Java-массивах обеспечена поддержка API memoryview и убрана зависимость от numpy для передачи содержимого буфера.
  • Numpy теперь не является зависимостью (extra) и передача памяти в numpy доступна без компиляции с поддержкой numpy.
  • JInterface оформлен в виде мета-класса. Используйте isinstance(cls, JInterface) для проверки на интерфейсы.
  • В импорты по умолчанию добавлены пропущенные TLD «mil», «net» и «edu».
  • Во время запуска улучшены сообщения об ошибках для UnsupportedClassVersion.
  • java.util.Map теперь выдаёт KeyError, если элемент не найден. Значения, которые null, по-прежнему возвращают None как и ожидается. Используйте get(), если пустые ключи требуется обрабатывать как None.
  • Удалён java.util.Collection, так как он странно перегружается между remove(Object) и remove(int) на List-ах. Используйте Java-метод remove() для доступа к оригинальному Java-поведению, но приведение типа строго рекомендуется для управления перегрузкой.
  • java.lang.IndexOutOfBoundsException теперь может быть пойман с помощью класса для исключений IndexError при доступе к элементам java.util.List.

Крыніца: opennet.ru

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