Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.ruby > #4328

Re: how to make eval() faster?

From Robert Klemme <shortcutter@googlemail.com>
Newsgroups comp.lang.ruby
Subject Re: how to make eval() faster?
Date 2011-05-12 02:26 -0500
Organization Service de news de lacave.net
Message-ID <BANLkTiktso12PvHEENASgEVfoqV3TXZ68Q@mail.gmail.com> (permalink)
References <0229c425b2bf06473387c4f47263eb93@ruby-forum.com> <4DCB6EAA.7010101@gmail.com> <4c16a97bbcba0b1d4a451dc4f577e8be@ruby-forum.com>

Show all headers | View raw


On Thu, May 12, 2011 at 8:08 AM, Zd Yu <zdyu2000@gmail.com> wrote:
> Joel VanderWerf wrote in post #998154:
>> On 05/11/2011 09:53 PM, Zd Yu wrote:
>>> make it faster?
>> Can you eval your formulas into methods, and call the methods on the
>> data samples?
>
> No. I need flexibility, i.e., allow users to define their own formulas
> in the configuration file.

I believe you did not fully understand what Joel suggested.  You do
have that flexibility and you need to invoke eval only _once_ per
formula (for the initial compilation of the formula) but not for every
evaluation.  Example:

# really too simplistic!
formulas = Hash.new do |h, form|
  expr = form.sub(/\A.*?=\s*/, '')
  vars = expr.scan(/[a-z]\w*/i).uniq
  code = "lambda do |#{vars.join(', ')}| #{expr} end"
  p vars, code
  h[form] = eval(code)
end

# test
[
  'x = y * 2 + z',
  'z = y * x',
].each do |f|
  puts f

  10.times do |i|
    printf "%s: %d %d => %f\n", f, i, i*2, formulas[f][i, i*2]
  end
end

I'd prefer the DSL approach though.

Kind regards

robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Back to comp.lang.ruby | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-11 23:53 -0500
  Re: how to make eval() faster? Joel VanderWerf <joelvanderwerf@gmail.com> - 2011-05-12 00:22 -0500
    Re: how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-12 01:08 -0500
      Re: how to make eval() faster? Markus Schirp <mbj@seonic.net> - 2011-05-12 01:13 -0500
        Re: how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-12 01:18 -0500
          Re: how to make eval() faster? Markus Schirp <mbj@seonic.net> - 2011-05-12 01:42 -0500
      Re: how to make eval() faster? Robert Klemme <shortcutter@googlemail.com> - 2011-05-12 02:26 -0500
  Re: how to make eval() faster? Zd Yu <zdyu2000@gmail.com> - 2011-05-12 01:37 -0500
    Re: how to make eval() faster? Stu <stu@rubyprogrammer.net> - 2011-05-12 01:55 -0500
      Re: how to make eval() faster? Xavier Noria <fxn@hashref.com> - 2011-05-12 02:14 -0500

csiph-web