[#104004] [Ruby master Feature#17883] Load bundler/setup earlier to make `bundle exec ruby -r` respect Gemfile — mame@...
Issue #17883 has been reported by mame (Yusuke Endoh).
21 messages
2021/05/24
[ruby-core:103722] [Ruby master Bug#15928] Constant declaration does not conform to JIS 3017:2013
From:
eregontp@...
Date:
2021-05-05 01:07:53 UTC
List:
ruby-core #103722
Issue #15928 has been updated by Eregon (Benoit Daloze).
jeremyevans0 (Jeremy Evans) wrote in #note-4:
> Like many specs, the added spec describes the actual behavior of CRuby at the time it was added, without regard for whether the behavior was intentional or not.
If users depend on it and filed a bug, it becomes de facto expected behavior.
> So the fact that the spec exists is not a reason not to fix the bug.
Indeed.
> My pull request removes the spec.
No, the spec should be kept for older versions/other implementations, and we should have a spec for the new behavior.
----------------------------------------
Bug #15928: Constant declaration does not conform to JIS 3017:2013
https://bugs.ruby-lang.org/issues/15928#change-91816
* Author: yugui (Yuki Sonoda)
* Status: Open
* Priority: Normal
* ruby -v: ruby 2.7.0dev (2019-06-16T14:01:46Z master d4929f5185) [x86_64-darwin18]
* Backport: 2.4: UNKNOWN, 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
The order of evaluation in constant declaration does not conform to JIS 3017:2013 11.4.2.2.3.
# Problem
Suppose that we are evaluating the following program.
```
expr::C = lhs
```
The standard seems to be requiring the following evaluation order:
1. expr
* raise a TypeError if the value is not a kind of Module
2. lhs
3. rb_const_set(expr, :C, lhs)
However, the actual implementation evaluates in the following order
1. lhs
2. expr
3. rb_const_set(expr, :C, lhs)
* raise a TypeError if the expr is not a kind of Module
# How to reproduce
The next program does not raise "recv" but raises "value"
```
raise("recv")::C = raise("value")
```
The next program does not raise a TypeError but raises a RuntimeError
```
A = 1
A::C = raise("value")
```
# Question
* Is this interpretation of the standard correct?
* If it is, Should we change the current behavior?
* If we shouldn't, does it mean an issue in the standard?
c.f.
* https://twitter.com/n0kada/status/1140234416175763456
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>