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

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

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

  • JChar-ն աջակցվում է որպես վերադարձի տեսակ: Համատեղելիության համար JChar-ը ժառանգում է «str»-ից և իրականացնում է անուղղակի փոխակերպում «int»-ի: Ուստի պայմանագրերում ստուգումներ է անցնում։ Բայց սա նշանակում է, որ այն այլևս չի համարվում թվային տեսակ Python-ում, և հետևաբար, ininstance(c, int)-ը գնահատվում է False-ի, ինչը համահունչ է Java տիպի փոխակերպման կանոններին։
  • Ներդրվել է օպերատոր՝ «Type@obj»-ի տիպը փոխանցելու համար (@-ը Python-ի օպերատոր է ներքին արտադրանքի համար, Java-ն չունի):
  • Ավելացվել է Java զանգվածներ ստեղծելու նշում: Մուտքագրեք [s1][s2][s3] ֆիքսված չափի զանգվածների համար, Type[:][:][:] զանգվածների համար, որոնք հետագայում կստեղծվեն:
  • @FunctionalInterface-ը թույլ է տալիս Python-ի օբյեկտներից Java ֆունկցիոներներ ստեղծել __call__-ով:
  • Հեռացվել է հնացած JIterator-ը, JException-ի օգտագործումը որպես գործարան, get_default_jvm_path և jpype.reflect:
  • Լռելյայնորեն, Java տողերը չեն փոխարկվում Python տողերի:
  • Python-ը հնացել է «__int__»-ը, այնպես որ անուղղակի հեռարձակումները ամբողջ թվերի և լողացող կետերի տիպերի միջև կառաջացնեն TypeError:
  • JException-ի օգտագործումը հնացել է: Բոլոր բացառությունները բռնելու կամ ստուգելու համար, որ օբյեկտը Java բացառության տեսակ է, օգտագործեք java.lang.Throwable:
  • Java-ի բացառությունների կասկադային պատճառներն այժմ արտացոլված են Python stack շրջանակներում:
  • JString-ը հնացել է: Java տող ստեղծելու կամ ստուգելու համար, որ օբյեկտը Java string է, օգտագործեք java.lang.String:
  • Repr մեթոդները թարմացվել են Java դասերում։
  • java.util.List-ը կատարում է պայմանագրեր collections.abc.Sequence և collections.abc.MutableSequence-ի համար:
  • java.util.Collection-ը կատարում է պայմանագիրը collections.abc.Collection-ի համար:
  • Java-ի դասերը մասնավոր են և Python-ից երկարացնելու դեպքում կուղարկեն TypeError:
  • Զգուշորեն կարգավորեք Control-C-ը: Նախորդ տարբերակները խափանում են, երբ Java-ն մշակում է Control-C ազդանշան, քանի որ դրանք կդադարեցնեն Java-ն զանգի ընթացքում: JPype-ն այժմ Java-ից վերադառնալիս կներկայացնի InterruptedException: Control-C-ն չի դուրս մղի Java-ի մեծ ընթացակարգերը, ինչպես ներկայումս իրականացվում է, քանի որ Java-ն դրա համար հատուկ գործիք չունի:

Այնուհետև ստեղծվեց ուղղիչ թողարկում 1.0.1, որն ավելացրեց փոփոխություններ Python 3.8.4 թողարկման հետ կապված խնդիրների լուծման համար: Python-ը փոխել է «__setattr__»-ի «օբյեկտի» և «տիպի» օգտագործման տրամաբանությունը՝ թույլ չտալով այն օգտագործել ածանցյալ դասերը փոփոխելու համար: Սխալների ստուգումը նույնպես պատվիրակվել է «__setattr__» մեթոդից, ուստի համապատասխանության որոշ ստուգումների բացառությունների տեսակները պետք է համապատասխանաբար թարմացվեն:

Source: opennet.ru

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