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

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

ΠžΡΠ½ΠΎΠ²Π½Π°Ρ‚Π° подобрСния:

  • ЕкспСримСнталСн ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ° ΡΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ ΠΌΠΎΠ΄Π΅Π» (Π‘ΡŠΠ²ΠΏΠ°Π΄Π°Ρ‰ ΠΌΠΎΠ΄Π΅Π»), ΠΊΠΎΠΈΡ‚ΠΎ Π²ΠΈ позволяват Π΄Π° ΠΈΡ‚Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ Π²ΡŠΡ€Ρ…Ρƒ Π΄Π°Π΄Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚ ΠΈ Π΄Π° присвоитС стойност, Π°ΠΊΠΎ ΠΈΠΌΠ° съвпадСниС с шаблона.

    случай [0, [1, 2, 3]] Π² [a, [b, *c]] pa #=> 0
    pb #=> 1
    pc #=> [2, 3] ΠΊΡ€Π°ΠΉ

    случай {a: 0, b: 1}
    Π² {a: 0, x: 1}
    : Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ΅Π½
    Π² {a: 0, b: var}
    p ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° #=> 1
    ΠΊΡ€Π°ΠΉ

  • ΠžΠ±Π²ΠΈΠ²ΠΊΠ°Ρ‚Π° Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ изчислСния irb (REPL, Read-Eval-Print-Loop) Π²Π΅Ρ‡Π΅ Ρ€Π°Π·ΠΏΠΎΠ»Π°Π³Π° с ΠΌΠ½ΠΎΠ³ΠΎΡ€Π΅Π΄ΠΎΠ²ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€Π°Π½Π΅, Ρ€Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠ° с readline прСнасочванС, написан Π½Π° Ruby. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° rdoc Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΏΡ€Π΅Π³Π»Π΅ΠΆΠ΄Π°Ρ‚Π΅ справочна информация Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ класовС, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π² irb. ΠžΡΠΈΠ³ΡƒΡ€Π΅Π½ΠΎ Ρ†Π²Π΅Ρ‚Π½ΠΎ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€Ρ‚Π°Π²Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ Ρ‡Ρ€Π΅Π· Binding#irb ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΎΡ‚ Π±Π°Π·ΠΎΠ² клас.

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

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ ΡΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ (Compaction GC), ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° област ΠΎΡ‚ ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, Ρ€Π΅ΡˆΠ°Π²Π°ΠΉΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ с производитСлността ΠΈ консумацията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅Π½ΠΈ ΠΎΡ‚ фрагмСнтацията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, която сС случва Π² някои многонишкови Ruby прилоТСния. Π—Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π²ΡŠΡ€Ρ…Ρƒ ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°Ρ‚Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎ GC.compact ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΡ‚Π΅ броя Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡ‚Π΅ страници с ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ Π΄Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ ΠΊΡƒΠΏΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ
    CoW (ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΏΡ€ΠΈ запис).

  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Π·Π° раздСлянС Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ въз основа Π½Π° позиция Π² списъка (β€ždef foo(a,b,c)β€œ) ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ (β€ždef foo(key: val)β€œ). Автоматичното ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π°Π½Π΅ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ въз основа Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ ΠΈ позиция Π΅ ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ ΠΈ няма Π΄Π° сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° Π² ΠΊΠ»ΠΎΠ½Π° Ruby 3.0. По-ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, ΠΎΡ‚Ρ…Π²ΡŠΡ€Π»Π΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° послСдния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠ°Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ°, ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ Π΄ΡƒΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ послСдСн Ρ…Π΅Ρˆ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ ΠΈ раздСлянСто Π½Π° послСдния Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½ΠΈ ΠΈ ΠΊΠ»ΡŽΡ‡ΠΎΠ²ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.

    def foo(ΠΊΠ»ΡŽΡ‡: 42); ΠΊΡ€Π°ΠΉ; foo({key: 42}) # ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
    def foo(**kw); ΠΊΡ€Π°ΠΉ; foo({key: 42}) # ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
    def foo(ΠΊΠ»ΡŽΡ‡: 42); ΠΊΡ€Π°ΠΉ; foo(**{key: 42}) # OK
    def foo(**kw); ΠΊΡ€Π°ΠΉ; foo(**{key: 42}) # OK

    def foo(h, **kw); ΠΊΡ€Π°ΠΉ; foo(ΠΊΠ»ΡŽΡ‡: 42) # ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
    def foo(h, ΠΊΠ»ΡŽΡ‡: 42); ΠΊΡ€Π°ΠΉ; foo(ΠΊΠ»ΡŽΡ‡: 42) # ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
    def foo(h, **kw); ΠΊΡ€Π°ΠΉ; foo({ΠΊΠ»ΡŽΡ‡: 42}) # OK
    def foo(h, ΠΊΠ»ΡŽΡ‡: 42); ΠΊΡ€Π°ΠΉ; foo({ΠΊΠ»ΡŽΡ‡: 42}) # OK

    def foo(h={}, ΠΊΠ»ΡŽΡ‡: 42); ΠΊΡ€Π°ΠΉ; foo("key" => 43, key: 42) # ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
    def foo(h={}, ΠΊΠ»ΡŽΡ‡: 42); ΠΊΡ€Π°ΠΉ; foo({"key" => 43, key: 42}) # ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
    def foo(h={}, ΠΊΠ»ΡŽΡ‡: 42); ΠΊΡ€Π°ΠΉ; foo({"key" => 43}, key: 42) # OK

    def foo(opt={}); ΠΊΡ€Π°ΠΉ; foo(ΠΊΠ»ΡŽΡ‡: 42) # OK

    def foo(h, **nil); ΠΊΡ€Π°ΠΉ; foo(ΠΊΠ»ΡŽΡ‡: 1) #ArgumentError
    def foo(h, **nil); ΠΊΡ€Π°ΠΉ; foo(**{key: 1}) # ArgumentError
    def foo(h, **nil); ΠΊΡ€Π°ΠΉ; foo("str" ​​​​=> 1) # ArgumentError
    def foo(h, **nil); ΠΊΡ€Π°ΠΉ; foo({ΠΊΠ»ΡŽΡ‡: 1}) # ОК
    def foo(h, **nil); ΠΊΡ€Π°ΠΉ; foo({"str" ​​​​=> 1}) # ОК

    h = {}; def foo(*a) ΠΊΡ€Π°ΠΉ; foo(**h) # [] h = {}; def foo(a) ΠΊΡ€Π°ΠΉ; foo(**h) # {} ΠΈ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
    h = {}; def foo(*a) ΠΊΡ€Π°ΠΉ; foo(h) # [{}] h = {}; def foo(a) ΠΊΡ€Π°ΠΉ; foo(h) # {}

  • Π’ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π·Π° Π±Π»ΠΎΠΊΠΎΠ²ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ.

    [1, 2, 3].each { puts @1 } # ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΊΠ°Ρ‚ΠΎ [1, 2, 3].each { |i| поставя Π°Π· }

  • ЕкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ Π±Π΅Π· ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½Π° стойност.

    ary[..3] # ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ary[0..3] rel.where(sales: ..100)

  • Π”ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Enumerable#tally, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‚Ρ‡ΠΈΡ‚Π° ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡŠΡ‚ΠΈ сС появява всСки Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚.

    ["a", "b", "c", "b"].tally
    #=> {"a"=>1, "b"=>2, "c"=>1}

  • ПозволСно Π΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° частСн ΠΌΠ΅Ρ‚ΠΎΠ΄ с Π±ΡƒΠΊΠ²Π°Π»Π½ΠΎΡ‚ΠΎ "self"

    def foo
    ΠΊΡ€Π°ΠΉ
    Π»ΠΈΡ‡Π½ΠΎ :foo
    self.foo

  • Π”ΠΎΠ±Π°Π²Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ Enumerator::Lazy#eager Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄ΠΎΠ²Π½ΠΎ изброяванС ΠΎΡ‚ ΠΌΡŠΡ€Π·Π΅Π»ΠΈΠ² ΠΈΠ·Π±Ρ€ΠΎΠΈΡ‚Π΅Π» (Enumerator::Lazy).

    a = %w(foo bar baz)
    e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.Π½Π΅Ρ‚ΡŠΡ€ΠΏΠ΅Π»ΠΈΠ²
    p e.class #=> Π˜Π·Π±Ρ€ΠΎΠΈΡ‚Π΅Π»
    p e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"]

  • ΠŸΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° СкспСримСнталСн JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ производитСлността Π½Π° прилоТСнията Π½Π° Π΅Π·ΠΈΠΊΠ° Ruby. JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΡŠΡ‚ Π½Π° Ruby ΠΏΡŠΡ€Π²ΠΎ записва C ΠΊΠΎΠ΄ Π½Π° диска ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π° външСн C ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, Π·Π° Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° машинни инструкции (ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° GCC, Clang ΠΈ Microsoft VC++). Новата вСрсия ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΎ внСдряванС, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, осигурява сС сСлСктивно ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° Ρ€Π΅ΠΆΠΈΠΌΠΈΡ‚Π΅ Π½Π° оптимизация ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° компилация, стойността ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π½Π° β€ž--jit-min-callsβ€œ Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° ΠΎΡ‚ 5 Π½Π° 10000 ΠΈ β€ž--jit-max- ΠΊΠ΅Ρˆβ€ ΠΎΡ‚ 1000 Π½Π° 100 .
  • ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° производитСлност Π½Π° CGI.escapeHTML, Monitor ΠΈ MonitorMixin.
  • Module#name, true.to_s, false.to_s ΠΈ nil.to_s Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Ρ‚, Ρ‡Π΅ сС Π²Ρ€ΡŠΡ‰Π° Π½ΠΈΠ·, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ Π½Π΅ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½ Π·Π° посочСния ΠΎΠ±Π΅ΠΊΡ‚.
  • Π Π°Π·ΠΌΠ΅Ρ€ΡŠΡ‚ Π½Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° RubyVM::InstructionSequence#to_binary;, Π΅ Π½Π°ΠΌΠ°Π»Π΅Π½.
  • Актуализирани вСрсии Π½Π° Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ
    Bundler 2.1.2, RubyGems 3.1.2,
    Racc 1.4.15,
    CSV 3.1.2, REXML 3.2.3,
    RSS 0.2.8,
    StringScanner 1.0.3;

  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈΡ‚Π΅ са прСмСстСни ΠΎΡ‚ основния ΠΏΠ°ΠΊΠ΅Ρ‚ към външни gem ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ
    CMath (cmath gem),
    Scanf (сканф ΡΠΊΡŠΠΏΠΎΡ†Π΅Π½Π΅Π½ камък),
    Π Π°ΠΊΠΎΠ²ΠΈΠ½Π° (ΡΠΊΡŠΠΏΠΎΡ†Π΅Π½Π΅Π½ камък)
    Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ‚ΠΎΡ€ (ΡΠΊΡŠΠΏΠΎΡ†Π΅Π½Π΅Π½ камък Π·Π° синхронизиранС),
    ThreadsWait (thwait gem),
    E2MM (e2mmap ΡΠΊΡŠΠΏΠΎΡ†Π΅Π½Π΅Π½ камък).

  • ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ stdlib са ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ Π½Π° rubygems.org:
    ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»,
    cgi,
    Π΄Π΅Π»Π΅Π³Π°Ρ‚
    getoptlong,
    Π½Π΅Ρ‚-ΠΏΠΎΠΏ,
    net-smtp
    ΠΎΡ‚Π²ΠΎΡ€Π΅Π½3,
    pstore,
    Π΅Π΄ΠΈΠ½ΠΈΡ‡Π΅Π½. ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ Π·Π° наблюдСниС Π½Π΅ са прСмСстСни Π½Π° rubygems.org
    Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚Π΅Π»
    Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚
    ΠΈΠ·ΠΎΡ‚ΠΎΠΏ
    мразя,
    yaml, ΠΊΠΎΠΈΡ‚ΠΎ сС доставят само Π² ruby-core.

  • Π˜Π·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ruby Π²Π΅Ρ‡Π΅ изисква C ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° стандарта C99.

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

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