XNUMX๋
์ ๊ฐ๋ฐ ๋์
์ฃผ์
- ์คํ์
์ง์ ํจํด ๋งค์นญ(ํจํด ๋งค์นญ ) ์ฃผ์ด์ง ๊ฐ์ฒด๋ฅผ ๋ฐ๋ณตํ๊ณ ํจํด ์ผ์น๊ฐ ์์ผ๋ฉด ๊ฐ์ ํ ๋นํฉ๋๋ค.์ผ์ด์ค [0, [1, 2, 3]] in [a, [b, *c]] pa #=> 0
pb #=> 1
pc #=> [2, 3] ๋๊ฒฝ์ฐ {a: 0, b: 1}
{a:0,x:1}์์
:์ ๊ทผ๋ถ๊ฐ
{a: 0, b: var}์์
p ๋ณ์ #=> 1
end - ๋ํํ ๊ณ์ฐ irb(REPL, Read-Eval-Print-Loop) ์์๋ ์ด์ readline ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ์ฌ๋ฌ ์ค ํธ์ง์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฆฌ๋ผ ์ธ ๋ฃจ๋น๋ก ์์ฑ๋์์ต๋๋ค. 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({ํค: 42}) #๊ฒฝ๊ณ
def foo(**kw); ๋; foo({key: 42}) # ๊ฒฝ๊ณ
def foo(ํค: 42); ๋; foo(**{key: 42}) # ํ์ธ
def foo(**kw); ๋; foo(**{key: 42}) # ํ์ธdef foo(h, **kw); ๋; foo(key: 42) # ๊ฒฝ๊ณ
def foo(h, ํค: 42); ๋; foo(ํค: 42) #๊ฒฝ๊ณ
def foo(h, **kw); ๋; foo({key: 42}) # ํ์ธ
def foo(h, ํค: 42); ๋; foo({key: 42}) # ํ์ธ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) # ํ์ธdef foo(opt={}); ๋; foo( ํค: 42 ) # ํ์ธ
def foo(h, **nil); ๋; foo(ํค: 1) # ์ธ์ ์ค๋ฅ
def foo(h, **nil); ๋; foo(**{key: 1}) # ArgumentError
def foo(h, **nil); ๋; foo("str" โโโโ=> 1) # ArgumentError
def foo(h, **nil); ๋; foo({key: 1}) # ํ์ธ
def foo(h, **nil); ๋; foo({"str" โโโโ=> 1}) # ํ์ธh = {}; def foo(*a) end; foo(**h) # [] h = {}; def foo(a) ๋; foo(**h) # {} ๋ฐ ๊ฒฝ๊ณ
h = {}; def foo(*a) end; foo(h) # [{}] h = {}; def foo(a) ๋; foo(h) # {} -
๊ธฐํ ๋ธ๋ก ๋งค๊ฐ๋ณ์์ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง ๊ธฐ๋ณธ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํฉ๋๋ค.[1, 2, 3].each { puts @1 } # like [1, 2, 3].each { |i| ๋ด๊ฐ }
- ์ด๊ธฐ๊ฐ์ด ์๋ ๋ฒ์์ ๋ํ ์คํ์ ์ง์์
๋๋ค.
ary[..3] # ary[0..3]๊ณผ ๋์ผ rel.where(ํ๋งค: ..100)
- ๊ฐ ์์๊ฐ ๋ฐ์ํ๋ ํ์๋ฅผ ๊ณ์ฐํ๋ Enumerable#tally ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
["a", "b", "c", "b"].tally
#=> {โaโ=>1, โbโ=>2, โcโ=>1} - "self" ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ ๋น๊ณต๊ฐ ๋ฉ์๋ ํธ์ถ์ด ํ์ฉ๋ฉ๋๋ค.
๋ํธ
end
๋น๊ณต๊ฐ : foo
์๊ธฐ.foo - ๊ฒ์ผ๋ฅธ(Enumerator::Lazy) ์ด๊ฑฐํ์์ ์ผ๋ฐ ์ด๊ฑฐํ์ ์์ฑํ๋ Enumerator::Lazy#eager ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
a = %w(foo ๋ฐ ๋ฐ์ฆ)
e = a.lazy.map {|x| x.upcase }.map {|x| x + "!" }.์ด๋ ฌํ
p e.class #=> ์ด๊ฑฐ์
e.map {|x| x + "?" } #=> ["FOO!?", "BAR!?", "BAZ!?"] - ์คํ์ ์ธ JIT ์ปดํ์ผ๋ฌ์ ๊ฐ๋ฐ์ด ๊ณ์๋์ด Ruby ์ธ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. Ruby์์ ์ ์๋ JIT ์ปดํ์ผ๋ฌ๋ ๋จผ์ C ์ฝ๋๋ฅผ ๋์คํฌ์ ์์ฑํ ํ ์ธ๋ถ C ์ปดํ์ผ๋ฌ๋ฅผ ํธ์ถํ์ฌ ๊ธฐ๊ณ ๋ช ๋ น์ด๋ฅผ ์์ฑํฉ๋๋ค(GCC, Clang ๋ฐ Microsoft VC++ ์ง์). ์ ๋ฒ์ ์์๋ ํ์ํ ๊ฒฝ์ฐ ์ธ๋ผ์ธ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ๊ตฌํํ๊ณ , ์ปดํ์ผ ์ค ์ต์ ํ ๋ชจ๋๋ฅผ ์ ํ์ ์ผ๋ก ์ ์ฉํ๋ฉฐ, "--jit-min-calls"์ ๊ธฐ๋ณธ๊ฐ์ด 5์์ 10000์ผ๋ก ์ฆ๊ฐํ๊ณ , "--jit-max-cache"๋ฅผ ๊ตฌํํฉ๋๋ค. 1000์์ 100์ผ๋ก.
- CGI.escapeHTML, Monitor ๋ฐ MonitorMixin์ ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค.
- Module#name, true.to_s, false.to_s ๋ฐ nil.to_s๋ ์ง์ ๋ ๊ฐ์ฒด์ ๋ํด ๋ณ๊ฒฝ๋์ง ์์ ๋ฌธ์์ด์ด ๋ฐํ๋๋๋ก ํฉ๋๋ค.
- RubyVM::InstructionSequence#to_binary ๋ฉ์๋์ ์ํด ์์ฑ๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ํฌ๊ธฐ๊ฐ ๊ฐ์๋์์ต๋๋ค.
- ๋ค์์ ํฌํจํ ๋ด์ฅ ๊ตฌ์ฑ ์์์ ์
๋ฐ์ดํธ๋ ๋ฒ์
๋ฒ๋ค๋ฌ 2.1.2, RubyGems 3.1.2,
Racc 1.4.15,
CSV 3.1.2, REXML 3.2.3,
RSS 0.2.8,
๋ฌธ์์ด ์ค์บ๋ 1.0.3; - ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ธฐ๋ณธ ๋ฐฐํฌ์์ ์ธ๋ถ gem ํจํค์ง๋ก ์ด๋๋์์ต๋๋ค.
CMath(cmath ๋ณด์),
Scanf (์ค์บํ ๋ณด์),
์(์ ๋ณด์)
๋๊ธฐํ ์ฅ์น(๋๊ธฐํ ๋ณด์),
ThreadsWait(์ค์จ์ดํธ ๋ณด์),
E2MM(e2mmap ์ ฌ). - ๊ธฐ๋ณธ stdlib ๋ชจ๋์ rubygems.org์ ๊ฒ์๋์ด ์์ต๋๋ค:
๊ธฐ์ค,
CG,
๋๋ฆฌ์,
getoptlong,
๋ทํ,
net-smtp
์คํ3,
p์คํ ์ด,
ํ๋์ฉ ์ผ์ด๋๋ ๊ฒ. ๋ชจ๋ํฐ ๋ชจ๋์ด rubygems.org๋ก ์ด๋๋์ง ์์์ต๋๋ค.
๊ด์ฐฐ์,
์๊ฐ ์ด๊ณผ,
์ถ์ ๊ธฐ,
๋ฏธ์,
Ruby-core๋ก๋ง ์ ๊ณต๋๋ yaml์ ๋๋ค. - ์ด์ Ruby๋ฅผ ๋น๋ํ๋ ค๋ฉด C99 ํ์ค์ ์ง์ํ๋ C ์ปดํ์ผ๋ฌ๊ฐ ํ์ํฉ๋๋ค.
์ถ์ฒ : opennet.ru