warstwa wydania , umożliwiająca pełny dostęp aplikacji Python do bibliotek klas w języku Java. Dzięki JPype z Pythona można korzystać z bibliotek specyficznych dla Javy, tworząc hybrydowe aplikacje łączące kod w Javie z Pythonem. W przeciwieństwie do Jython, integracja z Javą osiągana jest nie poprzez stworzenie wersji Pythona dla JVM, lecz poprzez interakcję na poziomie obu maszyn wirtualnych, wykorzystując pamięć współdzieloną. Proponowane podejście pozwala nie tylko osiągnąć dobrą wydajność, ale także zapewnia dostęp do wszystkich bibliotek CPython i Javy. Kod projektu na licencji Apache 2.0.
Główne zmiany:
- Typ JChar jest obsługiwany jako typ zwracany. Dla zgodności JChar dziedziczy po „str” i realizuje niejawne konwertowanie na „int”. Dlatego przechodzi weryfikacje w kontraktach. Jednak oznacza to, że nie jest już uważany za typ numeryczny w Pythonie, a więc isinstance(c, int) zwraca False, co jest zgodne z zasadami konwersji typów w Javie.
- Wprowadzono operator do konwersji typu Java Type@obj (@ to operator Pythona dla iloczynu wewnętrznego, którego w Javie nie ma).
- Dodano notację do tworzenia tablic Java. Type[s1][s2][s3] dla tablic o stałych rozmiarach, Type[:][:][:] dla tablic, które będą tworzone później.
- @FunctionalInterface umożliwia tworzenie funkcyjnych obiektów Java z obiektów Pythona z __call__.
- Usunięto przestarzałe JIterator, używanie JException jako fabryki, get_default_jvm_path i jpype.reflect.
- Domyślnie nie dochodzi do konwersji Java-strings na łańcuchy Pythona.
- Python oznaczył __int__ jako niezalecane, dlatego niejawne konwersje pomiędzy typami całkowitymi a zmiennoprzecinkowymi będą skutkować TypeError.
- Używanie JException zostało oznaczone jako przestarzałe. Aby uchwycić wszystkie wyjątki lub sprawdzić, czy obiekt jest typem wyjątku Java, należy użyć java.lang.Throwable.
- Przyczyny kaskadowe wyjątków Java są teraz odzwierciedlane w stosach śladowych Pythona.
- Użycie JString zostało oznaczone jako przestarzałe. Aby utworzyć łańcuch Java lub sprawdzić, czy obiekt ma typ łańcucha Java, użyj java.lang.String.
- W klasach Java zaktualizowano metody repr.
- java.util.List spełnia kontrakty dla collections.abc.Sequence i collections.abc.MutableSequence.
- java.util.Collection spełnia kontrakt dla collections.abc.Collection.
- Klasy Java są zamknięte i będą rzucać TypeError podczas rozszerzania z Pythona.
- Obsługa Control-C jest teraz staranniejsza. W poprzednich wersjach programy przestawały działać, gdy Java przetwarzała sygnał Control-C, ponieważ kończyły Java w trakcie wywołania. Teraz JPype wygeneruje InterruptedException, gdy wraca z Javy. Control-C nie będzie przerywać dużych procedur Java, jak to ma miejsce obecnie, ponieważ Java nie ma do tego specjalnych środków.
Następnie stworzono poprawkę 1.0.1, w której wprowadzono zmiany mające na celu rozwiązanie problemów związanych z wydaniem Pythona 3.8.4. Python zmienił logikę dotyczącą użycia «__setattr__» dla «object» i «type», uniemożliwiając jego użycie do zmiany klas pochodnych. Dodatkowo, sprawdzanie błędów zostało przeniesione z metody «__setattr__», dlatego typy wyjątków w niektórych sprawdzeniach poprawności muszą zostać zaktualizowane odpowiednio.
Źródło: opennet.ru
