>
> Hi Ara,
>
> There is also Stash library (gem install stash -or- gem install
> hashery).
>
> One difference between Stash and your Map, is that it uses Strings
> rather then Symbols for keys so they can be garbage collected.
>
> Looks like we created these libraries for the same reason. I agree
> with your statement "the ruby container you've always wanted". IMO
> Ruby's built-in Hash should work like this because most of the time
> that's really what we want. A Hash that allows for any type key could
> be separate class instantiated explicitly.

map does use strings: http://github.com/ahoward/map/blob/master/lib/map.rb#L123


big differences between the two libs actually: map is *always*
ordered.  stash does not appear to be...

map also works recursively:

ruby-1.8.7-p302 > require 'map'
 => true
ruby-1.8.7-p302 > m = Map.new
 => {}
ruby-1.8.7-p302 > m.update :k => {:a => {:x => 42}}
 => {"k"=>{"a"=>{"x"=>42}}}
ruby-1.8.7-p302 > m['k']['a']['x']
 => 42


stash does not:

ruby-1.8.7-p302 > require 'stash'
 => true
ruby-1.8.7-p302 > s = Stash.new
 => {}
ruby-1.8.7-p302 > s.update :k => {:a => {:x => 42}}
 => {"k"=>{:a=>{:x=>42}}}
ruby-1.8.7-p302 > s['k']['a']['x']
NoMethodError: undefined method `[]' for nil:NilClass
	from (irb):14


so there are definitely big differences between the libs at this
point.  just FYI.

cheers.