Доступен релиз прослойки 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.
Источник: http://www.opennet.ru/opennews/art.shtml?num=52456