ИздаванС Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Ruby 3.2

Π‘Π΅ΡˆΠ΅ пуснат Ruby 3.2.0, Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ високоСфСктивСн ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π²Π° Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅ характСристики Π½Π° Perl, Java, Python, Smalltalk, Eiffel, Ada ΠΈ Lisp. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сС разпространява ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΡ‚Π΅ BSD (β€ž2-clause BSDLβ€œ) ΠΈ β€žRubyβ€œ, ΠΊΠΎΠ΅Ρ‚ΠΎ сС отнася Π΄ΠΎ Π½Π°ΠΉ-Π½ΠΎΠ²Π°Ρ‚Π° вСрсия Π½Π° GPL Π»ΠΈΡ†Π΅Π½Π·Π° ΠΈ Π΅ напълно ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎ с GPLv3.

Основни подобрСния:

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π΅Π½ ΠΏΠΎΡ€Ρ‚ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° CRuby, ΠΊΠΎΠΉΡ‚ΠΎ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄ Π½Π° WebAssembly Π·Π° изпълнСниС Π² ΡƒΠ΅Π± Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ самостоятСлни срСди Π·Π° изпълнСниС, ΠΊΠ°Ρ‚ΠΎ wasmtime. Π—Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ взаимодСйствиС с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС изпълнява ΠΎΡ‚Π΄Π΅Π»Π½ΠΎ, сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° WASI (WebAssembly System Interface) API. НарСд с Π΄Ρ€ΡƒΠ³ΠΈ Π½Π΅Ρ‰Π°, VFS ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° Π΅ осигурСна Π²ΡŠΡ€Ρ…Ρƒ WASI, която Π²ΠΈ позволява Π΄Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ€Π°Ρ‚Π΅ цялото Ruby ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² прСзСнтация ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° Π΅Π΄ΠΈΠ½ wasm Ρ„Π°ΠΉΠ». Π˜Π·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° създаванС Π½Π° Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²ΡŠΡ‡Π½ΠΈ ΠΈ дСмонстрационни ΡƒΠ΅Π± услуги ΠΊΠ°Ρ‚ΠΎ TryRuby. На настоящия Π΅Ρ‚Π°ΠΏ Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΡ€Ρ‚ΡŠΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° Π±Π°Π·ΠΎΠ²ΠΈΡ‚Π΅ тСстови ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π·Π° ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Thread API. ΠŸΠΎΡ€Ρ‚ΡŠΡ‚ ΡΡŠΡ‰ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π²Π»Π°ΠΊΠ½Π°, ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ.
  • YJIT Π² процСс JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, създадСн ΠΎΡ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π·Π° Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° Ρ‚ΡŠΡ€Π³ΠΎΠ²ΠΈΡ Shopify ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²Π° Π·Π° повишаванС Π½Π° производитСлността Π½Π° Ruby ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° Π½Π° Rails ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, Π΅ обявСн Π·Π° стабилСн ΠΈ Π³ΠΎΡ‚ΠΎΠ² Π·Π° производствСно ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. ΠšΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ използвания ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° MJIT JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ сС основава Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Ρ†Π΅Π»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° външСн ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ Π½Π° Π΅Π·ΠΈΠΊΠ° C, Π΅, Ρ‡Π΅ YJIT ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Lazy Basic Block Versioning (LBBV) ΠΈ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€. Π‘ LBBV, JIT ΠΏΡŠΡ€Π²ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° само Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° останалата част извСстно Π²Ρ€Π΅ΠΌΠ΅ ΠΏΠΎ-късно, слСд ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ са ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС. YJIT Π΅ Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½ Π·Π° x86-64 ΠΈ arm64/aarch64 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΈ Π½Π° Linux, MacOS, BSD ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ UNIX ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ.

    Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Ruby, ΠΊΠΎΠ΄ΡŠΡ‚ YJIT Π΅ написан Π½Π° Π΅Π·ΠΈΠΊΠ° Rust ΠΈ изисква ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ rustc 1.58.0+ Π·Π° компилация, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° YJIT Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ΠΎ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ ΠΈ Π½Π΅ Π΅ Π·Π°Π΄ΡŠΠ»ΠΆΠΈΡ‚Π΅Π»Π½ΠΎ. ΠŸΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° YJIT Π΅ рСгистрирано 41% ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° yjit-стСнд тСст Π² сравнСниС с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° интСрпрСтация.

    ИздаванС Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Ruby 3.2

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° срСщу Π°Ρ‚Π°ΠΊΠΈ Π·Π° ΠΎΡ‚ΠΊΠ°Π· Π½Π° услуга ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° външни Π΄Π°Π½Π½ΠΈ Π² Π½Π΅Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΈ ΠΈ ΠΎΡ‚Π½Π΅ΠΌΠ°Ρ‰ΠΈ Π²Ρ€Π΅ΠΌΠ΅ рСгулярни ΠΈΠ·Ρ€Π°Π·ΠΈ (ReDoS). ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΡŠΡ‚ Π·Π° ΡΡŠΠΏΠΎΡΡ‚Π°Π²ΡΠ½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°Ρ‚Π° Π·Π° запамСтяванС, Π΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½. НапримСр, Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° изпълнСниС Π½Π° ΠΈΠ·Ρ€Π°Π·Π° β€˜/^a*b?a*$/ =~ β€œa” * 50000 + β€œx”’ бСшС Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ ΠΎΡ‚ 10 Π½Π° 0.003 сСкунди. Π¦Π΅Π½Π°Ρ‚Π° Π½Π° оптимизацията Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° консумацията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, чиято консумация Π΅ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»Π½ΠΎ 10 ΠΏΡŠΡ‚ΠΈ ΠΏΠΎ-висока ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° Π²Ρ…ΠΎΠ΄Π½ΠΈΡ‚Π΅ Π΄Π°Π½Π½ΠΈ. Π’Ρ‚ΠΎΡ€Π°Ρ‚Π° мярка Π·Π° сигурност Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π΄Π° сС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€žRegexp.timeout = 1.0β€œ), ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ рСгулярният ΠΈΠ·Ρ€Π°Π· трябва Π΄Π° бъдС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π΅Π½.
  • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ Π΅ Ρ€Π΅ΠΆΠΈΠΌΡŠΡ‚ syntax_suggest, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° диагностициранСто Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈΡ‚Π΅ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с липсващ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π΅Π½ затварящ β€žΠΊΡ€Π°Π΅Π½β€œ ΠΈΠ·Ρ€Π°Π·. ΠΠ΅ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ `end', липсваща ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ° (`do', `def`, `if` ΠΈ Ρ‚.Π½.)? 1 клас ΠšΡƒΡ‡Π΅ > 2 Π΄Π΅Ρ„Π»Π°ΠΉΡ‚ > 3 ΠΊΡ€Π°ΠΉ 4 ΠΊΡ€Π°ΠΉ
  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΌΠ°Ρ€ΠΊΠΈΡ€Π°Π½Π΅ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° към Ρ€Π΅ΠΆΠΈΠΌΠ° Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° мСстополоТСниСто Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: test.rb:2:in `+': nil Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² Integer (TypeError) sum = ary [0] + Π°Ρ€ΠΈ [1] ^^^^^^
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ Π½ΠΎΠ² синтаксис Π·Π° прСнасочванС Π½Π° Π½Π°Π±ΠΎΡ€ΠΈ ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ към Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ: def foo(*) bar(*) end def baz(**) quux(**) end
  • ΠŸΡ€Π΅Π΄Π»Π°Π³Π° сС Ruby_vm/mjit/compiler - Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° стария MJIT JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, прСнаписан Π½Π° Π΅Π·ΠΈΠΊΠ° Ruby. Π“Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½ΠΎ Π΅, Ρ‡Π΅ MJIT Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π΅Π½ процСс, вмСсто Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² MJIT Ρ€Π°Π±ΠΎΡ‚Π½Π° нишка.
  • Π’ Bundler 2.4 ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° зависимости ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π½Π° вСрсия PubGrub, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΡΡŠΡ‰ΠΎ ΠΈ Π² pub ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡŠΡ€Π° Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° Π΅Π·ΠΈΠΊΠ° Dart. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΡ‚ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Molinillo ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ°Π²Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² RubyGems, Π½ΠΎ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Ρ‰Π΅ бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½ ΠΎΡ‚ PubGrub Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅.
  • Актуализирани вСрсии Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ gem ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Ρ‚Π΅Π·ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€