Oracle Şirkəti universal virtual machine buraxılışı , JavaScript (Node.js), Python, Ruby, R, JVM üçün hər hansı dildə (Java, Scala, Clojure, Kotlin) və LLVM bit kodu yarada bilən dillərdə proqramların işə salınmasını dəstəkləyən dəstək , Java kodunun icra edilə bilən fayllara (GraalVM Native Image) çevrilməsi imkanını da daxil olmaqla. Layihənin kodu GPLv2 lisenziyası altında. Eyni zamanda, GraalVM-dən istifadə edən Python, JavaScript, Ruby və R dillərinin yeni versiyaları buraxılıb — , , və .
GraalVM JIT müqtədirici, JVM-də JavaScript, Ruby, Python və R kimi hər hansı skript dili kodunu dinamik işlədə bilən və JVM-də LLVM bit koduna çevrilən native kodu işə salmağı təmin edir. GraalVM-in təmin etdiyi alətlər proqramlaşdırma dillərindən müstəqil səhv ayırma, profilaktik sistem və yaddaş bölgüsünün analizatorunu əhatə edir. GraalVM müxtəlif dillərdə komponentlər olan birləşmiş tətbiqlərin yaradılmasına imkan tanıyır, başqalarının dillərindəki koddan obyektlərə və massivlərə müraciət etməyə imkan verir. JVM əsaslı dillər üçün isə minimal yaddaş istehlakı ilə birbaşa icra edilə bilən maşın koduna kompilyasiya edilmiş faylların yaradılması var (yaddaş və axınların idarəsi Substrate VM çərçivəsi vasitəsilə həyata keçirilir). ).
:
- düzenleme standart deyimlərin qlobal mülkiyyətləri və funksiyaları varsayılan olaraq deaktiv edilmişdir:
- global (globalThis ilə əvəz olunur, geri dönüş üçün js.global-property ayarı var), performance (js.performance), print və printErr (js.print);
Promise.allSettled və nullish coalescing proposal ilə həyata keçirilib, 2020-ci ilin ECMAScript rejimində əldə edilə bilər ("—js.ecmascript-version=2020"); - ICU4J 64.2, ASM 7.1-ə asılılıqlar yenilənmişdir.
- GraalPython-da:
gc.{enable,disable,isenabled} stub-ları əlavə olunmuşdur, charmap_build, sys.hexversion və _lzma reallaşdırılıb;
- Python 3.7.8 standart kitabxanası yenilənmişdir;
- NumPy 1.16.4 və Pandas 0.25.0 dəstəyi əlavə olunmuşdur;
- timeit dəstəyi əlavə olunmuşdur;
- socket.socket "graalpython -m http.server" dəstəyi qazanmışdır və TLS olmayan (şifrələnməmiş) http-resursları yükləyə bilir;
- pandas.DataFrame obyektlərinin çıxışı ilə bağlı problemlər düzəldilmişdir,
- bytes.startswith misralarıyla bağlı düzgün emal edilməməsi,
iterasiyaların destrukturlaşdırılması ilə və dict.__contains__-dan istifadə etmə ilə bağlı problemlər düzəldilmişdir;
ast.PyCF_ONLY_AST dəstəyi əlavə olunmuşdur ki, - pytest-in işini təmin etsin; JVM siniflərinin normal Python sintaksisi import ilə idxalı üçün "—python.EmulateJython" bayrağı və Python kodundan JVM istisnalarının tutulması;
- Əlavə edilmişdir parsing icraatı, istisnaların кешированiyasında performans yaxşılaşdırılmışdır.
- флаг «—python.EmulateJython» для импорта JVM-классов с помощью нормального Python-синтаксиса import и ловли JVM-исключений из кода на Python;
- Улучшена производительность парсера, кеширования исключений,
Python obyektlərinə JVM kodu ilə giriş. Python kodu və yerli uzantılar üçün performans testlərində nəticələr yaxşılaşdırılmışdır (LLVM üzərində yerli uzantıların icrası, LLVM bitkodunun JIT kompilyası üçün GraalVM-ə ötürülməsi deməkdir).
TruffleRuby-də:
- İndi yerli uzantıların kompilyasiyası üçün birləşdirilmiş LLVM alətləri tətbiq edilməkdədir, bu da yerli kodu və bitkodu yaradır. Bu, daha çox yerli uzantıların qutudan çıxarılan kimi kompilyasiya edilməsinə imkan tanıyır, birləşmə ilə əlaqədar əksər problemləri aradan qaldırmağa kömək edir;
- TruffleRuby-də yerli uzantıların quraşdırılması üçün ayrıca LLVM quraşdırılması tələb olunur;
- TruffleRuby-də C++ uzantılarının quraşdırılması üçün libc++ və libc++abi-nin quraşdırılması tələb olunmur;
- Lisenziya EPL 2.0/GPL 2.0/LGPL 2.1-ə yüksəldilmişdir, bu da son JRuby-də olduğu kimidir;
- GC.stat-da opsional arqumentlərin dəstəyi əlavə edilmişdir;
- Kernel#load üçün sarıcı və Kernel#spawn üçün :chdir metodu tətbiq edilmişdir;
- rb_str_drop_bytes əlavə edilmişdir, bu da OpenSSL tərəfindən istifadə olunması ilə diqqət çəkir;
- Rails 6-da rails new üçün lazım olan ön quraşdırılmış gem uzantıları daxil edilmişdir;
- Yerli uzantıların kompilyasiyasında MRI-də olduğu kimi bayraqlar istifadə edilmişdir;
- Performans optimizasiyaları həyata keçirilmiş və yaddaş istehlakı azaldılmışdır.
FastR-də:
- R 3.6.1 ilə uyğunluq təmin edilmişdir;
- İndi LLVM-ə əsaslanan yerli uzantıların icrası üçün ilkin dəstək əlavə edilmişdir. Yerli R paketlərinin yığılmasında FastR GraalVM-də inteqrasiya olunmuş LLVM alətlərini istifadə edəcək. Nəticə olaraq yaranan ikili fayllar həm yerli kodu, həm də LLVM bitkodunu ehtiva edəcək.
Ön quraşdırılmış paketlər də belə bir şəkildə toplanmışdır.
FastR standart olaraq uzantıların yerli kodunu yükləyir və icra edir, ancaq "--R.BackEnd=llvm" seçimi ilə başladığında bitkod istifadə ediləcəkdir. LLVM arxa planı bəzi R paketləri üçün seçici şəkildə istifadə oluna bilər, "--R.BackEndLLVM=pkg1,pkg2" verərək. Paketlərin quraşdırılması zamanı problemlərlə qarşılaşsanız, hələ qayıtmaq üçün fastr.setToolchain("native") çağırmaq və ya $FASTR_HOME/etc/Makeconf faylını əl ilə redaktə etməyiniz mümkündür; - Bu nəşrdə FastR GCC runtime kitabxanaları olmadan təqdim edilir;
- Yaddaş sızıntıları düzəldilmişdir;
- Böyük vektorlarla (>1GB) işləmə problemləri düzəldilmişdir;
- grepRaw həyata keçirilmişdir, lakin yalnız fixed=T üçün.
Mənbə: opennet.ru
