[#64703] Add `Hash#fetch_at` (issue #10017) — Wojtek Mach <wojtek@...>
Hey guys
1 message
2014/09/01
[#64711] [ruby-trunk - Bug #10193] [Closed] TestIO#test_readpartial_locktmp fails randomly — nobu@...
Issue #10193 has been updated by Nobuyoshi Nakada.
3 messages
2014/09/02
[#64744] [ruby-trunk - Bug #10202] [Open] TestBenchmark#test_realtime_output breaks on ARM — v.ondruch@...
Issue #10202 has been reported by Vit Ondruch.
3 messages
2014/09/03
[#64823] documenting constants — Xavier Noria <fxn@...>
I am writing a Rails guide about constant autoloading in Ruby on
5 messages
2014/09/07
[#64838] [ruby-trunk - Bug #10212] [Open] MRI is not for lambda calculus — ko1@...
Issue #10212 has been reported by Koichi Sasada.
6 messages
2014/09/08
[#64858] Re: [ruby-trunk - Bug #10212] [Open] MRI is not for lambda calculus
— Eric Wong <normalperson@...>
2014/09/08
rb_env_t may use a flexible array, helps a little even on my busy system:
[#64871] Re: [ruby-trunk - Bug #10212] [Open] MRI is not for lambda calculus
— SASADA Koichi <ko1@...>
2014/09/08
(2014/09/08 19:48), Eric Wong wrote:
[#64972] [ruby-trunk - Bug #10231] [Open] Process.detach(pid) defines new singleton classes every call — headius@...
Issue #10231 has been reported by Charles Nutter.
3 messages
2014/09/11
[#64980] [ruby-trunk - Bug #10212] MRI is not for lambda calculus — ko1@...
Issue #10212 has been updated by Koichi Sasada.
4 messages
2014/09/12
[#65142] [ruby-trunk - Feature #10267] [Open] Number of processors — akr@...
Issue #10267 has been reported by Akira Tanaka.
4 messages
2014/09/20
[#65144] Re: [ruby-trunk - Feature #10267] [Open] Number of processors
— Eric Wong <normalperson@...>
2014/09/20
akr@fsij.org wrote:
[#65210] [ruby-trunk - misc #10278] [Assigned] [RFC] st.c: use ccan linked list — nobu@...
Issue #10278 has been updated by Nobuyoshi Nakada.
3 messages
2014/09/22
[ruby-core:64761] [ruby-trunk - Feature #10200] Symbol list/count API with Symbol GC
From:
matz@...
Date:
2014-09-04 11:00:26 UTC
List:
ruby-core #64761
Issue #10200 has been updated by Yukihiro Matsumoto.
This request is bit vague.
As a result of the developers meething on 2014-09-04, we will:
* keep Symbol.all_symbols as it is.
* remove Symbol.find(name).
Matz.
----------------------------------------
Feature #10200: Symbol list/count API with Symbol GC
https://bugs.ruby-lang.org/issues/10200#change-48649
* Author: Koichi Sasada
* Status: Open
* Priority: Normal
* Assignee: Yukihiro Matsumoto
* Category: core
* Target version: current: 2.2.0
----------------------------------------
# Abstract
We need to consider specification of "Symbol.all_symbols" method because of Symbol GC.
# Backgraound
Symbol.all_symbols returns an array includes all symbols in this Ruby interpreter process.
```
"a#{1+2}b".to_sym
p Symbol.all_symbols.last #=> :a3b. Order of this array is implementation dependent.
```
However, Ruby 2.2 will introduce [symbol GC] (https://bugs.ruby-lang.org/issues/9634).
With symbol GC, dynamically created symbols can be collected like this:
```
"a#{1+2}b".to_sym
p Symbol.all_symbols.last #=> :a3b
GC.start
p Symbol.all_symbols.last #=> :$-a <- :a3b is collected
```
Symbol class has another API Symbol.find() to get a symbol from a corresponding string object like that:
```
str = "a#{1+2}b"
str.to_sym
p Symbol.all_symbols.last #=> :a3b
p Symbol.find(str) #=> :a3b
GC.start
p Symbol.all_symbols.last #=> :$-a <- :a3b is collected
p Symbol.find(str) #=> nil
```
Symbol GC separate all symbols into two types (because of implementaion details):
* (1) Collecatable symbols
* (2) Uncollectable symbols (we can not free even if there are no reference to these symbols)
Now, Symbol.all_symbols returns (1) + (2).
Symbol.all_symbols and Symbol.find methods assume that all symbols are immortal (assume only (2)). However, this assumption is changed ((1) is added).
[Symbol.count] (https://bugs.ruby-lang.org/issues/9963) is proposed to count (2) symbols.
Now, we don't have any way to count (2), because Symbol.all_symbols.size returns (1) and (2) symbols.
# Discussion
Maybe there are several possibility:
(a) No change (Symbol.all_symbols and Symbol.find treat with (1) + (2) symbols)
(b) Symbol.all_symbols and Symbol.find treat with (2) symbols
(c) Add new parameter to Symbol.all_symbols and Symbol.find to specify (2) or (1)+(2)).
(b) and (c) is reasonable for recent usage for these API, to findout immortal objects.
However, Symbol GC reduces danger of DoS attack with huge number of immortal objects.
Thoughts?
--
https://bugs.ruby-lang.org/