On Tue, 12 Oct 2010 10:48:26 -0400, Stewart Gordon <smjg_1...@yahoo.com> wrote:

On 10/10/2010 02:05, Jonathan M Davis wrote:
On Saturday 09 October 2010 06:54:31 Stewart Gordon wrote:
<snip>
Surely, what matters most for generic code is that in has consistent
_semantics_, rather than the computational complexity?

Stewart.

_Both_ matter.

True, yet you don't address semantic differences at all in what follows, so it doesn't really follow on from what I said. But anyway....

Imagine, for instance, if we were to make Java's mistake of having List be an interface which ArrayList and LinkedList implement and that List has a get() function. Using ArrayList, get() has a complexity of O(1). Using LinkedList, it
has a complexity of O(n).

Are you suggesting we just don't have a List interface, just to prevent people from writing algorithms that work well in some list implementations but poorly in others? I'm not sure if that risk outweighs any benefits....

No, what is suggested is that we build the complexity guarantees into the interface. For example, if you had a List interface, and it could only guarantee O(n) performance for get, you'd call it e.g. slowGet(), to signify it's a slow operation, and define get to signify a fast operation. Similarly, 'in' is defined to be fast, so it has no business being a function on an array.

So you can still have the List interface, but you don't hijack the "fast operation" of 'in' with a slow operation. This allows it to still provide the slow operation, just not in a way that makes generic code use it assuming it is fast.

-Steve

Reply via email to