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