[#98098] [Ruby master Feature#16824] Follow RubyGems naming conventions for the stdlib — shannonskipper@...

Issue #16824 has been reported by shan (Shannon Skipper).

14 messages 2020/05/01

[#98147] [Ruby master Feature#16832] Use #name rather than #inspect to build "uninitialized constant" error messages — jean.boussier@...

Issue #16832 has been reported by byroot (Jean Boussier).

20 messages 2020/05/06

[#98174] [Ruby master Bug#16837] Can we make Ruby 3.0 as fast as Ruby 2.7 with the new assertions? — takashikkbn@...

Issue #16837 has been reported by k0kubun (Takashi Kokubun).

10 messages 2020/05/07

[#98241] [Ruby master Bug#16845] Building Ruby with old existing system Ruby results in make error with ./tool/file2lastrev.rb — erik@...

Issue #16845 has been reported by ErikSwan (Erik Swan).

7 messages 2020/05/09

[#98256] [Ruby master Feature#16847] Cache instruction sequences by default — jean.boussier@...

Issue #16847 has been reported by byroot (Jean Boussier).

16 messages 2020/05/11

[#98257] [Ruby master Feature#16848] Allow callables in $LOAD_PATH — jean.boussier@...

Issue #16848 has been reported by byroot (Jean Boussier).

27 messages 2020/05/11

[#98318] [Ruby master Bug#16853] calling bla(hash, **kw) with a string-based hash passes the strings into **kw (worked < 2.7) — sylvain.joyeux@...4x.org

Issue #16853 has been reported by sylvain.joyeux (Sylvain Joyeux).

12 messages 2020/05/13

[#98355] [Ruby master Bug#16889] TracePoint.enable { ... } also activates the TracePoint for other threads, even outside the block — eregontp@...

Issue #16889 has been reported by Eregon (Benoit Daloze).

16 messages 2020/05/14

[#98363] [Ruby master Feature#16891] Restore Positional Argument to Keyword Conversion — merch-redmine@...

Issue #16891 has been reported by jeremyevans0 (Jeremy Evans).

23 messages 2020/05/14

[#98371] [Ruby master Feature#16894] Integer division for Ruby 3 — andrew@...

Issue #16894 has been reported by ankane (Andrew Kane).

18 messages 2020/05/15

[#98391] [Ruby master Bug#16896] MakeMakefile methods should be private — eregontp@...

Issue #16896 has been reported by Eregon (Benoit Daloze).

10 messages 2020/05/15

[#98396] [Ruby master Feature#16897] Can a Ruby 3.0 compatible general purpose memoizer be written in such a way that it matches Ruby 2 performance? — sam.saffron@...

Issue #16897 has been reported by sam.saffron (Sam Saffron).

25 messages 2020/05/16

[#98453] [Ruby master Bug#16904] rubygems: psych: superclass mismatch for class Mark (TypeError) — jaruga@...

Issue #16904 has been reported by jaruga (Jun Aruga).

18 messages 2020/05/20

[#98486] [Ruby master Bug#16908] Strange behaviour of Hash#shift when used with `default_proc`. — samuel@...

Issue #16908 has been reported by ioquatix (Samuel Williams).

14 messages 2020/05/23

[#98569] [Ruby master Bug#16921] s390x: ramdom test failures for timeout or segmentation fault — jaruga@...

Issue #16921 has been reported by jaruga (Jun Aruga).

9 messages 2020/05/29

[#98599] [Ruby master Bug#16926] Kernel#require does not load a feature twice when $LOAD_PATH has been modified spec fails only on 2.7 — eregontp@...

Issue #16926 has been reported by Eregon (Benoit Daloze).

12 messages 2020/05/31

[ruby-core:98592] [Ruby master Feature#16924] instance_eval equivalent for RubyVM::InstructionSequence

From: nunuu@...
Date: 2020-05-30 15:49:49 UTC
List: ruby-core #98592
Issue #16924 has been reported by Wuerfel21 (Ada Gottenstr=E4ter).

----------------------------------------
Feature #16924: instance_eval equivalent for RubyVM::InstructionSequence
https://bugs.ruby-lang.org/issues/16924

* Author: Wuerfel21 (Ada Gottenstr=E4ter)
* Status: Open
* Priority: Normal
----------------------------------------
# Abstract
Proposal to expose the ability to evaluate precompiled ISEQs in non-topleve=
l contexts.
# Background
A common pattern used for certain kinds of DSL is to instance_eval entire f=
iles, like this:
```ruby
___dsl_object.instance_eval(File.read(___path),___path,0)
```
This has certain advantages and disadvantages over other methods of executi=
ng DSL code (mainly that the global namespace is not being polluted by eith=
er the DSL itself or the code running in the DSL). I find it very useful.

Ruby exposes the RubyVM::InstructionSequence API, allowing caching of parsi=
ng/compilation steps to speed up execution. However, the resulting code can=
 only be evaluated at the top level, disallowing it's use with DSLs designe=
d to be instance_eval'd.

# Proposal
Add a `RubyVM::InstructionSequence#eval_in_instance` method that could be u=
sed to replace
```ruby
___dsl_object.instance_eval(File.read(___path),___path,0)
```
with
```ruby
iseq =3D RubyVM::InstructionSequence.compile_file(___path)
# iseq could be cached here
iseq.eval_in_instance(___dsl_object)
```
Note that while instance_eval makes local variables available if the evalua=
ted argument is a string, this new method would not (as the local variables=
 can't be known at compile time). This discrepancy already exists between  =
RubyVM::InstructionSequence#eval and all other standard library functions n=
amed eval, so I assume it's okay.

This new method could also replace some use cases of Kernal#eval (any where=
 the passing of local variables is not required).
# Implementation
From a cursory glance at the relevant code, this seems like a fairly simple=
 feature to implement. Maybe an additional parameter to `#compile` is neede=
d to change the ISEQ type, I'm not sure. If no one who is more experienced =
at working with Ruby internals wants to step up to implement this feature, =
I will try it myself.

# Discussion
There is a rejected feature #12093 about evaluating ISEQs with a binding (w=
hich is not possible since the compiler needs to know the local variables o=
f a binding to compile for it, thus the request got rejected). There was so=
me talk about evaling inside an instance in the comments, but I assume that=
 was forgotten about due to the ticket being closed. Therefore I think open=
ing this new ticket is justified.




-- =

https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=3Dunsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next