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

Dispoñible liberación de capas intermedias JPype 0.7.2, que lle permite organizar o acceso total das aplicacións Python ás bibliotecas de clases Java. Con JPype de Python, pode usar bibliotecas específicas de Java para crear aplicacións híbridas que combinen código Java e Python. A diferenza de Jython, a integración con Java conséguese non mediante a creación dunha variante de Python para a JVM, senón mediante a interacción a nivel de ambas máquinas virtuais mediante a memoria compartida. O enfoque proposto permite non só acadar un bo rendemento, senón que tamén proporciona acceso a todas as bibliotecas CPython e Java. Código do proxecto distribuído por licenciado baixo Apache 2.0.

Principais cambios:

  • As excepcións lanzadas no código C++ e Java agora proporcionan unha pila de excepcións cando se produce unha excepción no código Python. Así, para obter información sobre a pila de excepcións, xa non precisa chamar a stacktrace().
  • A velocidade de devolución da chamada triplicouse.
  • Aumentou significativamente (por ordes de magnitude) a velocidade de transmisión
    buffers numpy de matrices multidimensionais. As primitivas multidimensionais pasan copias de só lectura creadas dentro da JVM cun deseño C contiguo.

  • Todos os elementos internos expostos foron substituídos por implementacións de CPython e os símbolos __javaclass__, __javavalue__ e __javaproxy__
    eliminado. Engadiuse un slot Java dedicado a todos os tipos de CPython que herdan dos tipos de clase jpype. Todas as táboas privadas movéronse a CPython. Os tipos Java agora deben herdar da metaclase JClass, que usa ranuras de tipos. Non se permiten mixins para as clases base de Python. Os tipos son Object, Proxy, Exception, Number e Array e herdan directamente das implementacións internas de CPython.

  • Rastrexo mellorado e manexo de excepcións.
  • As porcións de matriz agora procesanse como vistas que admiten a escritura de volta ao orixinal, como unha matriz numpy. Para o corte de matrices, ofrécese soporte para establecer e recuperar valores en pasos (porción (inicio, parada, paso)).
  • As matrices agora admiten "__reversed__".
  • As matrices de Java agora admiten a API de memoryview e eliminan a dependencia de numpy para pasar o contido do búfer.
  • Numpy xa non é unha dependencia (extra) e a transferencia de memoria a numpy está dispoñible sen compilar co soporte numpy.
  • JInterface está deseñada como unha metaclase. Use isinstance (cls, JInterface) para comprobar as interfaces.
  • Engadíronse os TLD que faltaban "mil", "net" e "edu" ás importacións predeterminadas.
  • Mensaxes de erro melloradas para UnsupportedClassVersion durante o inicio.
  • java.util.Map agora arroxa un KeyError se non se atopa o elemento. Os valores que son nulos aínda devolven Ningún como se esperaba. Use get() se quere tratar as claves baleiras como Ningunha.
  • Eliminouse java.util.Collection xa que estrañamente sobrecarga entre remove(Object) e remove(int) nas Listas. Use o método Java remove() para acceder ao comportamento nativo de Java, pero recoméndase encarecidamente a emisión de tipos para controlar a sobrecarga.
  • Agora pódese detectar java.lang.IndexOutOfBoundsException usando a clase de excepción IndexError ao acceder aos elementos java.util.List.

Fonte: opennet.ru

Engadir un comentario