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

Disponibile rilascio del modulo JPype 1.0, che permette l'accesso completo delle applicazioni Python alle librerie di classi Java. Con JPype, è possibile utilizzare le librerie specifiche di Java da Python, creando applicazioni ibride che combinano codice Java e Python. A differenza di Jython, l'integrazione con Java non avviene attraverso una variante di Python per la JVM, ma attraverso un'interazione a livello di entrambe le macchine virtuali, utilizzando la memoria condivisa. Questo approccio 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.

Principali modifiche:

  • JChar è supportato come tipo restituito. Per compatibilità, JChar è ereditato da 'str' e implementa una conversione implicita in 'int'. Pertanto, supera le verifiche nei contratti. Ma ciò 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 in Java.
  • È stato introdotto un operatore per convertire il tipo Java Type@obj (@ è l'operatore Python per il prodotto interno, non presente in Java).
  • Sono state aggiunte le annotazioni per creare 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__.
  • Rimossi JIterator obsoleti, l'uso di JException come fabbrica, get_default_jvm_path e jpype.reflect.
  • Per impostazione predefinita, non avviene la conversione delle stringhe Java in stringhe Python.
  • Python ha dichiarato deprecato '__int__', quindi le conversioni implicite tra tipi interi e a virgola mobile genereranno TypeError.
  • È stata dichiarata obsoleta l'uso di JException. Per catturare tutte le eccezioni o verificare che un oggetto sia di tipo eccezione Java, si deve usare java.lang.Throwable.
  • Le cause a cascata delle eccezioni Java sono ora riflesse nei frame dello stack Python.
  • L'uso di JString è stato dichiarato obsoleto. Per creare una stringa Java o verificare se un oggetto è di tipo stringa Java, utilizzare java.lang.String.
  • I metodi repr nelle classi Java sono stati aggiornati.
  • java.util.List implementa i 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 un TypeError se estese da Python.
  • Gestione accurata di Control-C. Le versioni precedenti andavano in crash quando Java gestiva il segnale Control-C, poiché terminavano Java durante la chiamata. Ora JPype genererà InterruptedException quando viene restituito da Java. Control-C non si interromperà durante grandi procedure Java, come attualmente implementato, poiché Java non ha un modo speciale per farlo.

È stata creata una nuova versione correttiva 1.0.1, che include aggiornamenti per risolvere problemi con il rilascio di Python 3.8.4. Python ha cambiato la logica relativa all'uso di «__setattr__» per «object» e «type», impedendo l'uso per modificare le classi derivate. Inoltre, il controllo degli errori è stato delegato dal metodo «__setattr__», quindi i tipi di eccezione in alcuni controlli di validità devono essere aggiornati di conseguenza.

Fonte: opennet.ru

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