Rilascio di JPype 0.7.2, librerie per l'accesso alle classi Java da Python

A disposizione rilascio dello strato JPype 0.7.2, che consente alle applicazioni Python di avere pieno accesso alle librerie di classi nel linguaggio Java. Con JPype di Python, puoi utilizzare librerie specifiche di Java per creare applicazioni ibride che combinano codice Java e Python. A differenza di Jython, l'integrazione con Java si ottiene non creando una variante Python per la JVM, ma attraverso l'interazione a livello di entrambe le macchine virtuali utilizzando la memoria condivisa. L'approccio proposto consente non solo di ottenere buone prestazioni, ma fornisce anche l'accesso a tutte le librerie CPython e Java. Codice del progetto distribuito da concesso in licenza con Apache 2.0.

Principali modifiche:

  • Le eccezioni generate nel codice C++ e Java ora forniscono uno stack di eccezioni quando si verifica un'eccezione nel codice Python. Pertanto, per ottenere informazioni sullo stack delle eccezioni, non è più necessario chiamare stacktrace().
  • La velocità di risposta alla chiamata è stata triplicata.
  • Significativamente (per ordini di grandezza) aumento della velocità di trasmissione
    buffer numpy di array multidimensionali. Le primitive multidimensionali trasmettono copie di sola lettura create all'interno della JVM con un layout C contiguo.

  • Tutti gli interni esposti sono stati sostituiti con implementazioni CPython e i simboli __javaclass__, __javavalue__ e __javaproxy__
    cancellato. Uno slot Java dedicato è stato aggiunto a tutti i tipi CPython che ereditano dai tipi di classe jpype. Tutte le tabelle private sono state spostate su CPython. I tipi Java devono ora ereditare dalla metaclasse JClass, che utilizza gli slot di tipo. I mixin per le classi base Python non sono consentiti. I tipi sono Object, Proxy, Exception, Number e Array ed ereditano direttamente dalle implementazioni interne di CPython.

  • Tracciamento e gestione delle eccezioni migliorati.
  • Le sezioni dell'array vengono ora elaborate come visualizzazioni che supportano la riscrittura dell'originale, ad esempio un array Numpy. Per l'affettamento dell'array, viene fornito il supporto per l'impostazione e il recupero dei valori in passaggi (slice(start, stop, step)).
  • Gli array ora supportano "__reversed__".
  • Gli array Java ora supportano l'API memoryview e rimuovono la dipendenza da numpy per passare il contenuto del buffer.
  • Numpy non è più una dipendenza (extra) e il trasferimento di memoria a Numpy è disponibile senza compilare con il supporto Numpy.
  • JInterface è progettata come una meta classe. Utilizzare isinstance(cls, JInterface) per verificare la presenza di interfacce.
  • Aggiunti i TLD mancanti "mil", "net" e "edu" alle importazioni predefinite.
  • Messaggi di errore migliorati per UnsupportedClassVersion durante l'avvio.
  • java.util.Map ora lancia un KeyError se l'elemento non viene trovato. I valori nulli restituiscono comunque None come previsto. Usa get() se vuoi trattare le chiavi vuote come None.
  • Rimosso java.util.Collection poiché stranamente sovraccarica tra rimozione (Oggetto) e rimozione (int) negli elenchi. Utilizzare il metodo Java Remove() per accedere al comportamento Java nativo, ma il cast del tipo è fortemente consigliato per il controllo dell'overload.
  • java.lang.IndexOutOfBoundsException ora può essere rilevato utilizzando la classe di eccezione IndexError quando si accede agli elementi java.util.List.

Fonte: opennet.ru

Aggiungi un commento