Sortie de JPype 0.7.2, bibliothèques pour accéder aux classes Java depuis Python

Disponible libération de couche JPype 0.7.2, qui permet aux applications Python d'avoir un accès complet aux bibliothèques de classes du langage Java. Avec JPype de Python, vous pouvez utiliser des bibliothèques spécifiques à Java pour créer des applications hybrides combinant le code Java et Python. Contrairement à Jython, l'intégration avec Java se fait non pas par la création d'une variante Python pour la JVM, mais par l'interaction au niveau des deux machines virtuelles utilisant la mémoire partagée. L'approche proposée permet non seulement d'obtenir de bonnes performances, mais donne également accès à toutes les bibliothèques CPython et Java. Code de projet distribué par sous licence Apache 2.0.

Les principaux changements:

  • Les exceptions levées dans le code C++ et Java fournissent désormais une pile d'exceptions lorsqu'une exception se produit dans le code Python. Ainsi, pour obtenir des informations sur la pile d'exceptions, vous n'avez plus besoin d'appeler stacktrace().
  • La vitesse de retour d’appel a été triplée.
  • Augmentation significative (par ordres de grandeur) de la vitesse de transmission dans
    tampons numpy de tableaux multidimensionnels. Les primitives multidimensionnelles transmettent les copies en lecture seule créées dans la JVM avec une disposition C contiguë.

  • Tous les composants internes exposés ont été remplacés par des implémentations CPython et les symboles __javaclass__, __javavalue__ et __javaproxy__
    supprimé. Un emplacement Java dédié a été ajouté à tous les types CPython qui héritent des types de classe jpype. Toutes les tables privées ont été déplacées vers CPython. Les types Java doivent désormais hériter de la métaclasse JClass, qui utilise les emplacements de types. Les mixins pour les classes de base Python ne sont pas autorisés. Les types sont Object, Proxy, Exception, Number et Array et héritent directement des implémentations internes de CPython.

  • Suivi amélioré et gestion des exceptions.
  • Les tranches de tableau sont désormais traitées comme des vues prenant en charge la réécriture vers l'original, comme un tableau numpy. Pour le découpage de tableau, une prise en charge est fournie pour définir et récupérer les valeurs par étapes (slice(start, stop, step)).
  • Les tableaux prennent désormais en charge "__reversed__".
  • Les tableaux Java prennent désormais en charge l'API memoryview et suppriment la dépendance à numpy pour transmettre le contenu du tampon.
  • Numpy n'est plus une dépendance (extra) et le transfert de mémoire vers numpy est disponible sans compilation avec le support numpy.
  • JInterface est conçu comme une méta-classe. Utilisez isinstance(cls, JInterface) pour vérifier les interfaces.
  • Ajout des TLD manquants « mil », « net » et « edu » aux importations par défaut.
  • Messages d'erreur améliorés pour UnsupportedClassVersion lors du démarrage.
  • java.util.Map renvoie désormais une KeyError si l'élément n'est pas trouvé. Les valeurs nulles renvoient toujours None comme prévu. Utilisez get() si vous souhaitez traiter les clés vides comme Aucune.
  • Suppression de java.util.Collection car il surcharge étrangement entre Remove(Object) et Remove(int) sur les listes. Utilisez la méthode Java Remove() pour accéder au comportement Java natif, mais la conversion de type est fortement recommandée pour le contrôle des surcharges.
  • java.lang.IndexOutOfBoundsException peut désormais être intercepté à l'aide de la classe d'exception IndexError lors de l'accès aux éléments java.util.List.

Source: opennet.ru

Ajouter un commentaire