lëshimi i shtresës , e cila mundëson qasje të plotë të aplikacioneve Python në bibliotekat e klasave në gjuhën Java. Me ndihmën e JPype, nga Python mund të përdoren biblioteka specifike për Java, duke krijuar aplikacione hibride që kombinojnë kodin në Java dhe Python. Ndryshe nga Jython, integimi me Java arrihet jo përmes krijimit të një varianti Python për JVM, por përmes ndërveprimit në nivelin e të dyja makinerive virtuale, duke përdorur memorie të ndarë. Qasja e propozuar lejon jo vetëm arritjen e performancës së lartë, por gjithashtu ofron qasje në të gjitha bibliotekat CPython dhe Java. Kodi i projektit nën licencën Apache 2.0.
Ndryshimet kryesore:
- Ishujt e hedhura në kodin C++ dhe Java tani ofrojnë një stek përjashtimesh kur ndodh një përjashtim në kodin Python. Pra, për të marrë informacionin mbi stek-in e përjashtimeve, nuk është më e nevojshme të thërrisni stacktrace().
- Shpejtësia e kthimit është rritur tre herë gjatë thirrjeve.
- Shpejtësia e transferimit është rritur ndjeshëm (në rend të magnitudave) në
buffers e shumëdimensionaleve numpy. Primitive shumëdimensionale transferojnë kopje vetëm për të lexuar, të krijuara brenda JVM me një shtrirje të vazhdueshme C. - Të gjitha komponentet e brendshme të ekspozuara janë zëvendësuar me realizime nga CPython, dhe simbolet __javaclass__, __javavalue__ dhe __javaproxy__
janĂ« hequr. TĂ« gjitha llojet CPython, tĂ« trashĂ«guara nga llojet e klasĂ«s jpype, janĂ« shtuar me njĂ« slot tĂ« dedikuar Java. TĂ« gjitha tabelat private janĂ« transferuar nĂ« CPython. TĂ« gjitha llojet Java tani duhet tĂ« trashĂ«gojnĂ« nga metaklasa JClass, e cila pĂ«rdor slote tĂ« llojeve. MĂ«ngesat pĂ«r klasat bazĂ« Python nuk lejohet. Llojet Object, Proxy, Exception, Number dhe Array trashĂ«gohen drejtpĂ«rdrejt nga realizimet e brendshme CPython. - ĂshtĂ« pĂ«rmirĂ«suar gjurmimi dhe trajtimi i pĂ«rjashtimeve.
- Shtresat e array-ve tani përpunohen si pamje që mbështesin shkrimin pas në origjinal, siç është array numpy. Për shtresat e array-ve është siguruar mbështetje për vendosjen dhe marrjen e vlerës me hap (slice(start, stop, step)).
- Në array është realizuar mbështetje për «__reversed__».
- Në array-t Java është siguruar mbështetje për API memoryview dhe është hequr varësia nga numpy për transferimin e përmbajtjes së buffer-it.
- Numpy tani nuk është një varësi (extra) dhe transferimi i memories në numpy është i disponueshëm pa mbështetje për ndërtimin me numpy.
- JInterface është dizajnuar si një metaklasë. Përdorni isinstance(cls, JInterface) për të kontrolluar për interfesat.
- Të gjithë importet e paracaktuara janë shtuar me TLD të munguar «mil», «net» dhe «edu».
- Gjatë nisjes, janë përmirësuar mesazhet e gabimeve për UnsupportedClassVersion.
- java.util.Map tani jep KeyError nëse elementi nuk gjendet. Vlerat që janë null, ende kthejnë None ashtu siç pritej. Përdorni get() nëse duhen trajtuar çelësat bosh si None.
- java.util.Collection është hequr, pasi është ngatërruar me mbivendosjen midis remove(Object) dhe remove(int) në List. Përdorni metodën Java remove() për akses në sjelljen origjinale Java, por konvertimi i tipit rekomandohet fort për të menaxhuar mbivendosjen.
- java.lang.IndexOutOfBoundsException tani mund të kapet me ndihmën e klasës për përjashtime IndexError kur aksesoni elementet java.util.List.
Burimi: opennet.ru
