Rilascio di JPype 1.0, libreria per l'accesso a classi Java da Python

È disponibile rilascio dello strato JPype 1.0, che consente l'accesso completo delle applicazioni Python alle librerie di classi in Java. Grazie a JPype, da Python è possibile utilizzare librerie specifiche per Java, creando applicazioni ibride che combinano codice Java e Python. A differenza di Jython, l'integrazione con Java avviene non attraverso la creazione di una variante di Python per la JVM, ma attraverso l'interazione a livello di entrambe le macchine virtuali, utilizzando memoria condivisa. L'approccio proposto consente non solo di ottenere buone prestazioni, ma fornisce anche accesso a tutte le librerie CPython e Java. Il codice del progetto è distribuito sotto licenza Apache 2.0.

Variazioni principali:

  • JChar è supportato come tipo restituito. Per compatibilità, JChar è ereditato da «str» e implementa una conversione implicita in «int». Pertanto, supera i controlli nei contratti. Ma questo significa che non è più considerato un tipo numerico in Python e quindi isinstance(c, int) restituisce False, il che è coerente con le regole di conversione dei tipi Java.
  • È stato introdotto un operatore per la conversione del tipo Java Type@obj (@ è l'operatore Python per il prodotto interno, che non esiste in Java).
  • È stata aggiunta la notazione per la creazione di array Java. Type[s1][s2][s3] per array di dimensioni fisse, Type[:][:][:] per array che saranno creati in seguito.
  • @FunctionalInterface consente di creare funzioni Java da oggetti Python con __call__.
  • Sono stati rimossi JIterator obsoleti, l'uso di JException come fabbrica, get_default_jvm_path e jpype.reflect.
  • Di default, non avviene alcuna conversione da stringhe Java a stringhe Python.
  • Python ha deprecato «__int__», quindi le conversioni implicite tra tipi interi e a virgola mobile genereranno TypeError.
  • È stato deprecato l'uso di JException. Per catturare tutte le eccezioni, o per verificare se un oggetto è di tipo eccezione Java, utilizzare java.lang.Throwable.
  • Le cause a cascata delle eccezioni Java ora si riflettono nei frame dello stack Python.
  • È stato deprecato l'uso di JString. Per creare una stringa Java, o per verificare se un oggetto è di tipo stringa Java, usare java.lang.String.
  • Nei classi Java sono stati aggiornati i metodi repr.
  • java.util.List implementa contratti per collections.abc.Sequence e collections.abc.MutableSequence.
  • java.util.Collection implementa il contratto per collections.abc.Collection.
  • Le classi Java sono chiuse e genereranno TypeError se estese da Python.
  • Gestione delicata di Control-C. Le versioni precedenti si arrestavano quando Java gestiva il segnale Control-C, poiché terminavano Java durante la chiamata. Ora JPype genererà InterruptedException quando tornerà da Java. Control-C non interromperà procedure Java lunghe, come è implementato ora, poiché Java non ha un mezzo speciale per farlo.

Successivamente è stata creata una versione correttiva 1.0.1, nella quale sono state apportate modifiche per bypassare i problemi con il rilascio di Python 3.8.4. Python ha modificato la logica riguardo l'uso di "__setattr__" per "object" e "type", impedendone l'uso per modificare le classi derivate. Inoltre, il controllo degli errori è stato delegato dal metodo "__setattr__", quindi i tipi di eccezioni in alcune verifiche di adeguatezza devono essere aggiornati di conseguenza.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster