издаване на слоя , което позволява пълен достъп на 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
