liberação de camada , que permite que aplicações Python acessem totalmente as bibliotecas de classes Java. Usando JPype, o Python pode aproveitar bibliotecas específicas do Java, criando aplicações híbridas que combinam código Java e Python. Diferentemente do Jython, a integração com Java não é feita criando uma instância Python para a JVM, mas sim por meio da interação entre as duas máquinas virtuais usando memória compartilhada. Essa abordagem não só garante bom desempenho, como também proporciona acesso a todas as bibliotecas CPython e Java. Código do projeto licenciado sob Apache 2.0.
Grandes mudanças:
- Exceções lançadas em código C++ e Java agora fornecem a pilha de exceções quando uma exceção ocorre em código Python. Isso significa que você não precisa mais chamar `stacktrace()` para obter informações sobre a pilha de exceções.
- A velocidade de retorno das chamadas foi triplicada.
- A velocidade de transmissão foi significativamente aumentada (em várias ordens de magnitude).
Buffers de matrizes multidimensionais do NumPy. Primitivas multidimensionais são passadas como 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__ foram removidos.
Removido. Um slot Java dedicado foi adicionado a todos os tipos CPython que herdam de tipos de classe jpype. Todas as tabelas privadas foram migradas para CPython. Os tipos Java agora devem herdar da metaclasse JClass, que usa slots de tipo. Mixins para classes base Python não são permitidos. Os tipos Object, Proxy, Exception, Number e Array herdam diretamente das implementações internas do CPython. - Rastreamento e tratamento de exceções aprimorados.
- Agora, as fatias de arrays são tratadas como representações que suportam a gravação de volta no original, como um array NumPy. As fatias de arrays agora suportam a definição e obtenção de valores em incrementos (slice(start, stop, step)).
- Os arrays agora suportam "__reversed__".
- Os arrays em Java agora suportam a API MemoryView e eliminam a dependência do NumPy para passar o conteúdo do buffer.
- O Numpy deixou de ser uma dependência extra e a transferência de memória para o Numpy está disponível sem a necessidade de compilar com suporte ao Numpy.
- JInterface é implementada como uma metaclasse. Use isinstance(cls, JInterface) para verificar se há interfaces.
- Os TLDs ausentes "mil", "net" e "edu" foram adicionados às importações padrão.
- Mensagens de erro aprimoradas para UnsupportedClassVersion durante a inicialização.
- java.util.Map agora lança um KeyError se um elemento não for encontrado. Valores nulos ainda retornam None, como esperado. Use get() se quiser tratar chaves vazias como None.
- Removemos java.util.Collection porque ela apresenta sobrecarga estranha entre remove(Object) e remove(int) em listas. Use o método remove() do Java para acessar o comportamento nativo do Java, mas a conversão de tipo (casting) é fortemente recomendada para lidar com a sobrecarga.
- Agora é possível capturar exceções java.lang.IndexOutOfBoundsException usando a classe para exceções IndexError ao acessar elementos de uma java.util.List.
Fonte: opennet.ru
