GraalVM 19.3.0 virtual maşınının buraxılışı və Python, JavaScript, Ruby və R bu əsasında tətbiqləri

Oracle Şirkəti nəşr etdi universal virtual machine buraxılışı GraalVM 19.3.0, 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 xüsusilə dəstək JDK 11, Java kodunun icra edilə bilən fayllara (GraalVM Native Image) çevrilməsi imkanını da daxil olmaqla. Layihənin kodu yayılır GPLv2 lisenziyası altında. Eyni zamanda, GraalVM-dən istifadə edən Python, JavaScript, Ruby və R dillərinin yeni versiyaları buraxılıb — GraalPython, GraalJS, TruffleRubyFastR.

GraalVM təmin edir 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ə imkan 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). GraalJS-də dəyişikliklər).

Node.js 12.10.0 ilə uyğunluq təmin olunmuşdur;:

  • 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:

Dəyişikliklər 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; PEP 498 (satırlarda interpolasiya); JVM siniflərinin normal Python sintaksisi import ilə idxalı üçün "—python.EmulateJython" bayrağı və Python kodundan JVM istisnalarının tutulması;
  • Əlavə edilmişdir dəstək parsing icraatı, istisnaların кешированiyasında performans yaxşılaşdırılmışdır.
  • Tətbiq edilib «—python.EmulateJython» bayrağı JVM siniflərini normal Python sintaksisi import ilə idxal etmək və Python kodundan JVM istisnalarını idarə etmək üçün istifadə olunur;
  • Parsersin, istisnaların önbelleğe alınmasının performansı artırılıb,
    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).

Dəyişikliklər 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.

Dəyişikliklə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

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster