On Tue, Dec 8, 2009 at 12:05 PM, David-Sarah Hopwood <[email protected]> wrote: > Note that this implies that the lexical environment of each successfully > created instance is observationally immutable, not just that it can't > be directly changed by that instance. I.e. it also can't be changed > indirectly via an operation on an argument ...
D'oww, I missed that one! Yes, thank you. > The implementation sketch I gave would preclude that use case because > if the supplied argument values are not copacetic, the object's read() > method would throw. This might have been too conservative -- if those > argument checks were omitted then the property above (that the function > instance can't change its lexical environment) would still hold. Yes. > It would be possible to make the argument and result checks optional > depending on the function annotation: say, /*...@pure*/ includes them but > /*...@functional*/ doesn't. (The environment checks would be the same, > and both /*...@pure*/ and /*...@functional*/ would mark instances as > copacetic.) Yeah I think we're talking about two, possibly both useful classes of behavior here. > What a fun discussion! Thanks for starting it. Glad to oblige. :) Ihab -- Ihab A.B. Awad, Palo Alto, CA
