Signature
From Erights
Kevin Reid (Talk | contribs) (describe Signature design) |
Kevin Reid (Talk | contribs) (wrong type for getDocComment, some todos) |
||
Line 6: | Line 6: | ||
(REVIEW: What should the expansion of the nonkernel "interface" expression be, given that we eliminate MessageDesc and ParamDesc which it uses?) | (REVIEW: What should the expansion of the nonkernel "interface" expression be, given that we eliminate MessageDesc and ParamDesc which it uses?) | ||
+ | |||
+ | (XXX Define the [[Miranda __getAllegedType/0]] behavior under this system precisely.) | ||
(XXX [[User:Kevin Reid]] needs to review the experimental code and add other design decision questions to this page.) | (XXX [[User:Kevin Reid]] needs to review the experimental code and add other design decision questions to this page.) | ||
Line 61: | Line 63: | ||
(REVIEW: Should this be a [[ConstSet]] instead of a [[ConstList]]?) | (REVIEW: Should this be a [[ConstSet]] instead of a [[ConstList]]?) | ||
- | {{instance msgdoc|getFQName|0||[[ | + | {{instance msgdoc|getFQName|0||[[String]]}} |
Returns the [[fully-qualified name]] constructed from the environment's FQN prefix and the object expr's pattern. | Returns the [[fully-qualified name]] constructed from the environment's FQN prefix and the object expr's pattern. | ||
+ | |||
+ | (XXX Define the method of construction.) | ||
(REVIEW: This was introduced for legacy compatibility; should it exist, be deprecated, or not exist?) | (REVIEW: This was introduced for legacy compatibility; should it exist, be deprecated, or not exist?) |
Revision as of 12:44, 14 August 2008
A Signature describes the protocol of another object.
This type is proposed to replace TypeDesc, MessageDesc, and ParamDesc; the motivation for doing so is that while TypeDesc allows for message parameters' guards to be presented, it is difficult to define the means for doing so as a miranda method; Signature is defined so as to simplify this. Furthermore, it is arguably "fewer moving parts" in that rather than having the TD/MD/PD structure imitating a subset of what Kernel-E can express, we use Kernel-E directly.
(REVIEW: Should we adopt Signature in place of TypeDesc?)
(REVIEW: What should the expansion of the nonkernel "interface" expression be, given that we eliminate MessageDesc and ParamDesc which it uses?)
(XXX Define the Miranda __getAllegedType/0 behavior under this system precisely.)
(XXX User:Kevin Reid needs to review the experimental code and add other design decision questions to this page.)
Contents |
State
-
objectExpr
:ObjectExpr -
env
:Scope -
supers
:List[Signature] -
mirandaSignature
:Signature
The most important fields of a signature are the object expr and env.
The object expr is the expression of the object which this is the signature of (or the closest approximation, if the object is not written in E), except that the method and matcher bodies have been replaced with UnspecifiedExpr, a new EExpr introduced for this purpose, and the auditors (implements
clause) have been eliminated.
The environment field contains a Scope with bindings for every free noun in the object expr. (These will mostly be guards.)
(REVIEW: This proposal therefore exposes every object mentioned in a parameter list. Is this too hazardous? (MarkM feels that the simple rule of "everything between the braces is public" (i.e. from the { of the object to the { of a method) helps.) Are there practical ways to reduce the potential harm from mentioning authority-bearing objects?)
The supers field lists additional signatures of protocols which this object also implements, such as by extends
, or explicit protocols.
(NOTE: A planned extension is to allow type-parameterized protocols. This will be done by allowing nouns not bound in the env, but bound by a parameter list instead. Such a signature responds to get/N returning a concrete protocol.)
Maker protocol
asType/0
asType() :Guard
Returns the Signature guard, which all products of this maker pass.
run/2
run(objectExpr :ObjectExpr, env :Scope) :Signature
As run/3 but with the supers field being []
.
run/3
run(objectExpr :ObjectExpr, env :Scope, supers :List[Signature]) :Signature
The specification for this message has not been written.
Protocol
getObjectExpr/0
- Signature: getObjectExpr() :ObjectExpr
Accessor; see state description.
getEnv/0
- Signature: getEnv() :Scope
Accessor; see state description.
getMirandaSignature/0
- Signature: getMirandaSignature() :Signature
Accessor; see state description.
getSupers/0
- Signature: getSupers() :List[Signature]
Accessor; see state description.
(REVIEW: Should this be a ConstSet instead of a ConstList?)
getFQName/0
- Signature: getFQName() :String
Returns the fully-qualified name constructed from the environment's FQN prefix and the object expr's pattern.
(XXX Define the method of construction.)
(REVIEW: This was introduced for legacy compatibility; should it exist, be deprecated, or not exist?)
getDocComment/0
Returns the object expr's docComment.
(REVIEW: This was introduced for legacy compatibility; should it exist, be deprecated, or not exist?)