ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace
@ 2025-05-13 22:51 tenderlovemaking (Aaron Patterson) via ruby-core
  2025-05-14  0:45 ` [ruby-core:122080] " mame (Yusuke Endoh) via ruby-core
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: tenderlovemaking (Aaron Patterson) via ruby-core @ 2025-05-13 22:51 UTC (permalink / raw)
  To: ruby-core; +Cc: tenderlovemaking (Aaron Patterson)

Issue #21335 has been reported by tenderlovemaking (Aaron Patterson).

----------------------------------------
Feature #21335: Namespaces should be present in the backtrace
https://bugs.ruby-lang.org/issues/21335

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
----------------------------------------
Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace.

For example:

```ruby
File.binwrite "foo.rb", <<-eorb
class Foo
  def self.test(ns1, ns2, count)
    if count == 0
      puts caller
    else
      if count % 2 == 0
        ns1::Foo.test(ns1, ns2, count - 1)
      else
        ns2::Foo.test(ns1, ns2, count - 1)
      end
    end
  end
end
eorb

ns1 = Namespace.new
ns1.load "foo.rb"

ns2 = Namespace.new
ns2.load "foo.rb"

ns1::Foo.test(ns1, ns2, 10)
```

The output is like this:

```
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
./test.rb:23:in '<main>'
```

`Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace.  I think we should include namespaces in the backtrace.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-core:122080] [Ruby Feature#21335] Namespaces should be present in the backtrace
  2025-05-13 22:51 [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace tenderlovemaking (Aaron Patterson) via ruby-core
@ 2025-05-14  0:45 ` mame (Yusuke Endoh) via ruby-core
  2025-05-14  0:50 ` [ruby-core:122081] " mame (Yusuke Endoh) via ruby-core
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mame (Yusuke Endoh) via ruby-core @ 2025-05-14  0:45 UTC (permalink / raw)
  To: ruby-core; +Cc: mame (Yusuke Endoh)

Issue #21335 has been updated by mame (Yusuke Endoh).


As the current behavior of the backtrace, if the receiver class is completely bound to the constant names, they are prefixed to the method names in the backtrace. So, if you do:

```ruby
NS1 = Namespace.new
NS1.load "foo.rb"

NS2 = Namespace.new
NS2.load "foo.rb"

NS1::Foo.test(NS1, NS2, 10)
```

you will see:

```
$ RUBY_NAMESPACE=1 ./miniruby test.rb
./miniruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for know issues, etc.
foo.rb:9:in 'NS1::Foo.test'
foo.rb:7:in 'NS2::Foo.test'
foo.rb:9:in 'NS1::Foo.test'
foo.rb:7:in 'NS2::Foo.test'
foo.rb:9:in 'NS1::Foo.test'
foo.rb:7:in 'NS2::Foo.test'
foo.rb:9:in 'NS1::Foo.test'
foo.rb:7:in 'NS2::Foo.test'
foo.rb:9:in 'NS1::Foo.test'
foo.rb:7:in 'NS1::Foo.test'
test.rb:23:in '<main>'
```

This depends on the output of `Class#name`, so the result may change depending of the progress of #21316.

----------------------------------------
Feature #21335: Namespaces should be present in the backtrace
https://bugs.ruby-lang.org/issues/21335#change-113234

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
----------------------------------------
Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace.

For example:

```ruby
File.binwrite "foo.rb", <<-eorb
class Foo
  def self.test(ns1, ns2, count)
    if count == 0
      puts caller
    else
      if count % 2 == 0
        ns1::Foo.test(ns1, ns2, count - 1)
      else
        ns2::Foo.test(ns1, ns2, count - 1)
      end
    end
  end
end
eorb

ns1 = Namespace.new
ns1.load "foo.rb"

ns2 = Namespace.new
ns2.load "foo.rb"

ns1::Foo.test(ns1, ns2, 10)
```

The output is like this:

```
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
./test.rb:23:in '<main>'
```

`Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace.  I think we should include namespaces in the backtrace.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-core:122081] [Ruby Feature#21335] Namespaces should be present in the backtrace
  2025-05-13 22:51 [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace tenderlovemaking (Aaron Patterson) via ruby-core
  2025-05-14  0:45 ` [ruby-core:122080] " mame (Yusuke Endoh) via ruby-core
@ 2025-05-14  0:50 ` mame (Yusuke Endoh) via ruby-core
  2025-05-14  1:08 ` [ruby-core:122083] " tagomoris (Satoshi Tagomori) via ruby-core
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: mame (Yusuke Endoh) via ruby-core @ 2025-05-14  0:50 UTC (permalink / raw)
  To: ruby-core; +Cc: mame (Yusuke Endoh)

Issue #21335 has been updated by mame (Yusuke Endoh).


It is possible to change how to display the backtrace to show class names that are not completely bound to constants.
I have conservatively designed the current spec of the backtrace to avoid potential confusing output, but I'm not sure which would be better.

```diff
diff --git a/vm_backtrace.c b/vm_backtrace.c
index 26e0a6fb76..15ec9b7a4d 100644
--- a/vm_backtrace.c
+++ b/vm_backtrace.c
@@ -201,20 +201,19 @@ VALUE rb_mod_name0(VALUE klass, bool *permanent);
 VALUE
 rb_gen_method_name(VALUE owner, VALUE name)
 {
-    bool permanent;
     if (RB_TYPE_P(owner, T_CLASS) || RB_TYPE_P(owner, T_MODULE)) {
         if (RCLASS_SINGLETON_P(owner)) {
             VALUE v = RCLASS_ATTACHED_OBJECT(owner);
             if (RB_TYPE_P(v, T_CLASS) || RB_TYPE_P(v, T_MODULE)) {
-                v = rb_mod_name0(v, &permanent);
-                if (permanent && !NIL_P(v)) {
+                v = rb_mod_name(v);
+                if (!NIL_P(v)) {
                     return rb_sprintf("%"PRIsVALUE".%"PRIsVALUE, v, name);
                 }
             }
         }
         else {
-            owner = rb_mod_name0(owner, &permanent);
-            if (permanent && !NIL_P(owner)) {
+            owner = rb_mod_name(owner);
+            if (!NIL_P(owner)) {
                 return rb_sprintf("%"PRIsVALUE"#%"PRIsVALUE, owner, name);
             }
         }
```

```
$ RUBY_NAMESPACE=1 ./miniruby test.rb
./miniruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for know issues, etc.
foo.rb:9:in '#<Namespace:0x00007ff4d61f9f20>::Foo.test'
foo.rb:7:in '#<Namespace:0x00007ff4d61f93e0>::Foo.test'
foo.rb:9:in '#<Namespace:0x00007ff4d61f9f20>::Foo.test'
foo.rb:7:in '#<Namespace:0x00007ff4d61f93e0>::Foo.test'
foo.rb:9:in '#<Namespace:0x00007ff4d61f9f20>::Foo.test'
foo.rb:7:in '#<Namespace:0x00007ff4d61f93e0>::Foo.test'
foo.rb:9:in '#<Namespace:0x00007ff4d61f9f20>::Foo.test'
foo.rb:7:in '#<Namespace:0x00007ff4d61f93e0>::Foo.test'
foo.rb:9:in '#<Namespace:0x00007ff4d61f9f20>::Foo.test'
foo.rb:7:in '#<Namespace:0x00007ff4d61f9f20>::Foo.test'
test.rb:23:in '<main>'
```


----------------------------------------
Feature #21335: Namespaces should be present in the backtrace
https://bugs.ruby-lang.org/issues/21335#change-113237

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
----------------------------------------
Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace.

For example:

```ruby
File.binwrite "foo.rb", <<-eorb
class Foo
  def self.test(ns1, ns2, count)
    if count == 0
      puts caller
    else
      if count % 2 == 0
        ns1::Foo.test(ns1, ns2, count - 1)
      else
        ns2::Foo.test(ns1, ns2, count - 1)
      end
    end
  end
end
eorb

ns1 = Namespace.new
ns1.load "foo.rb"

ns2 = Namespace.new
ns2.load "foo.rb"

ns1::Foo.test(ns1, ns2, 10)
```

The output is like this:

```
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
./test.rb:23:in '<main>'
```

`Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace.  I think we should include namespaces in the backtrace.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-core:122083] [Ruby Feature#21335] Namespaces should be present in the backtrace
  2025-05-13 22:51 [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace tenderlovemaking (Aaron Patterson) via ruby-core
  2025-05-14  0:45 ` [ruby-core:122080] " mame (Yusuke Endoh) via ruby-core
  2025-05-14  0:50 ` [ruby-core:122081] " mame (Yusuke Endoh) via ruby-core
@ 2025-05-14  1:08 ` tagomoris (Satoshi Tagomori) via ruby-core
  2025-05-14  1:28 ` [ruby-core:122084] " tenderlovemaking (Aaron Patterson) via ruby-core
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: tagomoris (Satoshi Tagomori) via ruby-core @ 2025-05-14  1:08 UTC (permalink / raw)
  To: ruby-core; +Cc: tagomoris (Satoshi Tagomori)

Issue #21335 has been updated by tagomoris (Satoshi Tagomori).


The `ns_id` seems good to be shown in backtrace (I'm unsure about this format is good or not):

```
foo.rb:7:in namespace(1) 'Foo.test'
```

----------------------------------------
Feature #21335: Namespaces should be present in the backtrace
https://bugs.ruby-lang.org/issues/21335#change-113238

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
----------------------------------------
Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace.

For example:

```ruby
File.binwrite "foo.rb", <<-eorb
class Foo
  def self.test(ns1, ns2, count)
    if count == 0
      puts caller
    else
      if count % 2 == 0
        ns1::Foo.test(ns1, ns2, count - 1)
      else
        ns2::Foo.test(ns1, ns2, count - 1)
      end
    end
  end
end
eorb

ns1 = Namespace.new
ns1.load "foo.rb"

ns2 = Namespace.new
ns2.load "foo.rb"

ns1::Foo.test(ns1, ns2, 10)
```

The output is like this:

```
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
./test.rb:23:in '<main>'
```

`Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace.  I think we should include namespaces in the backtrace.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-core:122084] [Ruby Feature#21335] Namespaces should be present in the backtrace
  2025-05-13 22:51 [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace tenderlovemaking (Aaron Patterson) via ruby-core
                   ` (2 preceding siblings ...)
  2025-05-14  1:08 ` [ruby-core:122083] " tagomoris (Satoshi Tagomori) via ruby-core
@ 2025-05-14  1:28 ` tenderlovemaking (Aaron Patterson) via ruby-core
  2025-05-16 13:11 ` [ruby-core:122147] " Dan0042 (Daniel DeLorme) via ruby-core
  2025-06-05  4:24 ` [ruby-core:122419] " matz (Yukihiro Matsumoto) via ruby-core
  5 siblings, 0 replies; 7+ messages in thread
From: tenderlovemaking (Aaron Patterson) via ruby-core @ 2025-05-14  1:28 UTC (permalink / raw)
  To: ruby-core; +Cc: tenderlovemaking (Aaron Patterson)

Issue #21335 has been updated by tenderlovemaking (Aaron Patterson).


mame (Yusuke Endoh) wrote in #note-2:
> As the current behavior of the backtrace, if the receiver class is completely bound to the constant names, they are prefixed to the method names in the backtrace.

Ah, ok, I didn't know that.  Thank you.

I'm not sure if printing the address or the `ns_id` is better. Either works for me, but I'm not sure what would be most ergonomic.

----------------------------------------
Feature #21335: Namespaces should be present in the backtrace
https://bugs.ruby-lang.org/issues/21335#change-113239

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
----------------------------------------
Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace.

For example:

```ruby
File.binwrite "foo.rb", <<-eorb
class Foo
  def self.test(ns1, ns2, count)
    if count == 0
      puts caller
    else
      if count % 2 == 0
        ns1::Foo.test(ns1, ns2, count - 1)
      else
        ns2::Foo.test(ns1, ns2, count - 1)
      end
    end
  end
end
eorb

ns1 = Namespace.new
ns1.load "foo.rb"

ns2 = Namespace.new
ns2.load "foo.rb"

ns1::Foo.test(ns1, ns2, 10)
```

The output is like this:

```
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
./test.rb:23:in '<main>'
```

`Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace.  I think we should include namespaces in the backtrace.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-core:122147] [Ruby Feature#21335] Namespaces should be present in the backtrace
  2025-05-13 22:51 [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace tenderlovemaking (Aaron Patterson) via ruby-core
                   ` (3 preceding siblings ...)
  2025-05-14  1:28 ` [ruby-core:122084] " tenderlovemaking (Aaron Patterson) via ruby-core
@ 2025-05-16 13:11 ` Dan0042 (Daniel DeLorme) via ruby-core
  2025-06-05  4:24 ` [ruby-core:122419] " matz (Yukihiro Matsumoto) via ruby-core
  5 siblings, 0 replies; 7+ messages in thread
From: Dan0042 (Daniel DeLorme) via ruby-core @ 2025-05-16 13:11 UTC (permalink / raw)
  To: ruby-core; +Cc: Dan0042 (Daniel DeLorme)

Issue #21335 has been updated by Dan0042 (Daniel DeLorme).


mame (Yusuke Endoh) wrote in #note-4:
> ```
> foo.rb:9:in '#<Namespace:0x00007ff4d61f9f20>::Foo.test'
> foo.rb:7:in '#<Namespace:0x00007ff4d61f93e0>::Foo.test'
> ```

I took me quite a while to notice that 0x00007ff4d61f9f20 and 0x00007ff4d61f93e0 were different.

Just my personal preference, but if `#<Namespace:0x00007ff4d61f93e0>` is assigned to constant `X` I would like to see:
```
foo.rb:9:in namespace(1) 'Foo.test'
foo.rb:7:in namespace(X) 'Foo.test'
```


----------------------------------------
Feature #21335: Namespaces should be present in the backtrace
https://bugs.ruby-lang.org/issues/21335#change-113298

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
----------------------------------------
Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace.

For example:

```ruby
File.binwrite "foo.rb", <<-eorb
class Foo
  def self.test(ns1, ns2, count)
    if count == 0
      puts caller
    else
      if count % 2 == 0
        ns1::Foo.test(ns1, ns2, count - 1)
      else
        ns2::Foo.test(ns1, ns2, count - 1)
      end
    end
  end
end
eorb

ns1 = Namespace.new
ns1.load "foo.rb"

ns2 = Namespace.new
ns2.load "foo.rb"

ns1::Foo.test(ns1, ns2, 10)
```

The output is like this:

```
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
./test.rb:23:in '<main>'
```

`Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace.  I think we should include namespaces in the backtrace.



-- 
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [ruby-core:122419] [Ruby Feature#21335] Namespaces should be present in the backtrace
  2025-05-13 22:51 [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace tenderlovemaking (Aaron Patterson) via ruby-core
                   ` (4 preceding siblings ...)
  2025-05-16 13:11 ` [ruby-core:122147] " Dan0042 (Daniel DeLorme) via ruby-core
@ 2025-06-05  4:24 ` matz (Yukihiro Matsumoto) via ruby-core
  5 siblings, 0 replies; 7+ messages in thread
From: matz (Yukihiro Matsumoto) via ruby-core @ 2025-06-05  4:24 UTC (permalink / raw)
  To: ruby-core; +Cc: matz (Yukihiro Matsumoto)

Issue #21335 has been updated by matz (Yukihiro Matsumoto).


I'd like to keep this issue pending until we provide high level API (maybe Package). See #21385)

Matz.


----------------------------------------
Feature #21335: Namespaces should be present in the backtrace
https://bugs.ruby-lang.org/issues/21335#change-113599

* Author: tenderlovemaking (Aaron Patterson)
* Status: Open
----------------------------------------
Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace.

For example:

```ruby
File.binwrite "foo.rb", <<-eorb
class Foo
  def self.test(ns1, ns2, count)
    if count == 0
      puts caller
    else
      if count % 2 == 0
        ns1::Foo.test(ns1, ns2, count - 1)
      else
        ns2::Foo.test(ns1, ns2, count - 1)
      end
    end
  end
end
eorb

ns1 = Namespace.new
ns1.load "foo.rb"

ns2 = Namespace.new
ns2.load "foo.rb"

ns1::Foo.test(ns1, ns2, 10)
```

The output is like this:

```
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future!
See doc/namespace.md for known issues, etc.
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
/Users/aaron/git/ruby/foo.rb:9:in 'test'
/Users/aaron/git/ruby/foo.rb:7:in 'test'
./test.rb:23:in '<main>'
```

`Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace.  I think we should include namespaces in the backtrace.



-- 
https://bugs.ruby-lang.org/
______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2025-06-05  4:25 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-13 22:51 [ruby-core:122070] [Ruby Feature#21335] Namespaces should be present in the backtrace tenderlovemaking (Aaron Patterson) via ruby-core
2025-05-14  0:45 ` [ruby-core:122080] " mame (Yusuke Endoh) via ruby-core
2025-05-14  0:50 ` [ruby-core:122081] " mame (Yusuke Endoh) via ruby-core
2025-05-14  1:08 ` [ruby-core:122083] " tagomoris (Satoshi Tagomori) via ruby-core
2025-05-14  1:28 ` [ruby-core:122084] " tenderlovemaking (Aaron Patterson) via ruby-core
2025-05-16 13:11 ` [ruby-core:122147] " Dan0042 (Daniel DeLorme) via ruby-core
2025-06-05  4:24 ` [ruby-core:122419] " matz (Yukihiro Matsumoto) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).