Έκδοση JPype 0.7.2, βιβλιοθήκες για πρόσβαση σε κλάσεις Java από την Python

Διαθέσιμος απελευθέρωση στρώματος JPype 0.7.2, το οποίο επιτρέπει στις εφαρμογές Python να έχουν πλήρη πρόσβαση σε βιβλιοθήκες κλάσεων στη γλώσσα Java. Με το JPype από την Python, μπορείτε να χρησιμοποιήσετε βιβλιοθήκες ειδικά για Java για να δημιουργήσετε υβριδικές εφαρμογές που συνδυάζουν κώδικα Java και Python. Σε αντίθεση με την Jython, η ενοποίηση με την Java επιτυγχάνεται όχι μέσω της δημιουργίας μιας παραλλαγής Python για το JVM, αλλά μέσω της αλληλεπίδρασης στο επίπεδο και των δύο εικονικών μηχανών που χρησιμοποιούν κοινόχρηστη μνήμη. Η προτεινόμενη προσέγγιση επιτρέπει όχι μόνο την επίτευξη καλής απόδοσης, αλλά παρέχει επίσης πρόσβαση σε όλες τις βιβλιοθήκες CPython και Java. Κωδικός έργου διανέμονται από άδεια σύμφωνα με το Apache 2.0.

Βασικές αλλαγές:

  • Οι εξαιρέσεις που περιλαμβάνονται σε κώδικα C++ και Java παρέχουν τώρα μια στοίβα εξαίρεσης όταν εμφανίζεται μια εξαίρεση στον κώδικα Python. Έτσι, για να λάβετε πληροφορίες σχετικά με τη στοίβα εξαίρεσης, δεν χρειάζεται πλέον να καλέσετε τη stacktrace().
  • Η ταχύτητα επιστροφής κλήσεων έχει τριπλασιαστεί.
  • Σημαντικά (κατά τάξεις μεγέθους) αυξήθηκε η ταχύτητα μετάδοσης στο
    numpy buffer πολυδιάστατων πινάκων. Τα πολυδιάστατα primitives περνούν αντίγραφα μόνο για ανάγνωση που δημιουργούνται μέσα στο JVM με συνεχόμενη διάταξη C.

  • Όλα τα εκτεθειμένα εσωτερικά έχουν αντικατασταθεί με υλοποιήσεις CPython και τα σύμβολα __javaclass__, __javavalue__ και __javaproxy__
    διαγράφηκε. Μια αποκλειστική υποδοχή Java έχει προστεθεί σε όλους τους τύπους CPython που κληρονομούν από τύπους κλάσεων jpype. Όλοι οι ιδιωτικοί πίνακες έχουν μετακινηθεί στο CPython. Οι τύποι Java πρέπει τώρα να κληρονομηθούν από τη μετακλάση JClass, η οποία χρησιμοποιεί υποδοχές τύπου. Δεν επιτρέπονται μίξεις για βασικές κλάσεις Python. Οι τύποι είναι Object, Proxy, Exception, Number και Array και κληρονομούνται απευθείας από τις εσωτερικές υλοποιήσεις του CPython.

  • Βελτιωμένη ανίχνευση και χειρισμός εξαιρέσεων.
  • Οι τομές πίνακα υποβάλλονται πλέον σε επεξεργασία ως προβολές που υποστηρίζουν την εγγραφή πίσω στο πρωτότυπο, όπως ένας πίνακας με άχρηστα στοιχεία. Για τον τεμαχισμό συστοιχιών, παρέχεται υποστήριξη για τη ρύθμιση και την ανάκτηση τιμών σε βήματα (slice(start, stop, step)).
  • Οι πίνακες υποστηρίζουν πλέον το "__reversed__".
  • Οι πίνακες Java υποστηρίζουν πλέον το memoryview API και αφαιρούν την εξάρτηση από το numpy για τη μετάδοση των περιεχομένων του buffer.
  • Το Numpy δεν είναι πλέον εξάρτηση (επιπλέον) και η μεταφορά μνήμης στο numpy είναι διαθέσιμη χωρίς μεταγλώττιση με υποστήριξη numpy.
  • Το JInterface έχει σχεδιαστεί ως μετα-κλάση. Χρησιμοποιήστε το isinstance(cls, JInterface) για να ελέγξετε για διεπαφές.
  • Προστέθηκαν τα TLD που λείπουν "mil", "net" και "edu" στις προεπιλεγμένες εισαγωγές.
  • Βελτιωμένα μηνύματα σφάλματος για UnsupportedClassVersion κατά την εκκίνηση.
  • Το java.util.Map εμφανίζει τώρα ένα KeyError εάν το στοιχείο δεν βρεθεί. Οι τιμές που είναι μηδενικές εξακολουθούν να επιστρέφουν Καμία όπως αναμένεται. Χρησιμοποιήστε το get() εάν θέλετε να αντιμετωπίζετε τα κενά κλειδιά ως Κανένα.
  • Καταργήθηκε το java.util.Collection καθώς παραδόξως υπερφορτώνεται μεταξύ remove(Object) και remove(int) στις λίστες. Χρησιμοποιήστε τη μέθοδο Java remove() για να αποκτήσετε πρόσβαση στη συμπεριφορά εγγενούς Java, αλλά συνιστάται ανεπιφύλακτα η μετάδοση τύπου για έλεγχο υπερφόρτωσης.
  • Το java.lang.IndexOutOfBoundsException μπορεί τώρα να συλληφθεί χρησιμοποιώντας την κλάση εξαίρεσης IndexError κατά την πρόσβαση σε στοιχεία java.util.List.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο