[#100689] [Ruby master Feature#17303] Make webrick to bundled gems or remove from stdlib — hsbt@...

Issue #17303 has been reported by hsbt (Hiroshi SHIBATA).

11 messages 2020/11/02

[#100715] [Ruby master Bug#17306] TestGCCompact#test_ast_compacts test failures — v.ondruch@...

Issue #17306 has been reported by vo.x (Vit Ondruch).

11 messages 2020/11/05

[#100720] [Ruby master Feature#17307] A way to mark C extensions as thread-safe, Ractor-safe, or unsafe — eregontp@...

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

22 messages 2020/11/05

[#100744] [Ruby master Bug#17310] Closed ractors should die — marcandre-ruby-core@...

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

12 messages 2020/11/08

[#100753] [Ruby master Feature#17312] New methods in Enumerable and Enumerator::Lazy: flatten, product, compact — zverok.offline@...

Issue #17312 has been reported by zverok (Victor Shepelev).

11 messages 2020/11/09

[#100763] [Ruby master Feature#17314] Provide a way to declare visibility of attributes defined by attr* methods in a single expression — radek.bulat@...

Issue #17314 has been reported by radarek (RadosナBw BuナBt).

17 messages 2020/11/10

[#100777] [Ruby master Feature#17316] On memoization — sawadatsuyoshi@...

Issue #17316 has been reported by sawa (Tsuyoshi Sawada).

18 messages 2020/11/11

[#100788] [Ruby master Misc#17319] Rename Random::urandom to os_random and document random data sources — zofrex@...

Issue #17319 has been reported by zofrex (James Sanderson).

11 messages 2020/11/11

[#100807] [Ruby master Feature#17322] Deprecate `Random::DEFAULT` and introduce `Random.default()` method to provide Ractor-supported default random generator — ko1@...

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

14 messages 2020/11/12

[#100816] [Ruby master Feature#17323] Ractor::LVar to provide ractor-local storage — ko1@...

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

19 messages 2020/11/12

[#100849] [Ruby master Feature#17325] Adds Fiber#cancel, which forces a Fiber to break/return — nicholas.evans@...

Issue #17325 has been reported by nevans (Nicholas Evans).

17 messages 2020/11/14

[#100852] [Ruby master Feature#17326] Add Kernel#must! to the standard library — zimmerman.jake@...

Issue #17326 has been reported by jez (Jake Zimmerman).

24 messages 2020/11/14

[#100858] [Ruby master Feature#17327] The Queue constructor should take an initial set of items — chris@...

Issue #17327 has been reported by chrisseaton (Chris Seaton).

10 messages 2020/11/15

[#100897] [Ruby master Feature#17330] Object#non — zverok.offline@...

Issue #17330 has been reported by zverok (Victor Shepelev).

21 messages 2020/11/17

[#100925] [Ruby master Feature#17331] Let Fiber#raise work with transferring fibers — nicholas.evans@...

Issue #17331 has been reported by nevans (Nicholas Evans).

12 messages 2020/11/18

[#100930] [Ruby master Feature#17333] Enumerable#many? — masafumi.o1988@...

Issue #17333 has been reported by okuramasafumi (Masafumi OKURA).

10 messages 2020/11/18

[#100971] [Ruby master Bug#17337] Don't embed Ruby build time configuration into Ruby — v.ondruch@...

Issue #17337 has been reported by vo.x (Vit Ondruch).

16 messages 2020/11/20

[#100999] [Ruby master Feature#17339] Semantic grouping on BigDecimal#to_s — co.chuma@...

Issue #17339 has been reported by chumaltd (Takahiro Chuma).

9 messages 2020/11/21

[#101071] [Ruby master Feature#17342] Hash#fetch_set — hunter_spawn@...

Issue #17342 has been reported by MaxLap (Maxime Lapointe).

26 messages 2020/11/25

[#101093] [Ruby master Misc#17346] DevelopersMeeting20201210Japan — mame@...

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

17 messages 2020/11/26

[#101141] [Ruby master Bug#17354] Module#const_source_location is misleading for constants awaiting autoload — tom@...

Issue #17354 has been reported by tomstuart (Tom Stuart).

21 messages 2020/11/29

[#101143] [Ruby master Feature#17355] Or-patterns (pattern matching like Foo(x) | Bar(x)) — fg@...

Issue #17355 has been reported by decuplet (Nikita Shilnikov).

8 messages 2020/11/29

[#101153] [Ruby master Feature#17356] Alignment of memory allocated through Fiddle struct's malloc — andrea.ribuoli@...

Issue #17356 has been reported by AndreaRibuoli (Andrea Ribuoli).

8 messages 2020/11/30

[ruby-core:100993] [Ruby master Bug#14704] Module#ancestors looks wrong when a module is both included and prepended in the same class.

From: merch-redmine@...
Date: 2020-11-20 21:28:02 UTC
List: ruby-core #100993
Issue #14704 has been updated by jeremyevans0 (Jeremy Evans).

Status changed from Open to Closed

The reason for this behavior is, at the point of the `Sub.include M2` call, `Sub.ancestors` is `[Sub, M1, M3, Object, Kernel, BasicObject]` and `M2.ancestors` is `[M3, M2]`.  So `Sub.include M2` looks in the ancestry tree for `M3`, since that is the first ancestor of `M2`.  It finds the ancestor already exists, so it does not add it.  Then it adds the next ancestor, `M2`, directly after.  Hence why you get `M1, M3, M2` in that order.

So this behavior isn't a bug, it's just how `Module#include` works.  There's not a way to handle all cases perfectly.  You either have to tradeoff on the order or allow modules to be added more than once:

* `M1, M3, M2` (current behavior) `M1` appears before `M3`, `M2` appears after `M3`, as you would expect since `M1` includes `M3` and `M2` prepends `M3`.
* `M2, M1, M3`: `M3` comes after `M2` even though `M2` prepends `M3`.
* `M3, M2, M1`: `M3` comes before `M1` even though `M1` includes `M3`.  Requires moving the `M3` iclass from after `M1` to before `M3` (`include` never moves positions of existing ancestors).
* `M3, M2, M1, M3`: `M3` appears multiple times in ancestry list.

If we are going to change the behavior, only `M3, M2, M1, M3` appears a reasonable candidate, and that would be a feature request to change `include` to add a module even though the module is already in the receiver's ancestors.  I think that approach is likely to cause backwards compatibility issues.

I'm going to close this now.  If you would like this reopened as a feature request to allow `include` to insert modules that are already in the ancestry list, please respond.

----------------------------------------
Bug #14704: Module#ancestors looks wrong when a module is both included and prepended in the same class.
https://bugs.ruby-lang.org/issues/14704#change-88659

* Author: knknkn1162 (Kenta Nakajima)
* Status: Closed
* Priority: Normal
* ruby -v: ruby 2.6.0dev (2018-04-20 trunk 63212) [x86_64-darwin17]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
`Module#ancestors` looks wrong when a module is both included and prepended in the same class.
Here is the example script:

```ruby
module M3; end
module M1
  include M3
end

module M2
  prepend M3
end


class Sub
  include M1
  include M2
end

# [Sub, M1, M3, M2, Object, Kernel, BasicObject]
p Sub.ancestors
```

The output is expected to be `[Sub, M2, M1, M3, Object, Kernel, BasicObject]` or `[Sub, M3, M2, M1, Object, Kernel, BasicObject]` or `[Sub, M3, M2, M1, M3, Object, Kernel, BasicObject]`, but the actual is `[Sub, M1, M3, M2, Object, Kernel, BasicObject]`.

When the `M1` and `M2` module aren't included or prepended at all like the below script, the result is `[Sub, M2, M1, Object, Kernel, BasicObject]`. In the first example, the position of the `M2` module seems to be wrong.

```ruby
module M1; end
module M2; end

class Sub
  include M1
  include M2
end

# [Sub, M2, M1, Object, Kernel, BasicObject]
p Sub.ancestors
```



-- 
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

Prev Next