[#100284] [Ruby master Bug#17211] Test failures in ruby2.7.2 and ruby3.0~preview1 — utkarsh@...

Issue #17211 has been reported by utkarsh (Utkarsh Gupta).

10 messages 2020/10/02

[#100301] [Ruby master Feature#17215] Backport for arm64 optimizations that exist for power/x86 — jaruga@...

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

10 messages 2020/10/05

[#100329] [Ruby master Bug#17220] Rails Active Job integration test fails with Ruby 3.0.0 since 2038cc6cab6ceeffef3ec3a765c70ae684f829ed — yasuo.honda@...

Issue #17220 has been reported by yahonda (Yasuo Honda).

28 messages 2020/10/07

[#100332] [Ruby master Bug#17221] Relax the Fiber#transfer's limitation — ko1@...

Issue #17221 has been reported by ko1 (Koichi Sasada).

15 messages 2020/10/07

[#100348] [Ruby master Bug#17257] Integer#pow(0, 1) returns 1, which is incorrect — universato@...

Issue #17257 has been reported by universato (Yoshimine Sato).

13 messages 2020/10/09

[#100371] [Ruby master Feature#17260] Promote pattern matching to official feature — kazuki@...

Issue #17260 has been reported by ktsj (Kazuki Tsujimoto).

10 messages 2020/10/11

[#100383] [Ruby master Feature#17261] Software transactional memory (STM) for Threads and Ractors — ko1@...

Issue #17261 has been reported by ko1 (Koichi Sasada).

14 messages 2020/10/12

[#100401] [Ruby master Bug#17263] Fiber context switch degrades with number of fibers, limit on number of fibers — ciconia@...

Issue #17263 has been reported by ciconia (Sharon Rosner).

14 messages 2020/10/15

[#100422] [CommonRuby Feature#17265] Add `Bool` module — marcandre-ruby-core@...

Issue #17265 has been reported by marcandre (Marc-Andre Lafortune).

11 messages 2020/10/19

[#100466] [Ruby master Feature#17273] shareable_constant_value pragma — ko1@...

Issue #17273 has been reported by ko1 (Koichi Sasada).

14 messages 2020/10/21

[#100471] [Ruby master Feature#17277] Make Enumerator#with_index yield row and col indices for Matrix — grzegorz.jakubiak@...

Issue #17277 has been reported by greggzst (Grzegorz Jakubiak).

8 messages 2020/10/21

[#100479] [Ruby master Feature#17278] On-demand sharing of constants for Ractor — daniel@...42.com

Issue #17278 has been reported by Dan0042 (Daniel DeLorme).

13 messages 2020/10/21

[#100534] [Ruby master Feature#17284] Shareable Proc — ko1@...

Issue #17284 has been reported by ko1 (Koichi Sasada).

16 messages 2020/10/25

[#100597] [Ruby master Feature#17288] Optimize __send__ call with a literal method name — muraken@...

Issue #17288 has been reported by mrkn (Kenta Murata).

13 messages 2020/10/27

[#100669] [Ruby master Feature#17295] Feature: Create a directory and file with Pathname#touch — get.codetriage@...

Issue #17295 has been reported by schneems (Richard Schneeman).

9 messages 2020/10/30

[#100673] [Ruby master Feature#17298] Ractor's basket communication APIs — ko1@...

Issue #17298 has been reported by ko1 (Koichi Sasada).

15 messages 2020/10/30

[#100675] [Ruby master Misc#17299] DevelopersMeeting20201120Japan — mame@...

Issue #17299 has been reported by mame (Yusuke Endoh).

11 messages 2020/10/31

[ruby-core:100370] [Ruby master Bug#17259] Kernel#warn should ignore <internal: entries

From: eregontp@...
Date: 2020-10-11 10:23:18 UTC
List: ruby-core #100370
Issue #17259 has been updated by Eregon (Benoit Daloze).


nobu (Nobuyoshi Nakada) wrote in #note-3:
> Essentially `uplevel:` option is useless in some cases.
> For instance, it cannot work to skip frames in the same file or directory.

Yes, some libraries might want to emit warnings and ignore their own `my_gem/lib/`.
That however would need to make `warn` somehow take some extra context, because only warnings of that library should ignore `my_gem/lib/`, other calls to `warn` should not.
Maybe `warn(message, uplevel: n, ignore: [path1, path2])`.
That would not work for RubyGems' require, where warning are not emitted by RubyGems but by anything else.

In practice, I think gems should be able to know if they call themselves directly or not, so there should be no need to skip `my_gem/lib/`.
I might be wrong about that.

OTOH for core library methods and RubyGems' `require`, it seems clear it would never be useful to show their location for `warn(uplevel:)`.
So I think ignoring `<internal:` is a useful step on its own, and such entries should be ignored by default.

It also keeps compatibility with older Rubies which had less core methods defined in Ruby, which should be a transparent implementation detail, at least for `warn(uplevel:)`.

----------------------------------------
Bug #17259: Kernel#warn should ignore <internal: entries
https://bugs.ruby-lang.org/issues/17259#change-87981

* Author: Eregon (Benoit Daloze)
* Status: Open
* Priority: Normal
* Target version: 3.0
* ruby -v: ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-linux]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
`Kernel#warn` currently does not skip `<internal:` entries from core library methods defined in Ruby.
This can cause rather unhelpful locations to be used for warnings.

For instance:
```
$ ruby -v --disable=gems -e 'def deprecated; warn "use X instead", uplevel: 1; end; tap(&:deprecated)'
ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-linux]
<internal:kernel>:90: warning: use X instead
# expected: "-e:1: warning: use X instead"
```

Note that RubyGems overrides Kernel#warn since https://github.com/rubygems/rubygems/pull/2442 and https://github.com/rubygems/rubygems/blob/c1bafab1d84e0aad06e377e9db4b74cccab4b43a/lib/rubygems/core_ext/kernel_warn.rb#L42,
so `--disable-gems` is needed to observe this behavior.
I think it is very suboptimal that RubyGems needs to monkey-patch Kernel#warn to remove RubyGems' `require` from `Kernel#warn` location.
That is both fragile (as we've seen from various incompatible behavior and bugs in that monkey-patch) and inefficient (walking the stack multiple times).

So I would suggest to actually skip all backtraces entries starting with `<internal:` for `Kernel#warn(message, uplevel:)`.
BTW this is already what [TruffleRuby does](https://github.com/oracle/truffleruby/blob/c3bcccfd8db7d460e23f0371e7ceaf5fdb71275c/src/main/ruby/truffleruby/core/kernel.rb#L656).

As a bonus, by filtering out `<internal:`, RubyGems could define its `require` in an `eval(code, nil, '<internal:rubygems-require>', line)` and it would automatically be skipped, without needing to monkey-patch Kernel#warn at all!



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

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

In This Thread