Declare -- was Re: [E-Lang] ERTP-aware MintMaker
Dean Tribble
tribble@e-dean.com
Fri, 16 Feb 2001 14:11:16 -0800
For starters, please, please use a new subject when introducing a new
construct/discussion topic.
The following strenuous objections may lead to some guidelines for
determining the new syntax.
- it makes 'def' violate the fundamental scoping rule (major)
- it makes it lexically inobvious whether a 'def' introduces a new name or
not--you can't tell whether you need to look before it (major)
- it introduces another keyword that binds names (minor)
- it's not clear which occurrence (the declare or the def) can have value
guards, etc.
The above concerns drive towards a syntax in which resolving the promise is
not a declaration syntax (because the value has already been
declared). Thus, figure out that syntax first, and the guard desires will
drive the declaration issues. For example,
def foo
with no value provided makes it a promise for 'foo' (though a ValueGuard
would be allowed).
resolve(foo) := bar
would resolve 'foo' to be 'bar'. In the above, 'def foo' could be
approximated as
def [foo, foo__resolver] := PromiseMaker new
and 'resolve(foo)' becomes
foo_resolver
Conceivably you could use a different keyword instead of 'def' (e.g.,
'promise'), but
- the above syntax is otherwise illegal
- it would not make sense to use a Promise in a 'var' slot
- it permits of ValueGuards in exactly one (syntactically familiar) place
- the immutability properties required by 'def' are preserved (it never has
a different value)
It seems like this is worth considering. I would prefer a more obvious
syntax to the 'resolve(foo)', though.