rilascio del modulo , 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 sotto licenza Apache 2.0.
Principali modifiche:
- Le eccezioni sollevate nel codice C++ e Java ora offrono uno stack di eccezioni quando si verifica un'eccezione nel codice Python. Pertanto, non è più necessario chiamare stacktrace() per ottenere informazioni sullo stack delle eccezioni.
- La velocità di ritorno nelle chiamate è stata triplicata.
- È stata significativamente (di ordini di grandezza) incrementata la velocità di trasferimento in
buffer numpy di array multidimensionali. I primitivi multidimensionali trasferiscono copie di sola lettura, create all'interno della JVM con disposizione continua in C. - Tutti i componenti interni esposti sono stati sostituiti con implementazioni di CPython, e i simboli __javaclass__, __javavalue__ e __javaproxy__
sono stati rimossi. A tutti i tipi di CPython, ereditati dai tipi di classe jpype, è stato aggiunto uno slot Java dedicato. Tutte le tabelle private sono state trasferite in CPython. I tipi Java ora devono ereditare dalla metaclasse JClass, che utilizza slot di tipo. Le mescolanze per le classi base Python non sono ammesse. I tipi Object, Proxy, Exception, Number e Array ereditano direttamente dalle implementazioni interne di CPython. - Il tracciamento e la gestione delle eccezioni sono stati migliorati.
- Gli array slices ora vengono gestiti come visualizzazioni che supportano la scrittura inversa nell'originale, come l'array numpy. Per gli array slices è supportata la possibilità di impostare e ottenere valori con passo (slice(start, stop, step)).
- Nei array è stata implementata la supporto per '__reversed__'.
- Negli array Java è stato fornito il supporto per l'API memoryview e rimossa la dipendenza da numpy per la trasmissione del contenuto del buffer.
- Numpy non è più una dipendenza (extra) e la trasmissione della memoria a numpy è disponibile senza compilazione con il supporto per numpy.
- JInterface è stato progettato come metaclasse. Utilizzare isinstance(cls, JInterface) per il controllo delle interfacce.
- Le TLD «mil», «net» e «edu» mancanti sono stati aggiunti negli import predefiniti.
- Durante l'avvio sono stati migliorati i messaggi di errore per UnsupportedClassVersion.
- java.util.Map ora restituisce KeyError se l'elemento non viene trovato. I valori null continuano a restituire None come previsto. Utilizzare get() se le chiavi vuote devono essere gestite come None.
- java.util.Collection è stato rimosso poiché sovraccarica in modo strano remove(Object) e remove(int) su List. Utilizzare il metodo remove() di Java per accedere al comportamento originale di Java, ma il casting è fortemente raccomandato per gestire il sovraccarico.
- java.lang.IndexOutOfBoundsException ora può essere catturato utilizzando la classe per le eccezioni IndexError durante l'accesso agli elementi di java.util.List.
Fonte: opennet.ru
