Fast Code for Ruby
by
秒速284km
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Fast Code for Ruby @284km
Slide 2
Slide 2 text
͍͍͞ʂ
Slide 3
Slide 3 text
ࠓ͢͜ͱ Ruby Ͱ͍ίʔυΛॻ͘ benchmark_driver ͕͘͢͝ྑ͍ Ruby ͷָ͠ΈํΛͻͱͭ
Slide 4
Slide 4 text
͍ίʔυΛॻ͘
Slide 5
Slide 5 text
͍ίʔυΛॻ͘ ଌఆ ϕϯνϚʔΧʔ
Slide 6
Slide 6 text
ϕϯνϚʔΧʔ benchmark.rb (ඪ४ఴϥΠϒϥϦ) evanphx/benchmark-ips k0kubun/benchmark_driver
Slide 7
Slide 7 text
͍ίʔυ ಉ݁͡Ռ͕ಘΒΕΔෳͷॻ͖ํ ܭଌͯ͠ɺ͍΄͏͕͍ લఏ: ࠓճͷϕϯνϚʔΫͷ MBP Ͱ࣮ߦͨ͠ͷͰ͢
Slide 8
Slide 8 text
benchmark_driver e.g. ෳͷॲཧܥ ग़ྗܗࣜ (.md Մ)
Slide 9
Slide 9 text
Hash#keys.each Hash#each_key
Slide 10
Slide 10 text
Hash#keys.each Hash#each_key
Slide 11
Slide 11 text
͍ίʔυ ݅ʹґଘ͢Δ߹͕͋Δ ඞͣͦͷॻ͖ํ͕ྑ͍ͱݴ͑ͳ͍ έʔε͕͋Δ (e.g. gsub / tr)
Slide 12
Slide 12 text
gsub tr
Slide 13
Slide 13 text
gsub tr
Slide 14
Slide 14 text
gsub tr
Slide 15
Slide 15 text
gsub tr
Slide 16
Slide 16 text
gsub tr
Slide 17
Slide 17 text
gsub tr
Slide 18
Slide 18 text
͍ίʔυ Ͳ͏͍͏࣌ʹ༗ޮ͔ΛΔͱΑ͞ ͦ͏ ࣮Λ͘ͱ͔Δ͜ͱ͕͋Δ
Slide 19
Slide 19 text
Bang method ഁյత / ඇഁյత ͳϝιουͷྫ ͜ͷ࣮ݟ͍͢ͱࢥ͍·͢
Slide 20
Slide 20 text
Hash#merge Hash#merge! ͜͜Ͱαϯϓϧίʔυͦ Ε΄ͲॏཁͰͳ͘ɺ
Slide 21
Slide 21 text
Hash#merge Hash#merge! ͜͜Ͱαϯϓϧίʔυͦ Ε΄ͲॏཁͰͳ͘ɺ ࠩͷཧ༝ΛͬͯΈΔ
Slide 22
Slide 22 text
Hash#merge Hash#merge! dup ͨ͠ͷΛͯ݁͠ ՌΛฦ͍ͯ͠ΔͷͰͦͷ ͍
Slide 23
Slide 23 text
͞ ͱɺಡΈ͢͞
Slide 24
Slide 24 text
each_with_index while
Slide 25
Slide 25 text
each_with_index while
Slide 26
Slide 26 text
ಡΈ͢͞େࣄ ಡΈ͢͞ͱ…(ޙͰʹ͠·͢ ͕ yield / Proc#call ͦ͏Ͱ͢ΑͶ) ࣄͰॻ͘ίʔυͰɺνʔϜͷࣄ ͳͲʹΑͬͯԿ͕ಡΈ͍͔͢ม ΘΓͦ͏Ͱ͋Δʢͷײ
Slide 27
Slide 27 text
Rubocop::Cop::Performance ύϑΥʔϚϯε͕վળ͞Εͦ͏ͳͱ ͜ΖΛࢦఠͯ͘͠ΕΔ ੩తղੳπʔϧʹཔΔ͜ͱ༗ޮ ͜ͷؒͻͱͭࢦఠ͞Ε·ͨ͠
Slide 28
Slide 28 text
String#match String#match?
Slide 29
Slide 29 text
String#match String#match?
Slide 30
Slide 30 text
String#match String#match?
Slide 31
Slide 31 text
String#match String#match? MatchData ΦϒδΣΫτ Λฦ͢ʢϚονͨ͠߹ʣ
Slide 32
Slide 32 text
String#match String#match? MatchData ΦϒδΣΫτ Λฦ͢ʢϚονͨ͠߹ʣ rb_reg_match_p() ɺ Ϛονͨ͠Β true ͠ͳ͚ Ε false Λฦ͢ɻ
Slide 33
Slide 33 text
Ruby 2.5 ͍ͬͯ·͔͢ʁ όʔδϣϯΞοϓͱڞʹվળ͞ΕΔ ෦͓ͬͯ͘ͱศར
Slide 34
Slide 34 text
unpack1 unpack.first String#unpack1 2.4 Ͱೖ ͬͨ
Slide 35
Slide 35 text
unpack1 unpack.first String#unpack1 2.4 Ͱೖ ͬͨ
Slide 36
Slide 36 text
yield Proc#call 2.5 Ͱ Proc#call ͕͘ ͳͬͨ
Slide 37
Slide 37 text
yield Proc#call
Slide 38
Slide 38 text
yield Proc#call
Slide 39
Slide 39 text
࠷৽ͷ Ruby ͬͯΔͱࣄָ͕ʹͳͬͨΓ͢Δ Δͱɺ͏ͷָ͕͘͠ͳΔϧʔϓ JIT Λ༗ޮʹ͢Δͱɺ݁ՌͷมΘΔ ϕϯνϚʔΫ͋Γͦ͏ (2.6.0)
Slide 40
Slide 40 text
·ͱΊ ʹ;͐ʔͰʔͼΔ benchmark_driver ͕͘͢͝ྑ͍ Fast Code ͱ͍͏ Ruby ͷָ͠Έํ Ruby ͷ࣮Λ͍ͯΈΔ ೖΓޱͱͯ͠ͷϕϯνϚʔΫྑ͍