[#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:101070] [Ruby master Feature#17322] Deprecate `Random::DEFAULT` and introduce `Random.default()` method to provide Ractor-supported default random generator

From: ko1@...
Date: 2020-11-25 19:32:27 UTC
List: ruby-core #101070
Issue #17322 has been updated by ko1 (Koichi Sasada).


At the last dev-meeting, there is an idea to replace `Random::DEFAULT` with an object which delegate per-ractor random generators.
Fortunately, `Random` class object can be good placeholder because it already has `Random.rand`, `Random.bytes` and so on.

```
Random::DEFAULT = Random
p Random::DEFAULT.rand(2) #=> 0 or 1
```

The specification change is:

* `Random::DEFAULT` isn't `Random` instance.
* `Random.rand()`, `Random.bytes()` and so on use per-ractor random generator. Maybe this is implementation dependent. JRuby and so on can use thread-local random generators.
* `rand()`, `srand()` use `Random.rand()`, Random.srand()` respectively (but it doesn't trace `Random::DEFAULT` replacement as current implementation deosn't)
* `Random.seed()` is added to return current seed of per-ractor default random generator.

Advantages:

* We don't need to change most of code.
* We can introduce per-ractor (per-thread and so on) semantics naturally.

Disadvantages => It can break the compatibility because `Random::DEFAULT` is a `Class` instance.

* can not save the state of `Random::DEFAULT`
   * We can not use `dup` for it (there is a test using `Random::DEFAULT.dup` in test/ruby/test_random.rb).
   * We can not use marshal protocol to save the random generator states of `Random::DEFAULT`.
   * I'm not sure how it is important.
* can not use instance methods of `Random` class
   * If user defines `Random#foo`, but `Random::DEFAULT.foo` is not available.

I checked `Random::DEFAULT` usage with gem-codesearch and most of case it uses `Random::DEFAULT.rand()` and so on.

I can't trace how to use `Random::DEFAULT` for the following 4 cases.


```
/srv/gems/kmat-0.0.3/lib/kmat/random.rb:                Random::DEFAULT.randn(*args)
/srv/gems/kmat-0.0.3/lib/kmat/random.rb:                Random::DEFAULT.randn(*args)

# I can't find the `Random#randn` definition.

/srv/gems/prop_check-0.14.1/lib/prop_check/property.rb:      rng = Random::DEFAULT

# I can't find how to use `rng`

/srv/gems/util-0.4.0/lib/util/args.rb:      Random => Random::DEFAULT,

# I can't find how to use this information.
```

This is implementaiton: https://github.com/ruby/ruby/pull/3813


----------------------------------------
Feature #17322: Deprecate `Random::DEFAULT` and introduce `Random.default()` method to provide Ractor-supported default random generator
https://bugs.ruby-lang.org/issues/17322#change-88745

* Author: ko1 (Koichi Sasada)
* Status: Open
* Priority: Normal
----------------------------------------
`Random::DEFAULT` a default random generator used by `rand`, `srand`, `Array#shuffle` without a given random generator, and so on.

Random generators are not thread-safe, so they are not ractor safe, and they are not shareable.
So a program refer to `Random::DEFAULT` on non-main ractor, it causes an error.

To provide per-ractor default random generator, this ticket propose the `Random.default()` method which returns per-ractor random generator.
`Random::DEFAULT` is a result of `Random.default()` on main-ractor and it should be deprecated, or at least it should not be used on multi-ractor supporting apps and libraries.





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