[ruby-core:113978] [Ruby master Feature#19742] Introduce `Module#anonymous?`
From:
janosch-x via ruby-core <ruby-core@...>
Date:
2023-06-21 20:12:48 UTC
List:
ruby-core #113978
Issue #19742 has been updated by janosch-x (Janosch M=FCller). `#permanent?` is not very descriptive IMO. If I hadn't seen the code above,= or the C code with that vocabulary, I would have a hard time guessing what= its about. I'd probably guess it has to do with GC or so. As seen in Xavier Noria's example, the word `anonymous` also does not cover= *all* the ways in which a `Module#name` can become useless or wrong. Then again, it might be really rare that people need to differentiate betwe= en the const-override case and say, classical anonymous modules or removed = consts. So maybe it is not worth it to leak these subtleties to end users a= nd the slightly imprecise `anonymous` is fine. A short and precise name tha= t covers all cases is hard to find. Something like `#assigned_to_original_c= onst?` doesn't exactly roll off the tongue... ---------------------------------------- Feature #19742: Introduce `Module#anonymous?` https://bugs.ruby-lang.org/issues/19742#change-103636 * Author: ioquatix (Samuel Williams) * Status: Open * Priority: Normal ---------------------------------------- As a follow-on <from https://bugs.ruby-lang.org/issues/19521>, I'd like pro= pose we introduce `Module#anonymous?`. In some situations, like logging/formatting, serialisation/deserialization,= debugging or meta-programming, we might like to know if a class is a prope= r constant or not. However, this brings about some other issues which might need to be discuss= ed. After assigning a constant, then removing it, the internal state of Ruby st= ill believes that the class name is permanent, even thought it's no longer = true. e.g. ``` m =3D Module.new m.anonymous? # true M =3D m m.anonyomous # false Object.send(:remove_const, :M) M # uninitialized constant M (NameError) m.anonymous? # false ``` Because RCLASS data structure is not updated after the constant is removed,= internally the state still has a "permanent class name". I want to use this proposal to discuss this issue and whether there is anyt= hing we should do about such behaviour (or even if it's desirable). Proposed PR: https://github.com/ruby/ruby/pull/7966 cc @fxn --=20 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/postorius/lists/ruby-c= ore.ml.ruby-lang.org/