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

Beschikbaar loslaten van de laag JPype 0.7.2, 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:

  • Uitzonderingen die in C++- en Java-code worden gegenereerd, bieden nu een uitzonderingsstapel wanneer er een uitzondering optreedt in Python-code. Om informatie over de uitzonderingsstapel te verkrijgen, hoeft u dus niet langer stacktrace() aan te roepen.
  • De terugbelsnelheid is verdrievoudigd.
  • Aanzienlijk (in ordes van grootte) verhoogde transmissiesnelheid in
    numpy buffers van multidimensionale arrays. Multidimensionale primitieven geven alleen-lezen kopieën door die in de JVM zijn gemaakt met een aaneengesloten C-indeling.

  • Alle blootgestelde internals zijn vervangen door CPython-implementaties en de symbolen __javaclass__, __javavalue__ en __javaproxy__
    verwijderd. Er is een speciaal Java-slot toegevoegd aan alle CPython-typen die overerven van jpype-klassetypen. Alle privétafels zijn verplaatst naar CPython. Java-typen moeten nu overerven van de JClass-metaklasse, die typeslots gebruikt. Mixins voor Python-basisklassen zijn niet toegestaan. De typen zijn Object, Proxy, Exception, Number en Array en nemen rechtstreeks over van de interne implementaties van CPython.

  • Verbeterde tracering en afhandeling van uitzonderingen.
  • Array-plakken worden nu verwerkt als weergaven die het terugschrijven naar het origineel ondersteunen, zoals een numpy-array. Voor array slicing wordt ondersteuning geboden voor het stapsgewijs instellen en ophalen van waarden (slice(start, stop, step)).
  • Arrays ondersteunen nu "__reversed__".
  • Java-arrays ondersteunen nu de memoryview API en verwijderen de afhankelijkheid van numpy om de bufferinhoud door te geven.
  • Numpy is niet langer een afhankelijkheid (extra) en geheugenoverdracht naar numpy is beschikbaar zonder compileren met numpy-ondersteuning.
  • JInterface is ontworpen als een metaklasse. Gebruik isinstance(cls, JInterface) om te controleren op interfaces.
  • Ontbrekende TLD's "mil", "net" en "edu" toegevoegd aan standaardimporten.
  • Verbeterde foutmeldingen voor UnsupportedClassVersion tijdens het opstarten.
  • java.util.Map genereert nu een KeyError als het element niet wordt gevonden. Waarden die null zijn, retourneren nog steeds Geen zoals verwacht. Gebruik get() als u lege sleutels als Geen wilt behandelen.
  • Java.util.Collection verwijderd omdat het vreemd genoeg overbelast raakt tussen remove(Object) en remove(int) in lijsten. Gebruik de Java remove()-methode om toegang te krijgen tot native Java-gedrag, maar typecasting wordt sterk aanbevolen voor overbelastingsbeheersing.
  • java.lang.IndexOutOfBoundsException kan nu worden opgevangen met behulp van de uitzonderingsklasse IndexError bij toegang tot java.util.List-elementen.

Bron: opennet.ru

Voeg een reactie