JPype 0.7.2-ის გამოშვება, ბიბლიოთეკები Python-დან Java კლასებზე წვდომისთვის

ხელმისაწვდომია შუალედური გათავისუფლება JPype 0.7.2, რომელიც საშუალებას გაძლევთ მოაწყოთ Python აპლიკაციების სრული წვდომა Java კლასის ბიბლიოთეკებზე. Python-ის JPype-ით შეგიძლიათ გამოიყენოთ Java-სპეციფიკური ბიბლიოთეკები, რათა შექმნათ ჰიბრიდული აპლიკაციები, რომლებიც აერთიანებს Java და Python კოდებს. Jython-ისგან განსხვავებით, Java-სთან ინტეგრაცია მიიღწევა არა 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

ახალი კომენტარის დამატება