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:
- JChar se soporta como tipo de retorno. Para garantizar la compatibilidad, JChar hereda de «str» y realiza una conversión implícita a «int». Por lo tanto, supera las verificaciones en los contratos. Sin embargo, esto significa que ya no se considera un tipo numérico en Python y, por lo tanto, isinstance(c, int) da como resultado False, lo que está en línea con las reglas de conversión de tipos de Java.
- Se introdujo un operador para convertir el tipo Java Type@obj (@ es el operador de Python para el producto interno, que no existe en Java).
- Se añadió una notación para crear arreglos de Java. Type[s1][s2][s3] para arreglos de tamaño fijo, Type[:][:][:] para arreglos que serán creados más tarde.
- @FunctionalInterface permite crear funtores de Java a partir de objetos de Python con __call__.
- Se eliminaron los obsoletos JIterator, el uso de JException como fábrica, get_default_jvm_path y jpype.reflect.
- Por defecto, no se realiza la conversión de cadenas de Java a cadenas de Python.
- Python ha declarado obsoleto «__int__», por lo que las conversiones implícitas entre tipos enteros y de punto flotante generarán TypeError.
- Se ha declarado obsoleto el uso de JException. Para atrapar todas las excepciones o verificar que un objeto sea del tipo de excepción de Java, se debe usar java.lang.Throwable.
- Las causas en cascada de las excepciones de Java ahora se reflejan en las pilas de llamadas de Python.
- Se ha declarado obsoleto el uso de JString. Para crear una cadena de Java o verificar que un objeto sea del tipo de cadena de Java, utilice java.lang.String.
- Se actualizaron los métodos repr en las clases de Java.
- java.util.List cumple con los contratos para collections.abc.Sequence y collections.abc.MutableSequence.
- java.util.Collection cumple con el contrato para collections.abc.Collection.
- Las clases de Java están cerradas y generarán TypeError al intentar extender desde Python.
- El manejo de Control-C se realiza de manera cuidadosa. Las versiones anteriores fallaban cuando Java manejaba la señal Control-C, ya que finalizarían Java durante la llamada. Ahora JPype generará InterruptedException al regresar de Java. Control-C no interrumpirá grandes procedimientos de Java, como se implementa ahora, ya que Java no tiene un medio especial para esto.
Se ha generado una versión de corrección 1.0.1, que incluye cambios para evitar problemas con el lanzamiento de Python 3.8.4. Python ha modificado la lógica sobre el uso de «__setattr__» para «object» y «type», lo que impide su uso para modificar las clases derivadas. Además, la verificación de errores se ha delegado del método «__setattr__», por lo que los tipos de excepciones en algunas comprobaciones de adecuación deben actualizarse en consecuencia.
Fuente: opennet.ru
