rilascio dello strato , 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 sotto licenza Apache 2.0.
Variazioni principali:
- Le eccezioni sollevate in 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 da ora non è più necessario chiamare stacktrace().
- La velocità di ritorno nelle chiamate è aumentata di tre volte.
- La velocità di trasferimento in modo sostanziale (di ordini di grandezza) è aumentata
nelle buffer numpy degli array multidimensionali. I primitivi multidimensionali trasmettono copie di sola lettura, create all'interno della JVM con layout C continuo. - Tutti i componenti interni esposti sono stati sostituiti con implementazioni da CPython, e i simboli __javaclass__, __javavalue__ e __javaproxy__
sono stati rimossi. A tutti i tipi CPython ereditati dai tipi di classe jpype è stato aggiunto uno slot Java dedicato. Tutte le tabelle private sono state trasferite a CPython. I tipi Java ora devono essere ereditati dalla metaclasse JClass, che utilizza slot di tipo. Le miscelazioni per le classi base di Python non sono consentite. I tipi Object, Proxy, Exception, Number e Array sono ereditati direttamente dalle implementazioni interne di CPython. - È stato migliorato il tracciamento e la gestione delle eccezioni.
- Le fette di array vengono ora gestite come visioni, supportando la scrittura inversa nell'originale, come gli array numpy. Per le fette di array è stato fornito supporto per impostare e ottenere valori con passo (slice(start, stop, step)).
- Negli array è stato implementato il supporto per '__reversed__'.
- Negli array Java è stato fornito il supporto per l'API memoryview e rimossa la dipendenza da numpy per il trasferimento del contenuto del buffer.
- Numpy ora non è più una dipendenza (extra) e il trasferimento di memoria in numpy è disponibile senza compilazione con supporto per numpy.
- JInterface è stato reso disponibile come metaclasse. Utilizzare isinstance(cls, JInterface) per controllare le interfacce.
- Le importazioni predefinite sono state aggiunte ai TLD mancanti "mil", "net" e "edu".
- Durante il lancio, i messaggi di errore per UnsupportedClassVersion sono stati migliorati.
- java.util.Map ora restituisce KeyError se l'elemento non viene trovato. I valori che sono null continuano a restituire None come previsto. Usa get() se le chiavi vuote devono essere gestite come None.
- java.util.Collection è stato rimosso poiché era sovraccaricato in modo strano tra remove(Object) e remove(int) nelle liste. Usa il metodo Java remove() per accedere al comportamento originale di Java, ma il casting di tipo è fortemente raccomandato per gestire il sovraccarico.
- java.lang.IndexOutOfBoundsException ora può essere catturato tramite la classe di eccezione IndexError quando si accede agli elementi java.util.List.
Fonte: opennet.ru
