Ruby 3.2 proqramlaşdırma dilinin buraxılışı

Ruby 3.2.0 buraxıldı, dinamik obyekt yönümlü proqramlaşdırma dili, proqram inkişafında yüksək effektivliyə malikdir və Perl, Java, Python, Smalltalk, Eiffel, Ada və Lisp-in ən yaxşı xüsusiyyətlərini özündə birləşdirir. Layihə kodu GPL lisenziyasının ən son versiyasına istinad edən və GPLv2 ilə tam uyğun gələn BSD ("3-bəndli BSDL") və "Ruby" lisenziyaları altında paylanır.

Əsas təkmilləşdirmələr:

  • Veb brauzerində və ya wasmtime kimi müstəqil iş vaxtları altında işləmək üçün WebAssembly aralıq kodunu tərtib edən CRuby tərcüməçisinin ilkin portu əlavə edildi. Ayrı-ayrılıqda işləyərkən əməliyyat sistemi ilə birbaşa qarşılıqlı əlaqə üçün WASI (WebAssembly System Interface) API istifadə olunur. Digər şeylər arasında, WASI-nin üstündə VFS bağlaması təmin edilir ki, bu da Ruby dilində bütün proqramı tək bir wasm faylı şəklində bir görünüşə paketləməyə imkan verir. Brauzerdə işləmək TryRuby kimi dərslik və demo veb xidmətləri yaratmaq üçün istifadə edilə bilər. Hazırkı inkişaf mərhələsində port Thread API-dən istifadə etməyən əsas və bootstrap test paketlərini uğurla keçir. Liman həmçinin Fiber, İstisnalar və ya Zibil Kolleksiyasını dəstəkləmir.
  • Shopify e-ticarət platformasının tərtibatçıları tərəfindən Rails çərçivəsini istifadə edən və bir çox metodu çağıran Ruby proqramlarının performansını artırmaq təşəbbüsü çərçivəsində yaradılan prosesdə olan JIT kompilyatoru YJIT stabil və hazır elan edilib. istehsal istifadəsi. Metod emalına əsaslanan və xarici C kompilyatorundan istifadə edən əvvəllər istifadə olunan MJIT JIT kompilyatorundan əsas fərq ondan ibarətdir ki, YJIT Lazy Basic Block Versioning (LBBV) istifadə edir və inteqrasiya olunmuş JIT kompilyatorunu ehtiva edir. LBBV sayəsində JIT əvvəlcə metodun yalnız başlanğıcını, icra zamanı istifadə olunan dəyişənlərin və arqumentlərin növləri müəyyən edildikdən sonra qalanını bir müddət sonra tərtib edir. YJIT Linux, MacOS, BSD və digər UNIX platformalarında x86-64 və arm64/aarch64 arxitekturaları üçün mövcuddur.

    CRuby-dən fərqli olaraq, YJIT kodu Rust dilində yazılır və tərtib etmək üçün rustc 1.58.0+ kompilyatoru tələb olunur, ona görə də YJIT kompilyasiyası defolt olaraq qeyri-aktivdir və isteğe bağlıdır. YJIT istifadə edərkən, şərhdən istifadə ilə müqayisədə yjit-bench testini yerinə yetirərkən performansda 41% artım qeydə alınıb.

    Ruby 3.2 proqramlaşdırma dilinin buraxılışı

  • Səmərəsiz və uzunmüddətli müntəzəm ifadələrdə (ReDoS) xarici məlumatları emal edərkən xidmətdən imtinaya səbəb olan hücumlara qarşı əlavə qorunma. Əzbərləmə texnikasından istifadə edən uyğunlaşdırma alqoritmi əhəmiyyətli dərəcədə təkmilləşdirilmişdir. Məsələn, '/^a*b?a*$/ =~ "a" * 50000 + "x"' ifadəsinin icra müddəti 10 saniyədən 0.003 saniyəyə endirilib. Optimallaşdırmanın qiyməti, istehlakı daxil edilən məlumatların ölçüsündən təxminən 10 dəfə yüksək olan yaddaş istehlakının artmasıdır. İkinci təhlükəsizlik tədbiri adi ifadənin işlənilməsi üçün vaxtın olması lazım olan fasilə müddətini təyin etmək qabiliyyətidir (məsələn, "Regexp.timeout = 1.0").
  • Syntax_suggest rejimi çatışmayan və ya lazımsız "son" bağlama bəyanatı ilə əlaqəli səhvlərin səbəblərini diaqnoz etməyə kömək etmək üçün daxil edilmişdir. Uyğun olmayan "son", çatmayan açar söz ('do', 'def', 'if' və s.) ? 1 sinif iti > 2 defbark > 3 uc 4 uc
  • Xəta yeri rejiminə növlər və arqumentlərlə bağlı xətalar zamanı arqumentləri qeyd etmək imkanı əlavə edildi, məsələn: test.rb:2:in `+': nil tam ədədə məcbur edilə bilməz (TypeError) sum = ary[ 0] + ary [1] ^^^^^^
  • Digər arqumentlər dəsti metodlarına yönləndirmək üçün yeni sintaksis əlavə edildi: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler təklif edildi - Ruby dilində yenidən yazılmış köhnə MJIT JIT kompilyatorunun variantı. MJIT işçi ipində icra yerinə, ayrı bir prosesdə MJIT icrasını təmin etdi.
  • Bundler 2.4-də asılılığın idarə edilməsi Dart üçün pub paket meneceri tərəfindən də istifadə edilən PubGrub versiya tapıcısından istifadə edir. Əvvəllər istifadə olunan Molinillo alqoritmi RubyGems-də istifadə olunmağa davam edir, lakin gələcəkdə PubGrub ilə də əvəz olunacaq.
  • Daxili və standart kitabxana gem modullarının yenilənmiş versiyaları.

Mənbə: opennet.ru

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