"Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary."
That's a beautifully expressed idea. When considering Thing One features I think it would be worth asking: what's the underlying essential piece here that would make more things possible? I think those are exactly the things that should be in Thing One. One argument for including them in Thing One is that compilers would have an opportunity to optimize them--and since they're so fundamental the benefit of such optimization could be substantial. In what's been discussed so far I think there are at least two such building blocks. One is homogeneous vectors; the other is growable vectors. On the first point, imagine something like define-record-type that defines homogeneous vectors. From such a construct programmers could build their *own* strings and blobs (or, at least, u8 vectors). *That* is removing a weakness that makes other features appear necessary. Of course, I know homogeneous vectors are an old idea; I'm just suggesting that it's a perfect Thing One candidate because it's so fundamental. (One point, perhaps obvious: you should be able to define homogeneous vectors of any type--including specific record types.) On the second point, growable vectors are hidden inside open-output-string and open-output-blob (or whatever it might be called). But the concept of "growable vector" ends up getting attached to ports when it needn't be--and shouldn't be. Indeed, growable vectors make a whole new style of programming possible: with them you'd be able to write filter, map, remove, etc. for vectors. And you'd be able to write open-output-string and open-output-blob too. For me, at least, that's what Scheme is at its core: not a fundamental set of library calls but, rather, a fundamental set of building blocks. _______________________________________________ r6rs-discuss mailing list [email protected] http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss
