lançamento da camada , que permite acesso completo a bibliotecas de classes em Java a partir de aplicações Python. Com o JPype, é possível utilizar bibliotecas específicas de Java, criando aplicações híbridas que combinam código em Java e Python. Ao contrário do Jython, a integração com Java não é feita através da criação de uma versão do Python para a JVM, mas através de interação entre as duas máquinas virtuais, utilizando memória compartilhada. A abordagem proposta permite não apenas um bom desempenho, mas também acesso a todas as bibliotecas do CPython e do Java. O código do projeto estão sob a licença Apache 2.0.
Principais mudanças:
- JChar é suportado como um tipo retornado. Para compatibilidade, JChar é herdado de 'str' e realiza uma conversão implícita para 'int'. Portanto, ele passa por verificações em contratos. Mas isso significa que não é mais considerado um tipo numérico em Python e, portanto, isinstance(c, int) retorna False, em conformidade com as regras de conversão de tipos do Java.
- Um operador foi introduzido para conversão do tipo Java Type@obj (@ é o operador Python para o produto interno, que não existe em Java).
- Adicionada notação para criação de arrays Java. Type[s1][s2][s3] para arrays de tamanhos fixos, Type[:][:][:] para arrays que serão criados posteriormente.
- @FunctionalInterface permite a criação de funções Java a partir de objetos Python com __call__.
- Removidos JIterator obsoleto, uso de JException como fábrica, get_default_jvm_path e jpype.reflect.
- Por padrão, não ocorre conversão de strings Java para strings Python.
- Python desaconselhou o uso de '__int__', portanto, conversões implícitas entre tipos inteiros e de ponto flutuante resultarão em TypeError.
- O uso de JException foi declarado obsoleto. Para capturar todas as exceções, ou verificar se um objeto é do tipo de exceção Java, utilize java.lang.Throwable.
- As causas em cascata de exceções Java agora são refletidas nas pilhas de chamadas Python.
- O uso de JString foi declarado obsoleto. Para criar uma string Java, ou verificar se um objeto é do tipo string Java, utilize java.lang.String.
- Os métodos repr em classes Java foram atualizados.
- java.util.List cumpre os contratos para collections.abc.Sequence e collections.abc.MutableSequence.
- java.util.Collection cumpre o contrato para collections.abc.Collection.
- Classes Java estão definidas como fechadas e lançarão TypeError ao serem estendidas a partir do Python.
- O tratamento do Control-C foi aprimorado. Versões anteriores falhavam ao processar o sinal Control-C no Java, pois encerravam a execução durante a chamada. Agora, o JPype gerará uma InterruptedException ao retornar do Java. O Control-C não será mais descartado em grandes procedimentos Java, como atualmente implementado, pois o Java não possui um mecanismo especial para isso.
Em seguida, foi lançado um release corretivo 1.0.1, que incluiu alterações para contornar problemas com o release do Python 3.8.4. O Python alterou a lógica em relação ao uso de "__setattr__" para "object" e "type", impedindo seu uso para modificar classes herdadas. Além disso, a verificação de erros foi delegada do método "__setattr__", portanto, os tipos de exceções em algumas verificações de validade devem ser atualizados adequadamente.
Fonte: opennet.ru
