Project

General

Profile

Feature #12931

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

Many people would probably like to use `binding.instance_eval` binding.instance_eval when executing templates. The reason for this is because `binding.eval` binding.eval is slow. 

 The use case is template rendering, e.g. systems like ERB. 

 In my template renderer, I did have 

 ```ruby 
			 

			 if Binding === scope 
				 # Slow code path, evaluate the code string in the given binding (scope). 
				 scope.eval(code, @buffer.path) 
			 else 
				 # Faster code path, use instance_eval on a compiled Proc. 
				 scope.instance_eval(&to_proc) 
			 end 
 ``` 

 The binding path is several orders of magnitude slower because the code is a string and must be parsed, compiled, etc. But, `to_proc` to_proc path can be cached. 

 In terms of duck typing, it would be nice if binding implemented `#instance_eval` #instance_eval and would allow passing a block.

Back