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 ganap na ma-access ang mga library ng klase ng Java. Gamit ang JPype, maaaring gamitin ng Python ang mga library na partikular sa Java, na lumilikha 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 isang halimbawa ng Python para sa JVM, ngunit sa pamamagitan ng pakikipag-ugnayan sa antas ng parehong virtual machine gamit ang shared memory. Ang diskarte na ito ay hindi lamang nakakamit ng 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. Nangangahulugan ito na hindi mo na kailangang tumawag sa stacktrace() upang makakuha ng exception stack na impormasyon.
  • Ang bilis ng pagbabalik para sa mga tawag ay nadagdagan ng tatlong beses.
  • Ang bilis ng paghahatid ay makabuluhang nadagdagan (sa pamamagitan ng mga order ng magnitude).
    NumPy multidimensional array buffer. 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 panloob na bahagi ay pinalitan ng mga pagpapatupad ng CPython, at ang mga simbolo na __javaclass__, __javavalue__, at __javaproxy__
    Inalis. 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 talahanayan 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 ng Object, Proxy, Exception, Number, at Array ay direktang namamana mula sa mga panloob na pagpapatupad ng CPython.
  • Pinahusay na pagsubaybay at paghawak ng exception.
  • Hinahawakan na ngayon ang mga hiwa ng array bilang mga representasyon na sumusuporta sa writeback sa orihinal, gaya ng array ng NumPy. Sinusuportahan na ngayon ng mga hiwa ng array ang pagtatakda at pagkuha ng mga halaga nang paunti-unti (hiwa-hiwain (simula, huminto, hakbang)).
  • Sinusuportahan na ngayon ng mga array ang "__reversed__".
  • Sinusuportahan na ngayon ng mga array ng Java ang memoryview API at inaalis ang dependency sa numpy para sa pagpasa ng mga nilalaman ng buffer.
  • Ang Numpy ay hindi na isang dagdag na dependency, at ang paglipat ng memory sa numpy ay magagamit nang walang pag-compile na may numpy na suporta.
  • Ang JInterface ay ipinatupad bilang isang meta-class. Gumamit ng isinstance(cls, JInterface) upang suriin ang mga interface.
  • Ang mga nawawalang TLD na "mil", "net" at "edu" ay naidagdag 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 ang isang elemento ay hindi nahanap. Ang mga null value ay nagbabalik pa rin ng 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 native na pag-uugali ng Java, ngunit ang pag-cast ay lubos na inirerekomenda upang pamahalaan ang labis na karga.
  • Ang java.lang.IndexOutOfBoundsException ay maaari na ngayong mahuli gamit ang klase para sa mga pagbubukod sa IndexError kapag ina-access ang mga elemento ng isang java.util.List.

Pinagmulan: opennet.ru