"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

Reply via email to