[ANN] weakling 0.0.1 - a reference queue and weak ID hash for JRuby

  • Thread starter Charles Oliver Nutter
  • Start date


Charles Oliver Nutter

Hi all!

JRuby 1.5 will soon be released, in which ObjectSpace._id2ref does not
function unless ObjectSpace is turned on. Since the typical pattern
for _id2ref is to have a weak-valued hash of numeric IDs to objects,
I've released a simple extension to JRuby that provides a weak
id-to-object hash implementation plus support for weak reference
queues. Comments, questions, suggestions are welcome.

Announcing the "weakling" library!

weakling: a collection of weakref utilities for Ruby (JRuby only for the moment)

== Summary ==

This library provides:

* a modified WeakRef implementation for JRuby that supports a reference queue
* a WeakRef::RefQueue class
* a weak-valued ID map to replace typical uses of _id2ref

In the future it may provide additional features like a generic
WeakHash or other reference types like soft and phantom references.

The weakling repository is at http://github.com/headius/weakling.

== Usage ==

Just require 'weakling'. It will require 'weakref' along with the
refqueue JRuby extension and the weakling/collections library
containing the weak id hash.

== RefQueue Example ==

require 'weakling'
require 'java'

q = WeakRef::RefQueue.new
wr = WeakRef.new(Object.new, q)
puts "weakref object: #{wr.__id__}"

puts "running GC"

puts "weakref alive?: #{wr.weakref_alive?}"
puts "weakref object from queue: #{q.poll.__id__}"

== WeakRef::IdHash Example ==

require 'weakling'

wh = WeakRef::IdHash.new

ary = (1..10).to_a.map {Object.new}
ids = ary.map {|o| wh.add(o)}

puts "all items in weak_id_hash:"
ids.each {|i| puts "#{i} = #{wh}"}

puts "dereferencing objects"
ary = nil

puts "forcing GC"
require 'java'

puts "all items in weak id hash:"
ids.each {|i| puts "#{i} = #{wh}"}


Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads