Lanzamiento de JPype 0.7.2, bibliotecas para acceder a clases de Java desde Python

Disponible liberación de capa JType 0.7.2, que permite que las aplicaciones Python tengan acceso completo a las bibliotecas de clases en el lenguaje Java. Con JPype de Python, puede utilizar bibliotecas específicas de Java para crear aplicaciones híbridas que combinen código Java y Python. A diferencia de Jython, la integración con Java no se logra mediante la creación de una variante de Python para la JVM, sino mediante la interacción a nivel de ambas máquinas virtuales utilizando memoria compartida. El enfoque propuesto no sólo permite lograr un buen rendimiento, sino que también proporciona acceso a todas las bibliotecas de CPython y Java. Código de proyecto distribuido por licenciado bajo Apache 2.0.

Cambios importantes:

  • Las excepciones lanzadas en código C++ y Java ahora proporcionan una pila de excepciones cuando ocurre una excepción en el código Python. Por lo tanto, para obtener información sobre la pila de excepciones, ya no es necesario llamar a stacktrace().
  • La velocidad de devolución de llamadas se ha triplicado.
  • Aumento significativo (en órdenes de magnitud) de la velocidad de transmisión en
    numerosos buffers de matrices multidimensionales. Las primitivas multidimensionales pasan copias de solo lectura creadas dentro de la JVM con un diseño C contiguo.

  • Todos los componentes internos expuestos han sido reemplazados con implementaciones de CPython y los símbolos __javaclass__, __javavalue__ y __javaproxy__.
    eliminado. Se ha agregado una ranura Java dedicada 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 ranuras de tipos. No se permiten mixins para clases base de Python. Los tipos son Objeto, Proxy, Excepción, Número y Matriz y heredan directamente de las implementaciones internas de CPython.

  • Seguimiento mejorado y manejo de excepciones.
  • Los sectores de la matriz ahora se procesan como vistas que admiten la reescritura en el original, como una matriz numpy. Para el corte de matrices, se proporciona soporte para configurar y recuperar valores en pasos (corte (inicio, parada, paso)).
  • Las matrices ahora admiten "__reversed__".
  • Las matrices de Java ahora admiten la API de vista de memoria y eliminan la dependencia de numpy para pasar el contenido del búfer.
  • Numpy ya no es una dependencia (extra) y la transferencia de memoria a numpy está disponible sin compilar con soporte de numpy.
  • JInterface está diseñado como una metaclase. Utilice isinstance(cls, JInterface) para comprobar las interfaces.
  • Se agregaron los TLD faltantes "mil", "net" y "edu" a las importaciones predeterminadas.
  • Mensajes de error mejorados para UnsupportedClassVersion durante el inicio.
  • java.util.Map ahora arroja un KeyError si no se encuentra el elemento. Los valores nulos aún devuelven Ninguno como se esperaba. Utilice get() si desea tratar las claves vacías como Ninguna.
  • Se eliminó java.util.Collection porque extrañamente se sobrecarga entre remove(Object) y remove(int) en Listas. Utilice el método Java remove() para acceder al comportamiento nativo de Java, pero se recomienda encarecidamente la conversión de tipos para el control de sobrecarga.
  • java.lang.IndexOutOfBoundsException ahora se puede detectar utilizando la clase de excepción IndexError al acceder a elementos java.util.List.

Fuente: opennet.ru

Añadir un comentario