weak_hash

A Weak Hash is a hash that stores references to objects while retaining the garbage collector’s ability to reclaim the object.

The API is similar to that of a Hash:

object = Object.new

wh = WeakHash.new wh = object

wh # => object

object = nil wh # => object (if garbage collector has not collected the object yet)

GC.start; GC.start # very probable that the object is collected now.

wh # => nil

Credits

This gem is based on two blog posts by Mauricio Fernández, including code by him and Robert Klemme:

eigenclass.org/hiki/weakhash+and+weakref eigenclass.org/hiki/deferred-finalizers-in-Ruby

I wrapped this on a gem for convenience, replaced a Thread.critical call on SimpleWeakHash with a mutex (for making it work with 1.9) and added some very simple specs.

Note on Patches/Pull Requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright © 2010 Emmanuel Oga. See LICENSE for details.