[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Fundamental design flaws
> From: scgmille@xxxxxxxxxxxxxxxxxx
>> 1) [call/cc cursors capture protect their continuation]
> This is nothing compared to the kind of leaks that are possible with
> cursors alone. Thats one of the major arguments for enumeration after
> all.
I have no idea what you're talking about.
> Btw, you're mistaken about call/cc and dynamic environments, I believe.
> Try this code in a Scheme system:
> (define x #f)
> (begin (call/cc (lambda (k) (set! x k))) (display "hi"))
> (current-output-port (open-output-file "/tmp/foo"))
> (x)
What do you think I'm mistaken about? I was thinking about typical
implementations of WITH-{INPUT,OUTPUT}-FILE which handle escape
continuations as you'd expect (which, admittedly, is not required by
R5RS). In general, any feature of a program that uses dynamic scope
is going to interact awkwardly, at best, with call/cc-cursors.
> > > > (error "there is no such thing as a set"))
> Hardly. A function like the one taylor wrote is explicitly illegal=20
> based on the definition of union, assuming a real set is being passed.
But since 44 gives no way to create a real set, a conforming
implementation can use implementations that just call error.
> > I'm saying: either don't try to operate on the Scheme types at all, or
> > design 44 in such a way that the collections procedures work on (at
> > least): [e.g., uses of lists as sequences, sets, ordered
> > sequences, and (as association lists) dictionaries.]
> The problem here is that the generic inter-collection operators
> (add-all, etc) are too useful.
There are plenty of ways to do operations like that that don't rely on
a collection type -- and some of those ways are better.
If I want to ADD-ALL from some list, I want different things depending
on whether I'm using the list as a sequence or a dictionary. Do you
think it's impossible to provide interfaces that let me make that
distinction?
> Changing the SRFI to support non-collection datastructures at
> the expense of this flexibility is just not an option. There is
> also a lot of new formalism in this SRFI that you often need a
> more complicated datastructure to encapsulate, and which needs
> to be passed around with the collection.
> I think your mistake is confusing datastructures, which are low
> level (lists, pairs, vectors) with collections. A collection is
> a combination of datastructure, semantics, and interface.
That's a red herring.
Lists and associatve lists are an example of non-disjoint types both
of which have a clear interpretation both as a sequence and a
dictionary but I don't think they are the only one.
It is an inessential property of a sequence that it also be
not-a-dictionary. Introducing collection procedure which require
sequences to be disjoint from dictionaries treats that inessential
distinction as an essential one: it makes the interfaces in 44 less
suitable for future extension.
-t