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

Do dyspozycji wydanie warstwy JPype 0.7.2, 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:

  • Wyjątki zgłoszone w kodzie C++ i Java zapewniają teraz stos wyjątków, gdy wystąpi wyjątek w kodzie Pythona. Zatem, aby uzyskać informacje o stosie wyjątków, nie trzeba już wywoływać funkcji stacktrace().
  • Szybkość zwrotów połączeń została trzykrotnie zwiększona.
  • Znacząco (o rzędy wielkości) zwiększona prędkość transmisji w
    bufory numpy tablic wielowymiarowych. Wielowymiarowe prymitywy przekazują kopie tylko do odczytu utworzone wewnątrz JVM z ciągłym układem C.

  • Wszystkie odsłonięte elementy wewnętrzne zostały zastąpione implementacjami CPython, a symbole __javaclass__, __javavalue__ i __javaproxy__
    usunięte. Do wszystkich typów CPython, które dziedziczą z typów klas jpype, dodano dedykowane gniazdo Java. Wszystkie tabele prywatne zostały przeniesione do CPython. Typy Java muszą teraz dziedziczyć z metaklasy JClass, która wykorzystuje gniazda typów. Mieszanki klas bazowych Pythona są niedozwolone. Typy to Obiekt, Proxy, Wyjątek, Numer i Array i dziedziczą bezpośrednio z wewnętrznych implementacji CPythona.

  • Ulepszone śledzenie i obsługa wyjątków.
  • Wycinki tablicy są teraz przetwarzane jako widoki obsługujące zapisywanie z powrotem do oryginału, na przykład tablica numpy. W przypadku dzielenia tablicy zapewniona jest obsługa ustawiania i pobierania wartości w krokach (slice(start, stop, step)).
  • Tablice obsługują teraz „__reverse__”.
  • Tablice Java obsługują teraz interfejs API memoryview i usuwają zależność od numpy w celu przekazania zawartości bufora.
  • Numpy nie jest już zależnością (dodatkową), a transfer pamięci do numpy jest dostępny bez kompilacji z obsługą numpy.
  • JInterface został zaprojektowany jako metaklasa. Użyj isinstance(cls, JInterface), aby sprawdzić interfejsy.
  • Dodano brakujące domeny TLD „mil”, „net” i „edu” do domyślnych importów.
  • Poprawione komunikaty o błędach dla UnsupportedClassVersion podczas uruchamiania.
  • Java.util.Map generuje teraz błąd KeyError, jeśli element nie zostanie znaleziony. Wartości null nadal zwracają None zgodnie z oczekiwaniami. Użyj get(), jeśli chcesz traktować puste klucze jako Brak.
  • Usunięto java.util.Collection, ponieważ w dziwny sposób przeciąża funkcję usuwania (obiektu) i usuwania (int) na listach. Użyj metody Java Remove(), aby uzyskać dostęp do natywnego zachowania Java, ale zdecydowanie zaleca się rzutowanie typów w celu kontroli przeciążenia.
  • Java.lang.IndexOutOfBoundsException można teraz przechwycić przy użyciu klasy wyjątku IndexError podczas uzyskiwania dostępu do elementów java.util.List.

Źródło: opennet.ru

Dodaj komentarz