lëshimi i shtresës , që mundëson një qasje të plotë të aplikacioneve Python në libraritë e klasave në gjuhën Java. Me ndihmën e JPype, nga Python mund të përdoren libraritë specifike për Java, duke krijuar aplikacione hibride që kombinojnë kodin në Java dhe Python. Ndryshe nga Jython, integrimi me Java arrihet jo përmes krijimit të një varianti Python për JVM, por përmes ndërveprimit në nivelin e të dyja makinave virtuale, duke përdorur memorie të përbashkët. Qasja e propozuar nuk vetëm që ofron një performancë të mirë, por gjithashtu siguron qasje në të gjitha libraritë CPython dhe Java. Kodi i projektit nën licencën Apache 2.0.
Ndryshimet kryesore:
- Përjashtimet që hidhen në kodin C++ dhe Java tani ofrojnë stack trace kur ndodh një përjashtim në kodin Python. Pra, për të marrë informacionin mbi stack trace, nuk është më e nevojshme të thërrisni stacktrace().
- Shpejtësia e kthimit gjatë thirrjeve është rritur tre herë.
- Shumëfish është rritur shpejtësia e transferimit në
bufet numpy të matricave shumëdimensionale. Primitivat shumëdimensionale dërgojnë kopje vetëm për lexim të krijuara brenda JVM me vendosje të vazhdueshme C. - Të gjitha komponentet e brendshme që paraqiten janë zëvendësuar me implementime nga CPython, ndërsa simbolet __javaclass__, __javavalue__ dhe __javaproxy__ janë hequr.
Të gjitha llojet CPython, të trashëguara nga llojet e klasave jpype, iu shtua një hapësirë e dedikuar Java. Të gjitha tabelat private janë transferuar në CPython. Tani, llojet Java duhet të trashëgojnë nga metaklasa JClass, e cila përdor hapësirat e tipeve. Miqtë për klasat bazë Python nuk lejohen. Llojet Object, Proxy, Exception, Number dhe Array trashëgohen drejtpërdrejt nga implementimet e brendshme CPython. - Përmirësimi i gjurmimit dhe trajtimit të përjashtimeve.
- Pjesët e arrave (Array slices) tani trajtohen si përfaqësime që mbështesin rikthimin te origjinali, siç është arrë numpy. Për këto pjesë, është siguruar mbështetje për vendosjen dhe marrjen e vlerave me hap (slice(start, stop, step)).
- Në arrat është realizuar mbështetje për '__reversed__'.
- Në arrat Java është siguruar mbështetje për API memoryview dhe është hequr varësia nga numpy për transferimin e përmbajtjes së buferit.
- Numpy tani nuk është varësi (extra) dhe transferimi i memories në numpy është i mundur pa kompilim me mbështetje për numpy.
- JInterface është formuar si një metaklasë. Përdorni isinstance(cls, JInterface) për të kontroluar për interfaca.
- TLD-të e humbura «mil», «net» dhe «edu» janë shtuar në importet e paracaktuara.
- Mesazhet e gabimeve për UnsupportedClassVersion janë përmirësuar gjatë nisjes.
- java.util.Map tani do të japë KeyError nëse elementi nuk gjendet. Vlerat që janë null, do të vazhdojnë të kthejnë None siç pritej. Përdorni get() nëse çelësat bosh duhet të trajtohen si None.
- java.util.Collection është hequr, pasi ato janë ngatërruar çuditërisht midis remove(Object) dhe remove(int) në List-a. Përdorni metodën Java remove() për të acessuar sjelljen origjinale të Java-s, por përkthimi i tipit rekomandohet fort për të menaxhuar ngatërrimin.
- java.lang.IndexOutOfBoundsException tani mund të kapet përmes klasës për përjashtime IndexError kur aksesohet elementet e java.util.List.
Burimi: opennet.ru
