Anton van Straaten
Mon Dec 12 00:01:47 EST 2005
dyb at cs.indiana.edu wrote:
> So, while I think I can probably implement your modified semantics (both
> set! and lhs id must originate in the exporting module), it's only one
> of several possible interpretations of "settable only by the exporting
> module", and I believe it will lead to confusion. Your semantics
> also falls short of supporting program analysis in the way that true
> external immutability would, negating one of the potential benefits
> of immutability.
> I'm happy to compromise on the mutability issue and make module exports
> immutable if all exports (direct or indirect) are totally immutable,
> so that we avoid confusion and support program analysis.
By "totally immutable", do you mean to disallow even the exporting
module from mutating its own exported variables? Or do you mean the
option you described earlier, "set! has to appear in the residual code
(post macro expansion) of the body of the exporting module."
I'm in favor of the latter. It prevents the problem raised by the
example you've just given, and in general, it should prevent external
mutation of variables which the exporting module did not intend to allow
to be mutated. This seems to me a good rationale for this particular
interpretation of "settable only by the exporting module".
More information about the R6RS