File tree Expand file tree Collapse file tree 2 files changed +58
-0
lines changed Expand file tree Collapse file tree 2 files changed +58
-0
lines changed Original file line number Diff line number Diff line change @@ -133,6 +133,26 @@ Comparison:
133133module_eval with string: 1129.7 i/s - 1.19x slower
134134```
135135
136+ ##### Method vs Forwarded method vs Delegated method [ code] ( code/general/method-vs-forwarded-method-vs-delegated-method.rb )
137+
138+ ```
139+ $ ruby -v code/general/method-vs-forwarded-method-vs-delegated-method.rb
140+ ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin19]
141+ Warming up --------------------------------------
142+ method 247.079k i/100ms
143+ forwarded method 183.323k i/100ms
144+ delegated method 136.666k i/100ms
145+ Calculating -------------------------------------
146+ method 2.481M (± 0.5%) i/s - 12.601M in 5.078755s
147+ forwarded method 1.830M (± 0.8%) i/s - 9.166M in 5.009606s
148+ delegated method 1.365M (± 0.6%) i/s - 6.833M in 5.006191s
149+
150+ Comparison:
151+ method: 2481182.0 i/s
152+ forwarded method: 1829835.8 i/s - 1.36x (± 0.00) slower
153+ delegated method: 1365026.7 i/s - 1.82x (± 0.00) slower
154+ ```
155+
136156##### ` raise ` vs ` E2MM#Raise ` for raising (and defining) exeptions [ code] ( code/general/raise-vs-e2mmap.rb )
137157
138158Ruby's [ Exception2MessageMapper module] ( http://ruby-doc.org/stdlib-2.2.0/libdoc/e2mmap/rdoc/index.html ) allows one to define and raise exceptions with predefined messages.
Original file line number Diff line number Diff line change 1+ require 'benchmark/ips'
2+ require 'forwardable'
3+
4+ class AdvancedArray < SimpleDelegator
5+ def initialize ( *args )
6+ @args = args
7+ self . __setobj__ ( @args )
8+ end
9+
10+ def push ( value )
11+ @args . push ( value )
12+ end
13+
14+ extend Forwardable
15+ def_delegator :@args , :push , :forwarded_push
16+ end
17+
18+ def fast
19+ array = AdvancedArray . new
20+ array . push ( 1 ) # Simple method call
21+ end
22+
23+ def slow
24+ array = AdvancedArray . new
25+ array . forwarded_push ( 1 ) # Forwarded method call
26+ end
27+
28+ def slowest
29+ array = AdvancedArray . new
30+ array . pop ( 1 ) # Delegated method call
31+ end
32+
33+ Benchmark . ips do |x |
34+ x . report ( 'method' ) { fast }
35+ x . report ( 'forwarded method' ) { slow }
36+ x . report ( 'delegated method' ) { slowest }
37+ x . compare!
38+ end
You can’t perform that action at this time.
0 commit comments