Wydanie JPype 1.0, bibliotek umożliwiających dostęp do klas Java z poziomu Pythona

Do dyspozycji wydanie warstwy JPype 1.0, która umożliwia aplikacjom Pythona pełny dostęp do bibliotek klas w języku Java. Dzięki JPype z Pythona możesz używać bibliotek specyficznych dla Java do tworzenia aplikacji hybrydowych, które łączą kod Java i Python. W przeciwieństwie do Jythona, integracja z Javą odbywa się nie poprzez stworzenie wariantu Pythona dla JVM, ale poprzez interakcję na poziomie obu maszyn wirtualnych z wykorzystaniem pamięci współdzielonej. Zaproponowane podejście pozwala nie tylko osiągnąć dobrą wydajność, ale także zapewnia dostęp do wszystkich bibliotek CPython i Java. Kod projektu dystrybuowane przez na licencji Apache 2.0.

Główne zmiany:

  • JChar jest obsługiwany jako typ zwracany. Dla kompatybilności JChar dziedziczy z „str” i implementuje niejawną konwersję na „int”. Dlatego przechodzi kontrolę umów. Oznacza to jednak, że nie jest już uważany za typ numeryczny w Pythonie i dlatego isinstance(c, int) zwraca wartość False, co jest zgodne z regułami konwersji typów Java.
  • Wprowadzono operator do rzutowania typu Java, Type@obj (@ jest operatorem Pythona dla produktu wewnętrznego; Java go nie ma).
  • Dodano notację do tworzenia tablic Java. Wpisz[s1][s2][s3], aby uzyskać tablice o stałym rozmiarze, wpisz[:][:][:], aby uzyskać tablice, które zostaną utworzone później.
  • @FunctionalInterface umożliwia tworzenie funktorów Java z obiektów Pythona za pomocą __call__.
  • Usunięto przestarzały JIterator, użycie JException jako fabryki, get_default_jvm_path i jpype.reflect.
  • Domyślnie ciągi Java nie są konwertowane na ciągi Pythona.
  • Python ma przestarzałe „__int__”, więc niejawne rzutowanie między typami całkowitymi i zmiennoprzecinkowymi spowoduje wygenerowanie błędu TypeError.
  • Użycie JException zostało przestarzałe. Aby wychwycić wszystkie wyjątki lub sprawdzić, czy obiekt jest typem wyjątku Java, użyj Java.lang.Throwable.
  • Kaskadowe przyczyny wyjątków Java są teraz odzwierciedlane w ramkach stosu Pythona.
  • JString jest przestarzały. Aby utworzyć ciąg Java lub sprawdzić, czy obiekt jest typu ciąg Java, użyj Java.lang.String.
  • Metody Repr zostały zaktualizowane w klasach Java.
  • java.util.List wykonuje kontrakty dla kolekcji.abc.Sequence i Collections.abc.MutableSequence.
  • java.util.Collection realizuje umowę dotyczącą kolekcji.abc.Collection.
  • Klasy Java są prywatne i po rozszerzeniu z Pythona rzucą błąd TypeError.
  • Obchodź się ostrożnie z Control-C. Poprzednie wersje ulegają awarii, gdy Java przetwarza sygnał Control-C, ponieważ powodują one zakończenie działania Java podczas wywołania. JPype będzie teraz zgłaszał wyjątek InterruptedException podczas powrotu z Java. Control-C nie wyrzuci dużych procedur Java, jakie są obecnie stosowane, ponieważ Java nie ma do tego specjalnego narzędzia.

Następnie utworzono wersję korygującą 1.0.1, która dodała zmiany mające na celu obejście problemów z wersją Pythona 3.8.4. Python zmienił logikę dotyczącą użycia „__setattr__” dla „obiektu” i „typu”, uniemożliwiając użycie go do modyfikowania klas pochodnych. Sprawdzanie błędów zostało również delegowane z metody „__setattr__”, dlatego należy odpowiednio zaktualizować typy wyjątków w niektórych kontrolach adekwatności.

Źródło: opennet.ru

Dodaj komentarz