Wichtigste Änderungen:
- In C++- und Java-Code ausgelöste Ausnahmen stellen jetzt einen Ausnahmestapel bereit, wenn eine Ausnahme im Python-Code auftritt. Um Informationen über den Ausnahmestapel zu erhalten, müssen Sie daher nicht mehr stacktrace() aufrufen.
- Die Rückrufgeschwindigkeit wurde verdreifacht.
- Deutlich (um Größenordnungen) erhöhte Übertragungsgeschwindigkeit in
Numpy-Puffer mehrdimensionaler Arrays. Mehrdimensionale Grundelemente übergeben schreibgeschützte Kopien, die innerhalb der JVM mit einem zusammenhängenden C-Layout erstellt wurden. - Alle offengelegten Interna wurden durch CPython-Implementierungen ersetzt und die Symbole __javaclass__, __javavalue__ und __javaproxy__
gelöscht. Allen CPython-Typen, die von jpype-Klassentypen erben, wurde ein dedizierter Java-Slot hinzugefügt. Alle privaten Tabellen wurden nach CPython verschoben. Java-Typen müssen jetzt von der JClass-Metaklasse erben, die Typ-Slots verwendet. Mixins für Python-Basisklassen sind nicht zulässig. Die Typen sind Object, Proxy, Exception, Number und Array und erben direkt von den internen Implementierungen von CPython. - Verbesserte Nachverfolgung und Ausnahmebehandlung.
- Array-Slices werden jetzt als Ansichten verarbeitet, die das Zurückschreiben in das Original unterstützen, z. B. ein Numpy-Array. Beim Array-Slicing wird das Setzen und Abrufen von Werten in Schritten (Slice(Start, Stop, Schritt)) unterstützt.
- Arrays unterstützen jetzt „__reversed__“.
- Java-Arrays unterstützen jetzt die Memoryview-API und entfernen die Abhängigkeit von Numpy zur Übergabe des Pufferinhalts.
- Numpy ist keine Abhängigkeit mehr (extra) und die Speicherübertragung zu Numpy ist ohne Kompilierung mit Numpy-Unterstützung möglich.
- JInterface ist als Metaklasse konzipiert. Verwenden Sie isinstance(cls, JInterface), um nach Schnittstellen zu suchen.
- Fehlende TLDs „mil“, „net“ und „edu“ zu Standardimporten hinzugefügt.
- Verbesserte Fehlermeldungen für UnsupportedClassVersion beim Start.
- java.util.Map löst jetzt einen KeyError aus, wenn das Element nicht gefunden wird. Werte, die null sind, geben wie erwartet immer noch None zurück. Verwenden Sie get(), wenn Sie leere Schlüssel als „Keine“ behandeln möchten.
- Java.util.Collection wurde entfernt, da es bei Listen seltsamerweise zu einer Überlastung zwischen „remove(Object)“ und „remove(int)“ kommt. Verwenden Sie die Java-Methode „remove()“, um auf das native Java-Verhalten zuzugreifen. Für die Überlastungskontrolle wird jedoch dringend eine Typumwandlung empfohlen.
- java.lang.IndexOutOfBoundsException kann jetzt mithilfe der IndexError-Ausnahmeklasse beim Zugriff auf java.util.List-Elemente abgefangen werden.
Source: opennet.ru