JPype 0.7.2-ի թողարկում, գրադարաններ Python-ից Java դասեր մուտք գործելու համար

Հասանելի է շերտի ազատում JPype 0.7.2, որը թույլ է տալիս կազմակերպել Python հավելվածների ամբողջական մուտքը Java դասի գրադարաններ։ Python-ից JPype-ի միջոցով դուք կարող եք օգտագործել Java-ին հատուկ գրադարաններ՝ ստեղծելու հիբրիդային հավելվածներ, որոնք համատեղում են Java և Python կոդը: Ի տարբերություն Jython-ի, Java-ի հետ ինտեգրումը ձեռք է բերվում ոչ թե JVM-ի համար Python տարբերակի ստեղծման միջոցով, այլ երկու վիրտուալ մեքենաների մակարդակով փոխազդեցության միջոցով՝ օգտագործելով ընդհանուր հիշողություն: Առաջարկվող մոտեցումը թույլ է տալիս ոչ միայն հասնել լավ կատարողականի, այլև ապահովում է մուտք դեպի բոլոր CPython և Java գրադարաններ: Ծրագրի կոդը տարածվում է լիցենզավորված Apache 2.0-ի համաձայն:

Խոշոր փոփոխություններ.

  • C++-ում և Java կոդի մեջ գցված բացառությունները այժմ ապահովում են բացառությունների կույտ, երբ բացառություն է տեղի ունենում Python կոդում: Այսպիսով, բացառությունների կույտի մասին տեղեկատվություն ստանալու համար այլևս կարիք չկա զանգահարել stacktrace():
  • Զանգի վերադարձի արագությունը եռապատկվել է.
  • Զգալիորեն (մեծության կարգերով) ավելացել է փոխանցման արագությունը
    Բազմաչափ զանգվածների անհարթ բուֆերներ: Բազմաչափ պրիմիտիվները փոխանցում են միայն կարդալու պատճեններ, որոնք ստեղծված են JVM-ի ներսում՝ հարակից C դասավորությամբ:

  • Բոլոր բացված ինտերնալները փոխարինվել են CPython իրականացումներով, և խորհրդանիշները __javaclass__, __javavalue__ և __javaproxy__
    ջնջված է։ Java-ի հատուկ բնիկ ավելացվել է բոլոր CPython տեսակներին, որոնք ժառանգում են jpype դասի տեսակներից: Բոլոր մասնավոր աղյուսակները տեղափոխվել են CPython: Java-ի տեսակներն այժմ պետք է ժառանգեն JClass metaclass-ից, որն օգտագործում է տիպի slots: Python-ի բազային դասերի միքսներն անթույլատրելի են: Տեսակներն են՝ Object, Proxy, Exception, Number և Array և ժառանգվում են անմիջապես CPython-ի ներքին իրականացումներից:

  • Բարելավված հետագծում և բացառությունների մշակում:
  • Զանգվածի հատվածներն այժմ մշակվում են որպես դիտումներ, որոնք աջակցում են վերադառնալ բնօրինակին, օրինակ՝ անփույթ զանգված: Զանգվածի կտրման համար աջակցություն է տրամադրվում արժեքները քայլերով սահմանելու և առբերելու համար (կտոր (սկիզբ, կանգառ, քայլ)):
  • Զանգվածներն այժմ աջակցում են «__reversed__»:
  • Java զանգվածներն այժմ աջակցում են memoryview API-ին և հեռացնում են numpy-ից կախվածությունը՝ բուֆերային բովանդակությունը փոխանցելու համար:
  • Numpy-ն այլևս կախվածություն չէ (լրացուցիչ), և հիշողության փոխանցումը numpy-ին հասանելի է առանց numpy աջակցությամբ կոմպիլյացիայի:
  • JInterface-ը նախագծված է որպես մետա դաս: Օգտագործեք ininstance (cls, JInterface) միջերեսները ստուգելու համար:
  • Լռելյայն ներմուծումներին ավելացվել են բացակայող «mil», «net» և «edu» TLD-ները:
  • Գործարկման ընթացքում բարելավված սխալի հաղորդագրություններ UnsupportedClassVersion-ի համար:
  • java.util.Map-ն այժմ գցում է KeyError, եթե տարրը չի գտնվել: Արժեքները, որոնք զրոյական են, դեռևս չեն վերադառնում, ինչպես սպասվում էր: Օգտագործեք get()-ը, եթե ցանկանում եք դատարկ ստեղները համարել որպես None:
  • Հեռացվել է java.util.Collection-ը, քանի որ այն տարօրինակ կերպով ծանրաբեռնում է remove(Object) և remove(int) միջև ցուցակներում: Օգտագործեք Java remove() մեթոդը՝ Java-ի բնիկ վարքագիծը մուտք գործելու համար, սակայն տիպի casting-ը խստորեն խորհուրդ է տրվում գերբեռնվածության վերահսկման համար:
  • java.lang.IndexOutOfBoundsException-ն այժմ կարելի է բռնել՝ օգտագործելով IndexError բացառության դասը, երբ մուտք գործեք java.util.List տարրեր:

Source: opennet.ru

Добавить комментарий