buraxılış qatmanı , Python tətbiqlərinin Java dilindəki sinif kitabxanalarına tam girişi təşkil etməyə imkan verən. JPype vasitəsilə Python-dan Java-ya aid xüsusi kitabxanaları istifadə edərək, Java və Python kodunu birləşdirən hibrid tətbiqlər yaratmaq mümkündür. Jython-dan fərqli olaraq, Java ilə inteqrasiya JVM üçün Python versiyasının yaradılması vasitəsi ilə deyil, hər iki virtual maşın səviyyəsində qarşılıqlı əlaqə qurulması ilə həyata keçirilir, paylaşılmış yaddaşdan istifadə olunaraq. Təklif olunan yanaşma yalnız yaxşı performansa çatmağa deyil, həm də bütün CPython və Java kitabxanalarına girişi təmin etməyə imkan verir. Layihənin kodu Apache 2.0 lisansı altındadır.
Əsas dəyişikliklər:
- C++ və Java kodunda atılan istisnalara, Python kodunda istisna baş verdiyi zaman istisna yığını təmin edilir. Beləliklə, bundan sonra istisna yığını məlumatını əldə etmək üçün artıq stacktrace() çağırmağa ehtiyac yoxdur.
- Çağırışlar zamanı döndürülmə sürəti üç dəfə artırılıb.
- Məlumat ötürülmə sürəti əhəmiyyətli dərəcədə (on qat) artırılıb
numpy çoxölçülü massivlərinin buffer-larında. Çoxölçülü primitivlər, JVM-də ardıcıl C düzülüşü ilə yaradılmış yalnız oxunması mümkün olan nüsxələri ötürür. - Bütün daxili komponentlər CPython-dan icra ilə əvəz olunub, __javaclass__, __javavalue__ və __javaproxy__
silinib. Java-dan türetilmiş bütün CPython tiplərinə xüsusi Java-soxul addedildi. Bütün gizli cədvəllər CPython-a köçürüldü. Java tipləri artıq JClass metaklassından türetilməlidir, bu da tip soxullarını istifadə edir. Python-un əsas sinifləri üçün davamçılar əlverişli deyil. Object, Proxy, Exception, Number və Array tipləri artıq CPython-un daxili icralarından birbaşa türetilir. - İstisnaların izni və emalı yaxşılaşdırılıb.
- Massiv kəsimləri (Array slices) artıq geri yazma imkanı olan görsənmələr şəklində emal olunur, məsələn, numpy massivi kimi. Kəsimlər üçün dəyərin təyin edilməsi və alınması dəstəklənir (slice(start, stop, step)).
- Massivlərdə «__reversed__» dəstəyi həyata keçirilib.
- Java massivlərində memoryview API dəstəyi təmin edilir və buffer məzmununu ötürmək üçün numpy-a asılılıq ləğv edilir.
- Numpy artıq asılılıq deyil (extra) və numpy ilə dəstəyi olmadan yaddaşın ötürülməsi mümkündür.
- JInterface metaklass şəklində hazırlanıb. Interface-lər üçün yoxlama etmək üçün isinstance(cls, JInterface) istifadə edin.
- Standart importlara «mil», «net» və «edu» TLD-ləri əlavə olunub.
- Başlatma zamanı UnsupportedClassVersion üçün xətalar barədə mesajlar yaxşılaşdırılıb.
- java.util.Map artıq tapılmadığı halda KeyError verir. Null olan dəyərlər, gözlənildiyi kimi, hələ də None-lə geri qaytarılır. Boş açarları None kimi emal etmək lazımdırsa, get() istifadə edin.
- java.util.Collection silindi, çünki List-lardakı remove(Object) və remove(int) arasında qəribə yüklənməsi var. Orijinal Java davranışına giriş üçün Java metodunu remove() istifadə edin, amma yüklənməni idarə etmək üçün tip çevirməyi ciddi şəkildə tövsiyə edirik.
- java.lang.IndexOutOfBoundsException indi java.util.List elementlərinə giriş zamanı IndexError istisna sinifi ilə tutulmaqla əldə edilə bilər.
Mənbə: opennet.ru
