Реліз 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 буферів багатовимірних масивів. Багатомірні примітиви передають доступні лише для читання копії, створені всередині JVM з безперервною розкладкою C.

  • Усі внутрішні компоненти замінені на реалізації з CPython, а символи __javaclass__, __javavalue__ і __javaproxy__
    видалено. До всіх типів CPython, успадкованих від типів класу jpype, доданий виділений Java-слот. Всі приватні таблиці перенесені до CPython. Java-типи тепер повинні успадковуватись від метакласу JClass, який використовує слоти типів. Домішки для базових класів Python не допускаються. Типи Object, Proxy, Exception, Number та Array і успадковуються безпосередньо від внутрішніх реалізацій CPython.

  • Поліпшено трасування та обробка винятків.
  • Зрізи масивів (Array slices) тепер обробляються у вигляді уявлень, що підтримують зворотний запис оригіналу, такий як масив numpy. Для зрізів масивів забезпечено підтримку встановлення та отримання значення з кроком (slice(start, stop, step)).
  • У масивах реалізовано підтримку «__reversed__».
  • У Java-масивах забезпечена підтримка API memoryview і прибрана залежність від numpy передачі вмісту буфера.
  • Numpy тепер не є залежністю (extra) і передача пам'яті numpy доступна без компіляції з підтримкою numpy.
  • JInterface оформлений у вигляді мета-класу. Використовуйте isinstance(cls, JInterface), щоб перевірити інтерфейси.
  • У імпорті за умовчанням додані пропущені TLD "mil", "net" та "edu".
  • Під час запуску покращено повідомлення про помилки для UnsupportedClassVersion.
  • java.util.Map видає KeyError, якщо елемент не знайдено. Значення, які null, як і раніше, повертають None як і очікується. Використовуйте get(), якщо порожні ключі потрібно обробляти як None.
  • Видалено java.util.Collection, оскільки він дивно перевантажується між remove(Object) і remove(int) на List-ах. Використовуйте Java-метод remove() для доступу до оригінальної Java-поведінці, але приведення типу суворо рекомендується для керування навантаженням.
  • java.lang.IndexOutOfBoundsException тепер може бути спійманий за допомогою класу для виключень IndexError при доступі до елементів java.util.List.

Джерело: opennet.ru

Додати коментар або відгук