Kutulutsidwa kwa chilankhulo cha pulogalamu ya Ruby 3.2

Ruby 3.2.0 inatulutsidwa, chinenero chowongolera chokhazikika pa chinthu chomwe chimagwira ntchito bwino pakupanga mapulogalamu ndipo chimaphatikizapo zinthu zabwino kwambiri za Perl, Java, Python, Smalltalk, Eiffel, Ada ndi Lisp. Khodi ya polojekitiyi imagawidwa pansi pa ziphaso za BSD ("2-clause BSDL") ndi "Ruby", zomwe zikutanthauza mtundu waposachedwa wa laisensi ya GPL ndipo imagwirizana kwathunthu ndi GPLv3.

Kusintha kwakukulu:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° CRuby, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π² ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ WebAssembly для запуската Π² web-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ обособлСнных runtime, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ wasmtime. Для прямого взаимодСйствия с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΏΡ€ΠΈ обособлСнном запускС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ API WASI (WebAssembly System Interface). Π‘Ρ€Π΅Π΄ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ прСдоставлСна VFS обвязка ΠΏΠΎΠ²Π΅Ρ€Ρ… WASI, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡƒΠΏΠ°ΠΊΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ всё ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° языкС Ruby Π² прСдставлСниС Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ wasm-Ρ„Π°ΠΉΠ»Π°. Запуск Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для создания ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ΠΈ дСмонстрационных web-сСрвисов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ TryRuby. На Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ этапС развития ΠΏΠΎΡ€Ρ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ тСстовыС Π½Π°Π±ΠΎΡ€Ρ‹ basic ΠΈ bootstrap, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ примСняСтся API Thread. Π’ ΠΏΠΎΡ€Ρ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ„Π°ΠΉΠ±Π΅Ρ€Ρ‹ (Fiber), ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈ сборка мусора.
  • ОбъявлСн ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ для Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… примСнСния внутрипроцСссный JIT-компилятор YJIT, созданный Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ элСктронной ΠΊΠΎΠΌΠΌΠ΅Ρ€Ρ†ΠΈΠΈ Shopify Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Ρ‹ ΠΏΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ruby-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ Rails ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ ΠΎΡ‚ Ρ€Π°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ JIT-компилятора MJIT, Π±Π°Π·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎΡΡ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ внСшний компилятор Π½Π° языкС Π‘ΠΈ, являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ YJIT примСняСт вСрсионированиС Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² (LBBV β€” Lazy Basic Block Versioning) ΠΈ содСрТит ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ JIT-компилятор. Благодаря LBBV, JIT Π²Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π° ΠΎΡΡ‚Π°Π²ΡˆΡƒΡŽΡΡ Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π² процСссС выполнСния Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚ΠΈΠΏΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². YJIT доступСн для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ x86-64 ΠΈ arm64/aarch64 Π² Linux, MacOS, BSD ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… UNIX-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ….

    Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π‘Ruby ΠΊΠΎΠ΄ YJIT написан Π½Π° языкС Rust ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ для компиляции Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ компилятора rustc 1.58.0+, поэтому сборка YJIT ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΈ являСтся ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ. ΠŸΡ€ΠΈ использовании YJIT зафиксировано ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ тСста yjit-bench Π½Π° 41% ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с использованиСм ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ.

    Kutulutsidwa kwa chilankhulo cha pulogalamu ya Ruby 3.2

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π°Ρ‚Π°ΠΊ, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΡ… ΠΎΡ‚ΠΊΠ°Π· Π² обслуТивании ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π²Π½Π΅ΡˆΠ½ΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… Π² нСэффСктивных ΠΈ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ выполняСмых рСгулярных выраТСниях (ReDoS). Π—Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сопоставлСния, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ задСйствована Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. НапримСр, врСмя выполнСния выраТСния β€˜/^a*b?a*$/ =~ Β«aΒ» * 50000 + Β«xΒ»β€˜ ΡΠΎΠΊΡ€Π°Ρ‚ΠΈΠ»ΠΎΡΡŒ с 10 Π΄ΠΎ 0.003 сСкунд. Π¦Π΅Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ потрСблСния памяти, расход ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π² 10 Ρ€Π°Π· Π²Ρ‹ΡˆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΌΠ΅Ρ€ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ опрСдСлСния Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«Regexp.timeout = 1.0Β»), Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΡΠΏΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒΡΡ рСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
  • Π’ состав Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Ρ€Π΅ΠΆΠΈΠΌ syntax_suggest, ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‰ΠΈΠΉ Π΄ΠΈΠ°Π³Π½ΠΎΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ошибок, связанных с ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΈΠ»ΠΈ лишним Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Β«endΒ». Unmatched `end’, missing keyword (`do’, `def`, `if`, etc.) ? 1 class Dog > 2 defbark > 3 end 4 end
  • Π’ Ρ€Π΅ΠΆΠΈΠΌ ΠΏΠΎΠΊΠ°Π·Π° мСста ошибок Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‚ΠΊΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, связанных с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: test.rb:2:in `+’: nil can’t be coerced into Integer (TypeError) sum = ary[0] + ary[1] ^^^^^^
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ синтаксис для пСрСнаправлСния Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π°Π±ΠΎΡ€ΠΎΠ² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²: def foo(*) bar(*) end def baz(**) quux(**) end
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ ruby_vm/mjit/compiler β€” Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ старого JIT-компилятора MJIT, пСрСписанный Π½Π° языкС Ruby. ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ MJIT Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ процСссС, вмСсто выполнСния Π² ΠΏΠΎΡ‚ΠΎΠΊΠ΅ MJIT worker.
  • Π’ Bundler 2.4 ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ зависимостСй задСйствован ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ вСрсий PubGrub, Ρ‚Π°ΠΊΠΆΠ΅ примСняСмый Π² ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅ pub для языка Dart. Π Π°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Molinillo ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² RubyGems, Π½ΠΎ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΌΠ΅Π½Ρ‘Π½ Π½Π° PubGrub.
  • Mitundu yosinthidwa ya ma module amtengo wapatali omangidwa ndi omwe akuphatikizidwa mu library yanthawi zonse.

Source: opennet.ru

Kuwonjezera ndemanga