Π‘Π»Π΅Π΄ Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅
ΠΡΠ½ΠΎΠ²Π½Π°ΡΠ°
- ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½
ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° ΡΡΠ²ΠΏΠ°Π΄Π°Ρ ΠΌΠΎΠ΄Π΅Π» (Π‘ΡΠ²ΠΏΠ°Π΄Π°Ρ ΠΌΠΎΠ΄Π΅Π» ), ΠΊΠΎΠΈΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΠΈΡΠ΅ΡΠΈΡΠ°ΡΠ΅ Π²ΡΡΡ Ρ Π΄Π°Π΄Π΅Π½ ΠΎΠ±Π΅ΠΊΡ ΠΈ Π΄Π° ΠΏΡΠΈΡΠ²ΠΎΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π°ΠΊΠΎ ΠΈΠΌΠ° ΡΡΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Ρ ΡΠ°Π±Π»ΠΎΠ½Π°.ΡΠ»ΡΡΠ°ΠΉ [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 ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ ΠΎΡ Π±Π°Π·ΠΎΠ² ΠΊΠ»Π°Ρ. - ΠΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ΅Π½ ΡΡΠ±ΠΈΡΠ°Ρ Π½Π° ΠΎΡΠΏΠ°Π΄ΡΡΠΈ (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}) # OKdef foo(h, **kw); ΠΊΡΠ°ΠΉ; foo(ΠΊΠ»ΡΡ: 42) # ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
def foo(h, ΠΊΠ»ΡΡ: 42); ΠΊΡΠ°ΠΉ; foo(ΠΊΠ»ΡΡ: 42) # ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅
def foo(h, **kw); ΠΊΡΠ°ΠΉ; foo({ΠΊΠ»ΡΡ: 42}) # OK
def foo(h, ΠΊΠ»ΡΡ: 42); ΠΊΡΠ°ΠΉ; foo({ΠΊΠ»ΡΡ: 42}) # OKdef 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) # OKdef 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