utgivelse av laget , som gir full tilgang til Python-applikasjoner for Java-biblioteker. Med JPype kan Python bruke Java-spesifikke biblioteker, og lage hybride applikasjoner som kombinerer kode fra Java og Python. I motsetning til Jython oppnås integrasjon med Java ikke ved å lage en versjon av Python for JVM, men ved interaksjon på nivået til begge virtuelle maskiner, med delt minne. Den foreslåtte tilnærmingen gjør det mulig å oppnå god ytelse og gir tilgang til alle CPython- og Java-biblioteker. Koden for prosjektet under Apache 2.0-lisensen.
Hovedendringer:
- JChar støttes som returtype. For kompatibilitet er JChar arvet fra «str» og implementerer implisitt konvertering til «int». Derfor går det gjennom sjekker i kontrakter. Men dette betyr at det ikke lenger blir betraktet som en numerisk type i Python, og derfor vil isinstance(c, int) være False, noe som er i samsvar med typekonverteringsreglene i Java.
- Det er innført en operator for å tilpasse Java-typen Type@obj (@ er Python-operatoren for indre produkt, som ikke finnes i Java).
- Notasjon for å opprette Java-arrays er lagt til. Type[s1][s2][s3] for faste størrelser, Type[:][:][:] for arrays som skal opprettes senere.
- @FunctionalInterface gjør det mulig å lage Java-funktorer fra Python-objekter med __call__.
- Utdaterte JIterator, bruken av JException som fabrikk, get_default_jvm_path og jpype.reflect er fjernet.
- Som standard konverteres ikke Java-strenger til Python-strenger.
- Python har erklært «__int__» som ikke anbefalt, derfor vil implisitte konverteringer mellom heltall og flyttall resultere i TypeError.
- Bruken av JException er erklært utdaterte. For å fange alle unntak, eller for å sjekke at et objekt er en Java-unntakstype, bør man bruke java.lang.Throwable.
- Kaskadeårsaker fra Java-unntak gjenspeiles nå i Python-stakkspor.
- Bruken av JString er erklært utdaterte. For å lage en Java-streng, eller for å sjekke at et objekt har Java-strengtype, bruk java.lang.String.
- repr-metoder er oppdatert i Java-klasser.
- java.util.List implementerer kontrakter for collections.abc.Sequence og collections.abc.MutableSequence.
- java.util.Collection oppfyller kontrakten for collections.abc.Collection.
- Java-klasser er lukket og vil kaste TypeError ved utvidelse fra Python.
- Behandling av Control-C er nå mer presis. Tidligere versjoner krasjet når Java håndterte Control-C-signalet, da de ville avslutte Java under anropet. Nå vil JPype opprette en InterruptedException når den returnerer fra Java. Control-C vil ikke avbryte store Java-prosedyrer, som implementert i dag, ettersom Java ikke har noen spesiell mekanisme for dette.
En korrektiv utgivelse 1.0.1 er nå tilgjengelig, med endringer for å omgå problemene med utgivelsen av Python 3.8.4. Python endret logikken angående bruken av «__setattr__» for «object» og «type», og forhindret dens bruk for å endre avledede klasser. Feilsjekking ble også delegert fra metoden «__setattr__», så unntakstyper i noen datavalideringskontroller må oppdateres deretter.
Kilde: opennet.ru
