[Minor] [minor commit] r669 - trunk/include/minor
jimb at red-bean.com
Tue Oct 24 15:58:37 CDT 2006
On 10/24/06, Karl Fogel <kfogel at red-bean.com> wrote:
> I found the hash iteration interface a bit confusing (though very clearly
> explained). In the interfaces I'm accustomed to, the 'iterator' object
> is distinct from an individual iteration, in other words it's the same
> object across all iterations.
Right, the iterator object is mutated by each step. This is a good
point, thanks for raising it. My motivation for doing it the way I
did --- this is embarrassing --- is that "freeing" the old iterator
and returning a "new" one allows me to implement iterators as simple
integer values, cast to 'mn_hash_iter_t'. The dream was that the
whole thing could turn into a straight 'for' loop indexing an array.
But it's not worth it. The 'next' function needs to scan the hash
table for the next non-empty entry, and that requires entering an
incoherent section (at least for now), so there's inevitable function
call overhead there. The gain is lost in the noise.
> I think the prefix for all Minor hash table functions and types should be
> "mn_hash_" consistently, never "mn_hash_table_". Or the other way
> around -- just not a mixture of the two, because with the mixture, the
> writer constantly stops to think "Oh, is this one with or without the
> 'table_' bit?"
The thought was that they were operations on a 'hash iterator', not a
'hash table'; the 'mn_hash_iter_' functions were a separate class from
the 'mn_hash_table_' functions. But it's a 'hash table iterator'
anyway, so this reasoning is not sound. I'll change it as you
suggest; it'll tighten up some pretty verbose stuff anyway.
> Also, some systems permit NULL values in hash tables, which allows
> them to be predicate systems without distraction: if the key is there,
> predicate is true, if the key is not there, predicate is false, and NULL
> is the natural value to use when we don't care a whit about the value.
I think in Scheme () or #t would be the natural thing to use in those
cases. If your C code puts C NULL as a value, what would that look
like to Scheme code?
> Finally, regarding your comment beginning "I'm torn: ...", don't be torn! :-)
> Your decision to make an opaque, type-independent interface from the start
> seems eminently sane to me, anyway.
I'm feeling better about it this morning, too.
More information about the Minor