From: dale.hamel@... Date: 2019-08-24T05:10:47+00:00 Subject: [ruby-core:94524] [Ruby master Feature#12093] Eval InstructionSequence with binding Issue #12093 has been updated by dalehamel (Dale Hamel). > does this suffice your use case? Interesting, I'll need to investigate this - it certainly has potential. My use case is for experimental tracing work, and I basically want to be able to pre-compile original source with added instructions, and execute them within the context they were originally intended to be executed within. This is why I had a use for being able to execute within arbitrary bindings, but if I can target right receiver / bind to the right object, this could work. I will try a prototype be seeing which receiving I am presently binding to, and look into modifying the patch to support the prototype you suggest to see if it can fit my use case by passing this receiver rather than the binding. Thank you for response and feedback Nobu. ---------------------------------------- Feature #12093: Eval InstructionSequence with binding https://bugs.ruby-lang.org/issues/12093#change-80965 * Author: pavel.evstigneev (Pavel Evstigneev) * Status: Rejected * Priority: Normal * Assignee: * Target version: ---------------------------------------- Implementing this feature can boost template engine performance Currently Kernel#eval can accept binding argument, so code running with eval will have access to local variables and current instance. This feature used by template languages ERB: https://github.com/ruby/ruby/blob/trunk/lib/erb.rb#L887 Erubis: Can't find code on github, but it uses instance_eval or Kernel#eval Haml: https://github.com/haml/haml/blob/master/lib/haml/engine.rb#L115 My proposal is to make RubyVM::InstructionSequence#eval to recieve binding argument. So it can be used for caching templates. As I see from ERB and Haml, cached template is stored as ruby code string, every time when we render template that string (ruby code) is evaluated, internally ruby will parse it into RubyVM::InstructionSequence and then evaluate. Before I try to implement it myself in ruby, but could not. Lack of experience with C https://github.com/Paxa/ruby/commit/f5b602b6d9eada9675a4c002c9a5a79129df73a6 (not working) ---Files-------------------------------- 0002-Update-iseq.eval-to-accept-optional-binding-FIXES-Bu.patch (4.83 KB) 0001-RubyVM-InstructionSequence-eval_with.patch (2.91 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: