Lançamento do JPype 0.7.2, bibliotecas para acessar classes Java do Python

Disponível liberação de camada JPype 0.7.2, que permite que aplicativos Python tenham acesso total às bibliotecas de classes na linguagem Java. Com o JPype do Python, você pode usar bibliotecas específicas do Java para criar aplicativos híbridos que combinam código Java e Python. Ao contrário do Jython, a integração com Java não é alcançada através da criação de uma variante Python para a JVM, mas através da interação no nível de ambas as máquinas virtuais usando memória compartilhada. A abordagem proposta permite não apenas obter um bom desempenho, mas também fornece acesso a todas as bibliotecas CPython e Java. Código do projeto distribuído por licenciado sob Apache 2.0.

Grandes mudanças:

  • As exceções lançadas no código C++ e Java agora fornecem uma pilha de exceções quando ocorre uma exceção no código Python. Assim, para obter informações sobre a pilha de exceções, não é mais necessário chamar stacktrace().
  • A velocidade de retorno da chamada foi triplicada.
  • Aumento significativo (em ordens de grandeza) da velocidade de transmissão em
    buffers numpy de matrizes multidimensionais. As primitivas multidimensionais passam cópias somente leitura criadas dentro da JVM com um layout C contíguo.

  • Todos os componentes internos expostos foram substituídos por implementações CPython e os símbolos __javaclass__, __javavalue__ e __javaproxy__
    excluído. Um slot Java dedicado foi adicionado a todos os tipos CPython que herdam dos tipos de classe jpype. Todas as tabelas privadas foram movidas para CPython. Os tipos Java agora devem herdar da metaclasse JClass, que usa slots de tipo. Mixins para classes base do Python não são permitidos. Os tipos são Object, Proxy, Exception, Number e Array e herdam diretamente das implementações internas do CPython.

  • Rastreamento e tratamento de exceções aprimorados.
  • As fatias da matriz agora são processadas como visualizações que suportam a gravação no original, como uma matriz numpy. Para fatiamento de array, é fornecido suporte para configuração e recuperação de valores em etapas (slice(start, stop, step)).
  • Matrizes agora suportam "__reversed__".
  • Matrizes Java agora suportam a API memoryview e removem a dependência de numpy para passar o conteúdo do buffer.
  • Numpy não é mais uma dependência (extra) e a transferência de memória para numpy está disponível sem compilação com suporte numpy.
  • JInterface foi projetado como uma metaclasse. Use isinstance(cls, JInterface) para verificar interfaces.
  • Adicionados TLDs ausentes "mil", "net" e "edu" às importações padrão.
  • Mensagens de erro aprimoradas para UnsupportedClassVersion durante a inicialização.
  • java.util.Map agora lança um KeyError se o elemento não for encontrado. Valores nulos ainda retornam None conforme o esperado. Use get() se quiser tratar chaves vazias como None.
  • Removido java.util.Collection, pois sobrecarrega estranhamente entre remove(Object) e remove(int) em listas. Use o método Java remove() para acessar o comportamento nativo do Java, mas a conversão de tipo é altamente recomendada para controle de sobrecarga.
  • java.lang.IndexOutOfBoundsException agora pode ser capturado usando a classe de exceção IndexError ao acessar elementos java.util.List.

Fonte: opennet.ru

Adicionar um comentário