Wydanie JPype 0.7.2, biblioteki do uzyskiwania dostępu do klas Javy z Pythona

Dostępny warstwa wydania JPype 0.7.2, 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 rozpowszechniany na licencji Apache 2.0.

Główne zmiany:

  • Wyjątki rzucane w kodzie C++ i Javie teraz dostarczają stos wyjątków w przypadku wystąpienia wyjątku w kodzie Pythona. W ten sposób, aby uzyskać informacje o stosie wyjątków, nie trzeba już wywoływać stacktrace().
  • Prędkość powrotu przy wywołaniach zwiększyła się trzykrotnie.
  • Znacząco (w porządku wielkości) zwiększono prędkość przesyłania danych w
    buforach numpy dla tablic wielowymiarowych. Wielowymiarowe prymitywy przekazują dostępne tylko do odczytu kopie, stworzone wewnątrz JVM z ciągłym układem C.
  • Wszystkie wewnętrzne komponenty zostały zastąpione implementacjami z CPython, a symbole __javaclass__, __javavalue__ i __javaproxy__
    zostały usunięte. Do wszystkich typów CPython, dziedziczących od typów klasy jpype, dodano wydzielony slot Java. Wszystkie prywatne tabele zostały przeniesione do CPython. Typy Java teraz muszą dziedziczyć z metaklasy JClass, która używa slotów typów. Mieszaniny dla klas bazowych Pythona są niedopuszczalne. Typy Object, Proxy, Exception, Number oraz Array dziedziczą bezpośrednio od wewnętrznych implementacji CPython.
  • Ulepszono śledzenie i obsługę wyjątków.
  • Wycięcia tablic (Array slices) są teraz obsługiwane jako widoki, które wspierają zapis zwrotny do oryginału, takie jak tablica numpy. Dla wycięć tablic zapewniona jest obsługa ustawiania i pobierania wartości z krokiem (slice(start, stop, step)).
  • W tablicach zaimplementowano wsparcie dla „__reversed__”.
  • W tablicach Java zapewniono wsparcie dla API memoryview oraz usunięto zależność od numpy przy przesyłaniu zawartości bufora.
  • Numpy nie jest już zależnością (extra), a przesyłanie pamięci do numpy jest dostępne bez kompilacji z obsługą numpy.
  • JInterface jest sformatowane jako metaklasa. Użyj isinstance(cls, JInterface) do sprawdzenia interfejsów.
  • Do domyślnych importów dodano brakujące TLD „mil”, „net” i „edu”.
  • Podczas uruchamiania poprawiono komunikaty o błędach dla UnsupportedClassVersion.
  • java.util.Map teraz zgłasza KeyError, jeśli element nie zostanie znaleziony. Wartości, które są null, nadal zwracają None jak oczekiwano. Użyj get(), jeśli puste klucze mają być traktowane jako None.
  • Usunięto java.util.Collection, ponieważ dziwnie przeciąża się między remove(Object) a remove(int) na List-ach. Użyj metody Java remove() do uzyskania oryginalnego zachowania Java, ale rzutowanie typu jest zdecydowanie zalecane do zarządzania przeciążeniem.
  • java.lang.IndexOutOfBoundsException teraz może być przechwycona za pomocą klasy wyjątków IndexError podczas uzyskiwania dostępu do elementów java.util.List.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster