[#58730] [ruby-trunk - misc #9188][Open] r43870 make benchmark/bm_so_k_nucleotide.rb slow — "authorNari (Narihiro Nakamura)" <authorNari@...>

17 messages 2013/12/01

[#58732] [ruby-trunk - Bug #9189][Open] Build failure on Windows in case of nonascii TEMP environment. — "phasis68 (Heesob Park)" <phasis@...>

11 messages 2013/12/01

[#58750] [ruby-trunk - Feature #9190][Open] Expose serial helper macros — "simeonwillbanks (Simeon Willbanks)" <sfw@...>

13 messages 2013/12/01

[#58756] [ruby-trunk - Bug #9192][Open] Inconsistent comparison between Float and BigDecimal — "vatsu (Gustavo Sales)" <vatsu21@...>

18 messages 2013/12/02

[#58797] [ruby-trunk - Bug #9198][Open] Segfault in TestException#test_machine_stackoverflow — "vo.x (Vit Ondruch)" <v.ondruch@...>

11 messages 2013/12/02

[#58833] [ruby-trunk - Bug #9205][Open] Assertion failed: heap_pages_deferred_final == 0 — "phasis68 (Heesob Park)" <phasis@...>

11 messages 2013/12/03

[#58866] [ruby-trunk - misc #9215][Open] Maintenance Policy for Future Releases (2.1.0 & beyond) — "hone (Terence Lee)" <hone02@...>

17 messages 2013/12/05

[#58876] [ruby-trunk - Bug #9221][Open] Time.parse performance becomes exponentially worse as string length grows — "mpelzsherman (Michael Pelz-Sherman)" <mpelzsherman@...>

15 messages 2013/12/05

[#58948] [ruby-trunk - Bug #9226][Open] Getting method `inspect' called on unexpected T_NODE object (0x000000025ddea8 flags=0x109089c klass=0x0) (NotImplementedError) from Hash#inspect — "myronmarston (Myron Marston)" <myron.marston@...>

11 messages 2013/12/07

[#59032] [ruby-trunk - Bug #9239][Open] Array#to_h ignores flat arrays — "sawa (Tsuyoshi Sawada)" <sawadatsuyoshi@...>

15 messages 2013/12/10

[#59122] [ruby-trunk - Bug #9251][Open] ! operator has lower precedence than = in an assignment expression — "rits (First Last)" <redmine@...>

26 messages 2013/12/15

[#59198] [ruby-trunk - Bug #9262][Open] global_method_cache should be configurable or grow automatically — "tmm1 (Aman Gupta)" <ruby@...1.net>

28 messages 2013/12/19

[#59209] [ruby-trunk - Bug #9264][Open] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — "spastorino (Santiago Pastorino)" <santiago@...>

15 messages 2013/12/19
[#59211] [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — "zzak (Zachary Scott)" <e@...> 2013/12/19

[#59212] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Santiago Pastorino <spastorino@...> 2013/12/19

zzak, make distclean is the first thing I've ran. Read the gist again :),

[#59213] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Zachary Scott <e@...> 2013/12/19

Sorry I missed the gist, can you try building outside of $srcdir?

[#59214] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Santiago Pastorino <spastorino@...> 2013/12/19

It works if I do ...

[#59215] Re: [ruby-trunk - Bug #9264][Feedback] Compiling error: encdb.bundle Undefined symbols for architecture x86_64 — Zachary Scott <e@...> 2013/12/19

I've been using the following:

[#59255] [ruby-trunk - Bug #9276][Open] "RUBY_FREE_MIN is obsolete. Use RUBY_GC_HEAP_FREE_SLOTS instead" warning should not be issued when both ENV vars are set. — "myronmarston (Myron Marston)" <myron.marston@...>

10 messages 2013/12/21

[#59260] [ruby-trunk - Feature #9278][Open] Magic comment "immutable: string" makes "literal".freeze the default for that file — "colindkelley (Colin Kelley)" <colin@...>

12 messages 2013/12/22

[#59343] [ruby-trunk - Bug #9309][Open] Crash while running tests — "mdemare (Michiel de MAre)" <merloen@...>

12 messages 2013/12/27

[#59345] [ruby-trunk - Bug #9310][Open] inheritance.rb: 27: [BUG] Segmentation fault at 0x00000c — "jasnow (Al Snow)" <jasnow@...>

10 messages 2013/12/27

[#59349] [ruby-trunk - Bug #9312][Open] Build the ruby executable in bin/ — "postmodern (Hal Brodigan)" <postmodern.mod3@...>

13 messages 2013/12/28

[#59365] [ruby-trunk - Bug #9316][Open] BigDecimal division in Ruby 2.1 — "abernardes (Andre Oliveira)" <abernardes@...>

15 messages 2013/12/28

[#59398] [ruby-trunk - Bug #9321][Open] rb_mod_const_missing does not generate a c-return event — "drkaes (Stefan Kaes)" <stkaes@...>

41 messages 2013/12/30

[#59429] [ruby-trunk - Feature #9330][Open] [PATCH 0/3] avoid redundant fcntl/fstat syscalls for cloexec sockets — "normalperson (Eric Wong)" <normalperson@...>

10 messages 2013/12/31

[ruby-core:59379] [ruby-trunk - Feature #6309] Add a reference queue for weak references

From: "headius (Charles Nutter)" <headius@...>
Date: 2013-12-29 16:07:37 UTC
List: ruby-core #59379
Issue #6309 has been updated by headius (Charles Nutter).


Sorry this didn't get into 2.1 and I was unable to review. December was probably too late to get it in anyway.

Nobu's patch looks fine. If other ruby-core folks really want to keep Weakref as-is for compatibility and introduce a new type, I guess that's the way we'll have to go.

A couple comments.

* ext/weakref should be deprecated and warn when loaded once ext/weak is in place.

* Is there interest in other possible reference types? If so, having a namespace for these new references would be less cumbersome. I will describe the reference types on JVM below.

On JVM, there is WeakReference, of course. There's also two others that are useful:

* SoftReference is a reference cleared less frequently than a weak reference. This is JVM implememtation-specific, but on OpenJDK it is a combination of heap pressure (if the heap has to be expanded, soft references are cleared) or if the soft reference is not traversed for some period of time (configurable as some number of ms/MB of heap).

* PhantomReference is similar to weak reference in life cycle, but is not traversible and only useful when combined with a queue. This is lighter-weight than weak reference, since it does not have to be cleared when the object is collected; it just needs to be enqueued. It also does not impact GC cycles as much, since it does not count as a strong or weak traversible reference.

If we might want these types of references in the future, it may be good to have a Reference namespace, a la Reference::Weak, Reference::Soft, etc.
----------------------------------------
Feature #6309: Add a reference queue for weak references
https://bugs.ruby-lang.org/issues/6309#change-43944

Author: headius (Charles Nutter)
Status: Assigned
Priority: Normal
Assignee: matz (Yukihiro Matsumoto)
Category: 
Target version: 2.1.0


Most interesting uses of WeakRef are much harder to do efficiently without a reference queue.

A reference queue, as implemented by the JVM, is basically a queue into which weak references are placed some time after the object they refer to has been collected. The queue can be polled cheaply to look for collected references.

A simple example of usage can be seen in the weakling gem, with an efficient implementation of an ID hash: https://github.com/headius/weakling/blob/master/lib/weakling/collections.rb

Notice the _cleanup method is called for every operation, to keep the hash clear of dead references. Failure to have a _cleanup method would mean the hash grows without bounds.

_cleanup cannot be implemented efficiently on MRI at present because there's no reference queue implementation. On MRI, _cleanup would have to perform a linear scan of all stored values periodically to search for dead references. For a heavily used hash with many live values, this becomes a very expensive operation.

It's probably possible to implement reference queues efficiently atop the new ObjectSpace::WeakMap internals, since it already keeps track of weak references and can run code when a weak reference no longer refers to a live object.


-- 
http://bugs.ruby-lang.org/

In This Thread