Release von JPype 1.0, einer Bibliothek für den Zugriff auf Java-Klassen aus Python

Verfügbar Layer-Release JPype 1.0, das es ermöglicht, vollständigen Zugriff von Python-Anwendungen auf Klassenbibliotheken in Java zu organisieren. Mit JPype können spezifische Java-Bibliotheken aus Python verwendet werden, um hybride Anwendungen zu erstellen, die Code in Java und Python 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 Verwendung von gemeinsamem Speicher. Dieser Ansatz ermöglicht nicht nur eine gute Leistung, sondern bietet auch Zugang zu allen CPython- und Java-Bibliotheken. Der Code des Projekts wird unter der GPLv3-Lizenz bereitgestellt. unter der Apache 2.0-Lizenz.

Wesentliche Änderungen:

  • JChar wird als Rückgabedatentyp unterstützt. Um die Kompatibilität zu gewährleisten, erbt JChar von „str“ und implementiert eine implizite Umwandlung zu „int“. Daher bestehen die Prüfungen in Verträgen. Das bedeutet jedoch, dass es nicht mehr als numerischer Typ in Python angesehen wird, und daher ergibt isinstance(c, int) den Wert False, was mit den Regeln der Typumwandlung in Java übereinstimmt.
  • Ein Operator wurde eingeführt, um den Java-Typ Type@obj umzuwandeln (@ ist der Python-Operator für das innere Produkt, den es in Java nicht gibt).
  • Die Notation zur Erstellung von Java-Arrays wurde hinzugefügt. Type[s1][s2][s3] für Arrays mit fester Größe, Type[:][:][:] für Arrays, die später erstellt werden.
  • @FunctionalInterface ermöglicht die Erstellung von Java-Funktoren aus Python-Objekten mit __call__.
  • Veraltete JIterator wurden entfernt, die Verwendung von JException als Fabrik, get_default_jvm_path und jpype.reflect.
  • Standardmäßig findet keine Konvertierung von Java-Strings in Python-Strings statt.
  • Python hat '__int__' als veraltet erklärt, deshalb führen implizite Konversionen zwischen Ganzzahlen und Fließkomma-Typen zu einem TypeError.
  • Die Verwendung von JException wurde als veraltet erklärt. Um alle Ausnahmen abzufangen oder zu überprüfen, ob ein Objekt vom Typ einer Java-Ausnahme ist, verwenden Sie java.lang.Throwable.
  • Kaskadierende Ursachen von Java-Ausnahmen werden nun in den Python-Stack-Frames widergespiegelt.
  • Die Verwendung von JString wurde als veraltet erklärt. Um einen Java-String zu erstellen oder zu überprüfen, ob ein Objekt vom Typ Java-String ist, verwenden Sie java.lang.String.
  • In den Java-Klassen wurden die repr-Methoden aktualisiert.
  • java.util.List erfüllt die Verträge von collections.abc.Sequence und collections.abc.MutableSequence.
  • java.util.Collection erfüllt den Vertrag von collections.abc.Collection.
  • Java-Klassen sind geschlossen und werfen einen TypeError, wenn sie aus Python erweitert werden.
  • Die Verarbeitung von Control-C erfolgt jetzt sorgfältig. Frühere Versionen stürzen ab, wenn Java das Control-C-Signal verarbeitet, da sie Java während des Aufrufs beenden. Nun wird JPype eine InterruptedException erzeugen, wenn es aus Java zurückkehrt. Control-C wird große Java-Prozeduren nicht herauswerfen, wie es derzeit implementiert ist, da Java kein spezielles Mittel dafür hat.

Es wurde ein korrigierender Release 1.0.1 erstellt, der Änderungen enthält, um die Probleme mit der Veröffentlichung von Python 3.8.4 zu umgehen. Python hat die Logik bezüglich der Verwendung von „__setattr__“ für „object“ und „type“ geändert, wodurch deren Verwendung zur Modifikation abgeleiteter Klassen verhindert wird. Zudem wurde die Fehlerüberprüfung aus der Methode „__setattr__“ delegiert, sodass die Typen der Ausnahmen in einigen Validierungsprüfungen entsprechend aktualisiert werden müssen.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster