Liberazione di JPype 0.7.2, librerie per accede à e classi Java da Python

Dispunibule liberazione di strati JPype 0.7.2, chì vi permette di urganizà l'accessu cumpletu di l'applicazioni Python à e librerie di classi Java. Cù JPype da Python, pudete aduprà biblioteche specifiche di Java per creà applicazioni hibride chì combina Java è codice Python. A cuntrariu di Jython, l'integrazione cù Java hè ottenuta micca per via di a creazione di una variante di Python per a JVM, ma per l'interazzione à u livellu di e duie macchine virtuali chì utilizanu memoria spartuta. L'approcciu prupostu permette micca solu di ottene un bonu rendimentu, ma ancu furnisce l'accessu à tutte e librerie CPython è Java. Codice di prughjettu distribuitu da licenziatu sottu Apache 2.0.

I cambiamenti principali:

  • Исключения, выброшенные в 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.

Source: opennet.ru

Add a comment