релиз на слоя , което позволява на 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) на списъци. Използвайте Java метода remove() за достъп до оригиналното Java поведение, но типизацията е строго препоръчителна за управление на претоварването.
- java.lang.IndexOutOfBoundsException може да бъде уловен с помощта на класа за изключения IndexError при достъп до елементите на java.util.List.
Източник: opennet.ru
