GraalVM sanal makinesinin 19.3.0 sürümü ve buna dayalı Python, JavaScript, Ruby ve R uygulamaları

Oracle Şirketi yayınlanan evrensel bir sanal makinenin piyasaya sürülmesi GraalVM 19.3.0JavaScript (Node.js), Python, Ruby, R, JVM için herhangi bir dil (Java, Scala, Clojure, Kotlin) ve LLVM bit kodunun oluşturulabileceği dillerde (C, C++) çalışan uygulamaları destekler. , Pas). 19.3 dalı, Uzun Süreli Destek (LTS) sürümü olarak sınıflandırılmıştır ve dikkat çekici destek JDK11Java kodunu yürütülebilir dosyalar (GraalVM Native Image) halinde derleme yeteneği de dahil. Proje kodu tarafından dağıtıldı GPLv2 kapsamında lisanslanmıştır. Aynı zamanda GraalVM kullanan Python, JavaScript, Ruby ve R dil uygulamalarının yeni sürümleri de yayınlandı. GraalPython, GraalJS, TrüfYakut и HızlıR.

GraalVM sağlar JVM'de, JavaScript, Ruby, Python ve R dahil olmak üzere herhangi bir betik dilinden kodu anında çalıştırabilen ve aynı zamanda LLVM bit koduna dönüştürülmüş JVM'de yerel kodu çalıştırmayı mümkün kılan bir JIT derleyicisi. GraalVM tarafından sağlanan araçlar arasında dilden bağımsız bir hata ayıklayıcı, bir profil oluşturma sistemi ve bir bellek ayırma analizörü bulunur. GraalVM, farklı dillerdeki bileşenlerle birleştirilmiş uygulamalar oluşturmayı mümkün kılarak, diğer dillerdeki kodlardan nesnelere ve dizilere erişmenizi sağlar. JVM tabanlı diller için fırsat minimum bellek tüketimiyle doğrudan yürütülebilecek makine kodunda derlenmiş yürütülebilir dosyalar oluşturmak (bellek ve iş parçacığı yönetimi, çerçeveyi birbirine bağlayarak uygulanır) Alt katman sanal makinesi).

GraalJS'deki değişiklikler:

  • Node.js 12.10.0 ile uyumluluk sağlanmıştır;
  • Standart olmayan genel özellikler ve işlevler varsayılan olarak devre dışıdır:
    global (globalThis ile değiştirildi, js.global-özelliği geri dönecek şekilde ayarlandı), performans (js.performans), print ve printErr (js.print);

  • ECMAScript 2020 modunda kullanılabilen Promise.allSettled ve nullish birleştirme teklifi uygulandı (“-js.ecmascript-version=2020”);
  • Bağımlılıklar ICU4J'den 64.2'ye, ASM'den 7.1'e güncellendi.

Değişiklikler GraalPython'da:

  • gc.{enable,disable,isenabled} taslakları eklendi, charmap_build, sys.hexversion ve _lzma uygulandı;
  • Python 3.7.8 standart kitaplığı güncellendi;
  • NumPy 1.16.4 ve Pandas 0.25.0 için destek eklendi;
  • Timeit desteği eklendi;
  • Socket.socket, “graalpython -m http.server”ı çalıştırmanıza ve şifrelenmemiş (TLS olmadan) http kaynaklarını yüklemenize olanak tanıyan bir duruma getirildi;
  • pandas.DataFrame nesnelerinin görüntülenmesiyle ilgili sorunlar düzeltildi.
    bytes.startswith dosyasındaki tuple'ların yanlış işlenmesi,
    yineleyicilerin atanmasının ve sözlükler için dict.__contains__ kullanımının ortadan kaldırılması;

  • ast.PyCF_ONLY_AST için destek eklendi; izin pytest'in çalıştığından emin olun;
  • Katma destek PEP 498 (literallerde dize enterpolasyonu);
  • uygulandı normal Python içe aktarma sözdizimini kullanarak JVM sınıflarını içe aktarmak ve Python kodundan JVM istisnalarını yakalamak için “--python.EmulateJython” bayrağı;
  • Geliştirilmiş ayrıştırıcı performansı, istisna önbelleğe alma,
    Python nesnelerine JVM kodundan erişme. Python kodu ve yerel uzantılar için performans testlerinde iyileştirilmiş sonuçlar (yerel uzantıların llvm'nin üzerinde yürütülmesi, bit kodu llvm'nin JIT derlemesi için GraalVM'ye aktarıldığı anlamına gelir).

Değişiklikler TruffleRuby'de:

  • Yerel uzantıları derlemek için artık hem yerel kod hem de bit kodu oluşturan yerleşik LLVM araç seti kullanılıyor. Bu, bağlantı sorunlarının çoğunu ortadan kaldırarak daha fazla yerel uzantının kullanıma hazır olarak derlenmesi gerektiği anlamına gelir;
  • TruffleRuby'de yerel uzantıları yüklemek için ayrı LLVM kurulumu;
  • TruffleRuby'ye C++ uzantılarının yüklenmesi artık libc++ ve libc++abi'nin yüklenmesini gerektirmiyor;
  • Lisans, son JRuby ile aynı şekilde EPL 2.0/GPL 2.0/LGPL 2.1'e güncellendi;
  • GC.stat'a isteğe bağlı bağımsız değişkenler için destek eklendi;
  • Bir sarmalayıcıyla Kernel#load yöntemi ve :chdir; ile Kernel#spawn uygulandı.
  • OpenSSL kullandığı için harika olan rb_str_drop_bytes eklendi;
  • Rails 6'daki yeni raylar için gereken önceden yüklenmiş öğelerin uzantıları dahil;
  • Yerel uzantıları derlemek için MRI'da olduğu gibi bayraklar kullanılır;
  • Performans optimizasyonları yapıldı ve bellek tüketimi azaltıldı.

Değişiklikler FastR'da:

  • R 3.6.1 ile uyumluluk sağlanır;
  • LLVM'ye dayalı yerel uzantıları çalıştırmak için ön destek eklendi. Yerel R paketleri oluştururken FastR, GraalVM'nin yerleşik LLVM araçlarını kullanacak şekilde yapılandırılır. Ortaya çıkan ikili dosyalar hem yerel kodu hem de LLVM bit kodunu içerecektir.

    Önceden yüklenmiş paketler de bu şekilde oluşturulur.
    FastR varsayılan olarak yerel uzantı kodunu yükler ve çalıştırır, ancak "--R.BackEnd=llvm" seçeneğiyle başlatıldığında bit kodu kullanılacaktır. LLVM arka ucu, bazı R paketleri için "--R.BackEndLLVM=pkg1,pkg2" belirtilerek seçici olarak kullanılabilir. Paketleri yüklemede sorun yaşıyorsanız fastr.setToolchain("native") öğesini çağırarak veya $FASTR_HOME/etc/Makeconf dosyasını manuel olarak düzenleyerek her şeyi geri alabilirsiniz;

  • Bu sürümde FastR, GCC çalışma zamanı kitaplıkları olmadan gönderilir;
  • Sabit bellek sızıntıları;
  • Büyük vektörlerle (>1 GB) çalışırken karşılaşılan sorunlar düzeltildi;
  • GrepRaw uygulandı, ancak yalnızca sabit=T için.

Kaynak: opennet.ru

Yorum ekle