lanzamiento de la capa intermedia , que permite un acceso completo de aplicaciones Python a bibliotecas de clases en lenguaje Java. Con JPype, se pueden usar bibliotecas específicas de Java desde Python, creando aplicaciones híbridas que combinan código en Java y Python. A diferencia de Jython, la integración con Java no se logra a través de la creación de una versión de Python para la JVM, sino mediante la interacción a nivel de ambas máquinas virtuales, utilizando memoria compartida. Este enfoque no solo permite lograr un buen rendimiento, sino que también proporciona acceso a todas las bibliotecas de CPython y Java. Código del proyecto bajo la licencia Apache 2.0.
Principales cambios:
- Las excepciones lanzadas en el código de C++ y Java ahora proporcionan una traza de excepciones cuando se produce una excepción en el código de Python. Por lo tanto, para obtener información sobre la traza de excepciones, ya no es necesario llamar a stacktrace().
- La velocidad de retorno en las llamadas se ha triplicado.
- Se ha incrementado significativamente (en órdenes de magnitud) la velocidad de transmisión en
buffers de numpy de arreglos multidimensionales. Los primitivos multidimensionales transmiten copias de solo lectura, creadas dentro de la JVM con un diseño continuo de C. - Todos los componentes internos expuestos han sido reemplazados por implementaciones de CPython, y los símbolos __javaclass__, __javavalue__ y __javaproxy__
han sido eliminados. Se ha añadido un espacio de Java dedicado a todos los tipos de CPython que heredan de los tipos de clase jpype. Todas las tablas privadas se han trasladado a CPython. Los tipos de Java ahora deben heredar de la metaclase JClass, que utiliza espacios de tipos. Las combinaciones para las clases base de Python no son permitidas. Los tipos Object, Proxy, Exception, Number y Array se heredan directamente de las implementaciones internas de CPython. - Se ha mejorado la trazabilidad y el manejo de excepciones.
- Los slices de arreglos ahora se manejan como vistas que permiten la escritura inversa en el original, como un arreglo numpy. Para los slices de arreglos se ha proporcionado soporte para establecer y obtener valores con paso (slice(start, stop, step)).
- Se ha implementado soporte para '__reversed__' en arreglos.
- En los arreglos de Java, se ha proporcionado soporte para la API memoryview y se ha eliminado la dependencia de numpy para la transmisión del contenido del buffer.
- Numpy ya no es una dependencia (extra) y la transmisión de memoria a numpy está disponible sin compilación con soporte para numpy.
- JInterface se ha presentado como una metaclase. Utilice isinstance(cls, JInterface) para verificar interfaces.
- Se han añadido dominios de nivel superior faltantes como TLD a las importaciones por defecto: 'mil', 'net' y 'edu'.
- Durante el inicio se han mejorado los mensajes de error para UnsupportedClassVersion.
- java.util.Map ahora genera KeyError si un elemento no se encuentra. Los valores que son null todavía devuelven None como se esperaba. Utilice get() si se requiere manejar claves vacías como None.
- Se ha eliminado java.util.Collection ya que tiene una sobrecarga extraña entre remove(Object) y remove(int) en List. Utilice el método Java remove() para acceder al comportamiento original de Java, pero se recomienda estrictamente el casting de tipos para gestionar la sobrecarga.
- java.lang.IndexOutOfBoundsException ahora se puede capturar utilizando la clase de excepciones IndexError al acceder a los elementos de java.util.List.
Fuente: opennet.ru
