Project

General

Profile

Actions

Feature #12931

closed

Add support for Binding#instance_eval

Added by ioquatix (Samuel Williams) over 7 years ago. Updated about 7 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:78112]

Description

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

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

In my template renderer, I did have

			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 path can be cached.

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0