JPype 1.0:n julkaisu, kirjastot Java-luokkien käyttämiseen Pythonista

Saatavilla kerroksen vapauttaminen JPype 1.0, jonka avulla Python-sovelluksilla on täysi pääsy Java-kielisten luokkakirjastoihin. Pythonin JPypen avulla voit käyttää Java-spesifisiä kirjastoja luodaksesi hybridisovelluksia, jotka yhdistävät Java- ja Python-koodin. Toisin kuin Jython, integraatio Javaan ei tapahdu luomalla Python-variantti JVM:lle, vaan vuorovaikutuksella molempien virtuaalikoneiden tasolla jaetun muistin avulla. Ehdotettu lähestymistapa ei mahdollista vain hyvän suorituskyvyn saavuttamista, vaan tarjoaa myös pääsyn kaikkiin CPython- ja Java-kirjastoihin. Projektin koodi jakelija lisensoitu Apache 2.0:lla.

Suurimmat muutokset:

  • JChar on tuettu palautustyyppinä. Yhteensopivuuden vuoksi JChar perii "str":n ja toteuttaa implisiittisen muunnoksen "int":ksi. Siksi se läpäisee sopimusten tarkastukset. Mutta tämä tarkoittaa, että sitä ei enää pidetä numeerisena tyyppinä Pythonissa, ja siksi isinstance(c, int) laskee arvoksi False, mikä on yhdenmukainen Java-tyypin muunnossääntöjen kanssa.
  • On otettu käyttöön operaattori, joka lähettää Java-tyypin, Type@obj (@ on Python-operaattori sisätuotteelle; Javalla ei ole sellaista).
  • Lisätty merkintä Java-taulukoiden luomiseen. Kirjoita [s1][s2][s3] kiinteäkokoisille taulukoille, kirjoita [:][:][:] myöhemmin luoville taulukoille.
  • @FunctionalInterface antaa sinun luoda Java-funktioita Python-objekteista komennolla __call__.
  • Poistettu vanhentunut JIterator, JExceptionin käyttö tehtaana, get_default_jvm_path ja jpype.reflect.
  • Oletusarvoisesti Java-merkkijonoja ei muunneta Python-merkkijonoiksi.
  • Python on poistanut käytöstä "__int__", joten implisiittiset heitot kokonaisluku- ja liukulukutyyppien välillä aiheuttavat TypeError-virheen.
  • JExceptionin käyttö on vanhentunut. Jos haluat kiinnittää kaikki poikkeukset tai tarkistaa, että objekti on Java-poikkeustyyppi, käytä java.lang.Throwablea.
  • Java-poikkeuksien peräkkäiset syyt näkyvät nyt Python-pinokehydessä.
  • JString on vanhentunut. Voit luoda Java-merkkijonon tai tarkistaa, että objekti on Java-merkkijonotyyppiä käyttämällä java.lang.String.
  • Repr-menetelmiä on päivitetty Java-luokissa.
  • java.util.List suorittaa sopimukset collections.abc.Sequence ja collections.abc.MutableSequence.
  • java.util.Collection toteuttaa collections.abc.Collection-sopimuksen.
  • Java-luokat ovat yksityisiä ja aiheuttavat TypeErrorin, kun niitä laajennetaan Pythonista.
  • Käsittele Control-C:tä varovasti. Aiemmat versiot kaatuvat, kun Java käsittelee Control-C-signaalia, koska ne lopettavat Javan puhelun aikana. JPype antaa nyt InterruptedExceptionin palatessaan Javasta. Control-C ei hävitä suuria Java-proseduureja tällä hetkellä toteutettuna, koska Javalla ei ole tähän erityistä työkalua.

Seuraavaksi luotiin korjaava julkaisu 1.0.1, joka lisäsi muutoksia Python 3.8.4 -julkaisun ongelmien kiertämiseen. Python on muuttanut logiikkaa koskien "__setattr__":n käyttöä "objektille" ja "tyypille", mikä estää sen käyttämisen johdettujen luokkien muokkaamiseen. Virheentarkistus on myös delegoitu "__setattr__"-menetelmästä, joten joidenkin riittävyystarkistusten poikkeustyypit tulisi päivittää vastaavasti.

Lähde: opennet.ru

Lisää kommentti