Paglabas ng JPype 0.7.2, mga aklatan para sa pag-access ng mga klase ng Java mula sa Python

Magagamit pagpapalabas ng layer JPype 0.7.2, na nagpapahintulot sa mga application ng Python na magkaroon ng ganap na access sa mga library ng klase sa wikang Java. Sa JPype mula sa Python, maaari mong gamitin ang mga library na partikular sa Java upang lumikha ng mga hybrid na application na pinagsasama ang Java at Python code. Hindi tulad ng Jython, ang pagsasama sa Java ay nakakamit hindi sa pamamagitan ng paglikha ng variant ng Python para sa JVM, ngunit sa pamamagitan ng pakikipag-ugnayan sa antas ng parehong virtual machine gamit ang shared memory. Ang iminungkahing diskarte ay nagbibigay-daan hindi lamang upang makamit ang mahusay na pagganap, ngunit nagbibigay din ng access sa lahat ng CPython at Java library. Code ng proyekto ipinamahagi ni lisensyado sa ilalim ng Apache 2.0.

Pangunahing pagbabago:

  • Ang mga pagbubukod na itinapon sa C++ at Java code ay nagbibigay na ngayon ng exception stack kapag may naganap na exception sa Python code. Kaya, upang makakuha ng impormasyon tungkol sa exception stack, hindi mo na kailangang tumawag sa stacktrace().
  • Na-triple ang bilis ng pagbabalik ng tawag.
  • Makabuluhang tumaas (sa pamamagitan ng mga order ng magnitude) ang bilis ng paghahatid
    numpy buffer ng multidimensional arrays. Ang mga multidimensional na primitive ay nagpapasa ng mga read-only na kopya na ginawa sa loob ng JVM na may magkadikit na layout ng C.

  • Ang lahat ng nakalantad na internal ay pinalitan ng mga pagpapatupad ng CPython, at ang mga simbolo na __javaclass__, __javavalue__ at __javaproxy__
    tinanggal. Isang nakalaang Java slot ang naidagdag sa lahat ng uri ng CPython na nagmana mula sa mga uri ng klase ng jpype. Ang lahat ng mga pribadong mesa ay inilipat sa CPython. Ang mga uri ng Java ay dapat na ngayong magmana mula sa JClass metaclass, na gumagamit ng mga puwang ng uri. Mixin para sa Python base classes ay hindi pinapayagan. Ang mga uri ay Object, Proxy, Exception, Number at Array at direktang namamana mula sa mga panloob na pagpapatupad ng CPython.

  • Pinahusay na pagsubaybay at paghawak ng exception.
  • Ang mga hiwa ng array ay pinoproseso na ngayon bilang mga view na sumusuporta sa pagsusulat pabalik sa orihinal, tulad ng isang numpy array. Para sa array slicing, ibinibigay ang suporta para sa pagtatakda at pagkuha ng mga value sa mga hakbang (slice(start, stop, step)).
  • Sinusuportahan na ngayon ng mga array ang "__reversed__".
  • Sinusuportahan na ngayon ng mga array ng Java ang memoryview API at alisin ang dependency sa numpy upang maipasa ang mga nilalaman ng buffer.
  • Ang Numpy ay hindi na isang dependency (dagdag) at ang paglipat ng memorya sa numpy ay magagamit nang walang pag-compile na may numpy na suporta.
  • Ang JInterface ay idinisenyo bilang isang meta class. Gumamit ng isinstance(cls, JInterface) upang suriin ang mga interface.
  • Idinagdag ang mga nawawalang TLD na "mil", "net" at "edu" sa mga default na pag-import.
  • Mga pinahusay na mensahe ng error para sa UnsupportedClassVersion sa panahon ng startup.
  • Ang java.util.Map ay nagtatapon na ngayon ng KeyError kung hindi natagpuan ang elemento. Ang mga halaga na null ay bumabalik pa rin Wala gaya ng inaasahan. Gumamit ng get() kung gusto mong ituring ang mga walang laman na key bilang Wala.
  • Inalis ang java.util.Collection dahil kakaiba itong nag-overload sa pagitan ng remove(Object) at remove(int) sa Lists. Gamitin ang Java remove() na paraan upang ma-access ang katutubong pag-uugali ng Java, ngunit ang uri ng pag-cast ay lubos na inirerekomenda para sa overload na kontrol.
  • Ang java.lang.IndexOutOfBoundsException ay maaari na ngayong mahuli gamit ang klase ng pagbubukod ng IndexError kapag ina-access ang mga elemento ng java.util.List.

Pinagmulan: opennet.ru

Magdagdag ng komento