Guys, thanks you!
And to close subject the last question. What do you think about this 
replace:

loop do
  break if node.equal? NULL
  yield node
  node = node.parent
end

to

while !node.equal? NULL
  yield node
  node = node.parent
end

In this case readability and speed are higher. 


суббота, 7 мая 2016 г., 10:25:08 UTC+3 пользователь Xavier Noria написал:
>
> Exactly.
>
> On Saturday, 7 May 2016, Allen Madsen <allen.c...@gmail.com <javascript:>> 
> wrote:
>
>> I believe what Xavier means is that you need to demonstrate at the
>> places where you would do the replacement that the speed up is worth
>> the readability cost. If on a single request, that code executes once,
>> it's probably not noticeable. That's why in the benchmark you need to
>> run it 100 million times. If you can demonstrate that the place
>> containing the `loop` is a hotspot that gets executed many times in a
>> request, then the optimization is probably justified. That's why it
>> wouldn't just be a find and replace for all instances.
>> Allen Madsen
>> http://www.allenmadsen.com
>>
>>
>> On Fri, May 6, 2016 at 7:47 AM, Andrey Molchanov <> wrote:
>> > Thanks for your feedback.
>> > I agree with you about use idioms for better readable code. Its cool, 
>> but
>> > Rails has many places where this not use. A lot of code can be corrected
>> > according to this, but this is not done.
>> > And I thought, why not use it in favor of speed?
>> > That is what I was based when wrote this message.
>> >
>> >
>> > пятница, 6 мая 2016 г., 14:31:40 UTC+3 пользователь Xavier Noria 
>> написал:
>> >>
>> >> In general, the Rails code base wants to use Ruby idiomatically.
>> >>
>> >> loop is the most succinct idiom in Ruby for those kinds of loops, see 
>> for
>> >> example:
>> >>
>> >>
>> >> 
>> https://github.com/rails/rails/blob/254f57ca3668398a5fcfd4f63be5d91c4c3b1cd4/actioncable/lib/action_cable/connection/stream_event_loop.rb#L66
>> >>
>> >> If a Ruby programmer sees a while true there instead, generally 
>> speaking
>> >> they would shake their heads a little bit. Why is this not a loop? A 
>> comment
>> >> would be needed: "This while true is here for performance".
>> >>
>> >> When is it OK to do a little strange thing for performance? Where it
>> >> matters, not systematically across the code base. So, for example, if 
>> you
>> >> change loop with while true in the previous example, probably there 
>> won't be
>> >> any noticeable difference. So you just don't.
>> >>
>> >> And if the gain is tiny, the cost of writing something less idiomatic,
>> >> elegant, or readable is still not worth it. Because code has to be 
>> read.
>> >>
>> >> You depart from this with a scalpel, precisely where it pays off.
>> >>
>> > --
>> > You received this message because you are subscribed to the Google 
>> Groups
>> > "Ruby on Rails: Core" group.
>> > To unsubscribe from this group and stop receiving emails from it, send 
>> an
>> > email to rubyonrails-core+unsubscr...@googlegroups.com.
>> > To post to this group, send email to rubyonrails-core@googlegroups.com.
>> > Visit this group at https://groups.google.com/group/rubyonrails-core.
>> > For more options, visit https://groups.google.com/d/optout.
>>
>> --
>> You received this message because you are subscribed to the Google Groups 
>> "Ruby on Rails: Core" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to rubyonrails-core+unsubscr...@googlegroups.com.
>> To post to this group, send email to rubyonrails-core@googlegroups.com.
>> Visit this group at https://groups.google.com/group/rubyonrails-core.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> -- 
> Sent from Gmail Mobile
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-core+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-core@googlegroups.com.
Visit this group at https://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.

Reply via email to