A
Adam Strzelecki
If it possible to call Proc instance with custom bindings. I am aware
that Proc gets its bindings at the moment it is declared (created). And
I can access them with proc.bindings, but is there a way to do
Proc#bindings= or to do something similar to Kern.eval(src, bindings)
2nd param?
The reason I am asking, is that I am thinking about improving
performance of template engines that generate Ruby code upon parsing
template, and then call eval(@precompiledsrc) upon each render of
template.
I believe it would be faster if instead of generating just Ruby code
template engines such as ERB or Haml were doing at precomilation stage
also:
@proc = eval("Proc.new { #{@precompiledsrc} }")
and upon each request (render) calling:
@proc.bindings = call_locals
@proc.call
Instead of just calling eval(@precompiled, call_locals) upon each render
(request).
We could spare CPU cycles that are parsing all over again same Ruby
code.
BTW. I know there's instance_eval, but it doesn't set local scope
variables for Proc.
Best regards,
that Proc gets its bindings at the moment it is declared (created). And
I can access them with proc.bindings, but is there a way to do
Proc#bindings= or to do something similar to Kern.eval(src, bindings)
2nd param?
The reason I am asking, is that I am thinking about improving
performance of template engines that generate Ruby code upon parsing
template, and then call eval(@precompiledsrc) upon each render of
template.
I believe it would be faster if instead of generating just Ruby code
template engines such as ERB or Haml were doing at precomilation stage
also:
@proc = eval("Proc.new { #{@precompiledsrc} }")
and upon each request (render) calling:
@proc.bindings = call_locals
@proc.call
Instead of just calling eval(@precompiled, call_locals) upon each render
(request).
We could spare CPU cycles that are parsing all over again same Ruby
code.
BTW. I know there's instance_eval, but it doesn't set local scope
variables for Proc.
Best regards,