Release van JType 1.0, bibliotheken voor toegang tot Java-klassen vanuit Python

Beschikbaar loslaten van de laag JPype 1.0, waarmee Python-applicaties volledige toegang hebben tot klassenbibliotheken in de Java-taal. Met JPype van Python kunt u Java-specifieke bibliotheken gebruiken om hybride applicaties te maken die Java- en Python-code combineren. In tegenstelling tot Jython wordt integratie met Java niet bereikt door het creëren van een Python-variant voor de JVM, maar door interactie op het niveau van beide virtuele machines met behulp van gedeeld geheugen. De voorgestelde aanpak maakt niet alleen goede prestaties mogelijk, maar biedt ook toegang tot alle CPython- en Java-bibliotheken. Projectcode gedistribueerd door gelicentieerd onder Apache 2.0.

Grote veranderingen:

  • JChar wordt ondersteund als retourtype. Voor compatibiliteit erft JChar van "str" ​​​​en implementeert een impliciete conversie naar "int". Daarom passeert het controles in contracten. Maar dit betekent dat het in Python niet langer als een numeriek type wordt beschouwd en daarom evalueert isinstance(c, int) False, wat consistent is met de conversieregels voor het Java-type.
  • Er is een operator geïntroduceerd om een ​​Java-type te casten, Type@obj (@ is een Python-operator voor inproduct; Java heeft er geen).
  • Notatie toegevoegd voor het maken van Java-arrays. Type[s1][s2][s3] voor arrays met een vaste grootte, Type[:][:][:] voor arrays die later worden gemaakt.
  • Met @FunctionalInterface kunt u Java-functors maken van Python-objecten met __call__.
  • Verouderde JIterator verwijderd, gebruik van JException als fabriek, get_default_jvm_path en jpype.reflect.
  • Standaard worden Java-tekenreeksen niet geconverteerd naar Python-tekenreeksen.
  • Python heeft "__int__" verouderd, dus impliciete casts tussen integer- en floating-point-typen zullen een TypeError opleveren.
  • Het gebruik van JException is verouderd. Om alle uitzonderingen op te vangen, of om te controleren of een object een Java-uitzonderingstype is, gebruikt u java.lang.Throwable.
  • Trapsgewijze oorzaken van Java-uitzonderingen worden nu weerspiegeld in Python-stackframes.
  • JString is verouderd. Om een ​​Java-string te maken, of om te controleren of een object van het type Java-string is, gebruik je java.lang.String.
  • Repr-methoden zijn bijgewerkt in Java-klassen.
  • java.util.List voert contracten uit voor collections.abc.Sequence en collections.abc.MutableSequence.
  • java.util.Collection voert het contract uit voor collections.abc.Collection.
  • Java-klassen zijn privé en genereren TypeError wanneer ze worden uitgebreid vanuit Python.
  • Ga voorzichtig om met de Control-C. Eerdere versies crashen wanneer Java een Control-C-signaal verwerkt, omdat ze Java tijdens de oproep beëindigen. JPype zal nu een InterruptedException genereren bij terugkeer uit Java. Control-C zal de grote Java-procedures zoals die momenteel worden geïmplementeerd niet weggooien, aangezien Java hiervoor geen speciaal hulpmiddel heeft.

Vervolgens werd een corrigerende release 1.0.1 gemaakt, waarin wijzigingen werden toegevoegd om problemen met de Python 3.8.4-release te omzeilen. Python heeft de logica veranderd met betrekking tot het gebruik van "__setattr__" voor "object" en "type", waardoor wordt voorkomen dat het wordt gebruikt om afgeleide klassen te wijzigen. Foutcontrole is ook gedelegeerd vanuit de "__setattr__"-methode, dus de uitzonderingstypen in sommige adequaatheidscontroles moeten dienovereenkomstig worden bijgewerkt.

Bron: opennet.ru

Voeg een reactie