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

Oracle şirkəti nəşr olundu universal virtual maşının buraxılması GraalVM 19.3.0JavaScript (Node.js), Python, Ruby, R, JVM üçün istənilən dillərdə (Java, Scala, Clojure, Kotlin) və LLVM bit kodunun yaradıla biləcəyi dillərdə (C, C++) işləyən proqramları dəstəkləyən . , Pas). 19.3 filialı Uzunmüddətli Dəstək (LTS) buraxılışı kimi təsnif edilir və əlamətdar dəstək JDK 11, o cümlədən Java kodunu icra edilə bilən fayllara (GraalVM Native Image) tərtib etmək imkanı. Layihə kodu yayılır GPLv2 altında lisenziyalıdır. Eyni zamanda, GraalVM-dən istifadə edən Python, JavaScript, Ruby və R dil tətbiqetmələrinin yeni versiyaları buraxıldı - GraalPython, GraalJS, TruffleRuby и FastR.

GraalVM təmin edir JavaScript, Ruby, Python və R daxil olmaqla, JVM-də istənilən skript dilindən kodu tez bir zamanda yerinə yetirə bilən və həmçinin LLVM bit koduna çevrilmiş JVM-də yerli kodu işlətməyə imkan verən JIT kompilyatoru. GraalVM tərəfindən təmin edilən alətlərə dildən asılı olmayan sazlayıcı, profilləmə sistemi və yaddaş ayırma analizatoru daxildir. GraalVM başqa dillərdəki koddan obyekt və massivlərə daxil olmağa imkan verən müxtəlif dillərdə komponentlərlə birləşdirilmiş proqramlar yaratmağa imkan verir. JVM əsaslı dillər üçün var imkan minimum yaddaş sərfiyyatı ilə bilavasitə icra oluna bilən maşın koduna yığılmış icra edilə bilən faylların yaradılması (yaddaşın və mövzunun idarə edilməsi çərçivəni birləşdirməklə həyata keçirilir. Substrat VM).

GraalJS-də dəyişikliklər:

  • Node.js 12.10.0 ilə uyğunluq təmin edilir;
  • Qeyri-standart qlobal xüsusiyyətlər və funksiyalar defolt olaraq qeyri-aktivdir:
    qlobal (globalThis ilə əvəz olunub, js.global-property-i qaytarmaq üçün təyin etmək), performans (js.performance), çap və printErr (js.print);

  • ECMAScript 2020 rejimində əlçatan olan Promise.allSettled və ləğv edilmiş birləşmə təklifi (“-js.ecmascript-version=2020”);
  • Yenilənmiş asılılıqlar ICU4J 64.2, ASM 7.1.

Dəyişikliklər GraalPython-da:

  • Əlavə edilmiş stublar gc.{enable, disable,isenabled}, tətbiq edilmiş charmap_build, sys.hexversion və _lzma;
  • Yenilənmiş Python 3.7.8 standart kitabxanası;
  • NumPy 1.16.4 və Pandas 0.25.0 üçün əlavə dəstək;
  • Timeit dəstəyi əlavə edildi;
  • socket.socket “graalpython -m http.server”i işə salmağa və şifrələnməmiş (TLS olmadan) http resurslarını yükləməyə imkan verən vəziyyətə gətirildi;
  • Pandas.DataFrame obyektlərinin göstərilməsi ilə bağlı problemlər aradan qaldırıldı.
    baytlarda çubuqların səhv işlənməsi.startswith,
    iteratorların təyininin dağıdılması və lüğətlər üçün dict.__contains__ istifadə edilməsi;

  • ast.PyCF_ONLY_AST üçün əlavə dəstək icazə verilir pytest-in işləməsini təmin etmək;
  • Əlavə edilib dəstək PEP 498 (literallarda sətir interpolyasiyası);
  • Həyata keçirilən normal Python idxal sintaksisindən istifadə edərək JVM siniflərini idxal etmək və Python kodundan JVM istisnalarını tutmaq üçün “--python.EmulateJython” bayrağı;
  • Təkmilləşdirilmiş təhliledici performans, istisna keşləmə,
    JVM kodundan Python obyektlərinə daxil olmaq. Python kodu və yerli genişlənmələr üçün performans testlərində təkmilləşdirilmiş nəticələr (llvm üzərində yerli genişlənmələrin icrası bitcode llvm-nin JIT tərtibi üçün GraalVM-ə ötürülməsini nəzərdə tutur).

Dəyişikliklər TruffleRuby-də:

  • Doğma genişləndirmələri tərtib etmək üçün daxili LLVM alət dəsti indi həm yerli kod, həm də bit kodu yaradaraq istifadə olunur. Bu o deməkdir ki, daha çox yerli uzantılar qutudan çıxarılmalı və bir çox əlaqə problemini aradan qaldırmalıdır;
  • TruffleRuby-də yerli genişlənmələri quraşdırmaq üçün ayrıca LLVM quraşdırılması;
  • TruffleRuby-də C++ uzantılarının quraşdırılması artıq libc++ və libc++abi-nin quraşdırılmasını tələb etmir;
  • Lisenziya EPL 2.0/GPL 2.0/LGPL 2.1-ə yeniləndi, son JRuby ilə eyni;
  • GC.stat-a əlavə arqumentlər üçün dəstək əlavə edildi;
  • Kernel#load metodunu sarğı ilə və Kernel#spawn ilə :chdir;
  • Əlavə edilmiş rb_str_drop_bytes, bu əladır, çünki OpenSSL ondan istifadə edir;
  • Rails 6-da yeni relslər üçün lazım olan əvvəlcədən quraşdırılmış qiymətli daşların əlavələri daxildir;
  • Doğma uzantıları tərtib etmək üçün MRT-də olduğu kimi bayraqlar istifadə olunur;
  • Performans optimallaşdırmaları edildi və yaddaş istehlakı azaldıldı.

Dəyişikliklər FastR-də:

  • R 3.6.1 ilə uyğunluq təmin edilir;
  • LLVM əsasında yerli uzantıları işə salmaq üçün ilkin dəstək əlavə edildi. Doğma R paketləri qurarkən, FastR GraalVM-in daxili LLVM alətlərindən istifadə etmək üçün konfiqurasiya edilir. Yaranan ikili fayllar həm yerli kodu, həm də LLVM bit kodunu ehtiva edəcək.

    Əvvəlcədən quraşdırılmış paketlər də bu şəkildə qurulur.
    FastR defolt olaraq yerli genişləndirmə kodunu yükləyir və işlədir, lakin "--R.BackEnd=llvm" seçimi ilə işə salındıqda bitkod istifadə olunacaq. LLVM backend "--R.BackEndLLVM=pkg1,pkg2" göstərilməklə bəzi R paketləri üçün seçici şəkildə istifadə edilə bilər. Paketləri quraşdırmaqda probleminiz varsa, fastr.setToolchain("doğma") nömrəsinə zəng etməklə və ya $FASTR_HOME/etc/Makeconf faylını əl ilə redaktə etməklə hər şeyi geri qaytara bilərsiniz;

  • Bu buraxılışda FastR GCC iş vaxtı kitabxanaları olmadan göndərilir;
  • Sabit yaddaş sızması;
  • Böyük vektorlarla işləyərkən düzəldilmiş problemlər (>1GB);
  • grepRaw tətbiq edildi, lakin yalnız sabit=T üçün.

Mənbə: opennet.ru

Добавить комментарий