Veröffentlichung von JPype 0.7.2, Bibliotheken für den Zugriff auf Java-Klassen aus Python

Verfügbar Schichtfreigabe JPype 0.7.2, wodurch Python-Anwendungen vollen Zugriff auf Klassenbibliotheken in der Java-Sprache haben. Mit JPype von Python können Sie Java-spezifische Bibliotheken verwenden, um Hybridanwendungen zu erstellen, die Java- und Python-Code kombinieren. Im Gegensatz zu Jython wird die Integration mit Java nicht durch die Erstellung einer Python-Variante für die JVM erreicht, sondern durch die Interaktion auf der Ebene beider virtueller Maschinen unter Nutzung des gemeinsamen Speichers. Der vorgeschlagene Ansatz ermöglicht nicht nur eine gute Leistung, sondern bietet auch Zugriff auf alle CPython- und Java-Bibliotheken. Projektnummer vertrieben von lizenziert unter Apache 2.0.

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

Kommentar hinzufügen