Announcing E 0.8.4: The Birthday Release

Tyler Close tyler@waterken.com
Thu, 27 May 1999 20:09:06 -0400


> Is there some semantic trouble we would get into by adding an
> 'implementsSameMapping' method (feel free to substitute a better name)
> to the table protocol?

It would be hell on wheels to implement. If you want to do comparisons like that
you should be using a binary tree and not a hashtable.

So maybe E tables aren't tables but binary trees. This means the whole
non-determinism thing goes away since there's only one possible ordering. It
also means that:

	? ["foo" => 3, "bar" => 4]
	# value: ["bar" => 4, "foo" => 3]

	? ["foo" => 3, "bar" => 4] == ["bar" => 4, "foo" => 3]
	# value: true

There is precedent for doing this. The C++ STL defines the set<> and map<>
templates to be binary trees. They did this because of the more absolute runtime
guarantees that can be placed on a red-black tree (slower, but certain).

Union, intersection, difference, etc. operations are all better implemented with
tree based sets.

The problem here is that E overloads [] to mean both a list and a table. You're
not allowed to re-order a list from what was entered by the user.

If:
	("markm", 42)
was a list/array/tuple and maybe also a hashtable, then using [] for a tree
would be ok. I also think it would be neat if:
	birthday("markm", 42)
was a typed tuple and:
	e_lang birthday("markm", 42)
meant "send e_lang the following birthday tuple".

But now I've probably gone too far afield.

Tyler