Complexity: Implementation is straightforward, but overall complexity is moderate, because we need to make decisions about how to deal with things like looping constructs.
Complexity: High. There are type system issues, but more importantly, the whole design space is one in which everyone has an opinion but converging on workable answers is challenging. There has been productive discussion on-going on the BitC list.
Rationale: Without this, inner references and by-ref can create a number of problems.
Status: Essentially done as of 12/12/2008. Needs to be documented in the specification.
Complexity: This turned out to be moderately nasty.
Rationale: Without this, our ability to initialize is severely restricted.
Status: Defined. Effect types must be implemented before this can be completed.
Complexity: Straightforward.
(pure ...) form more generally.Rationale: Without this, many globals must be declared mutable that could otherwise be constant, which in turn impedes optimization.
Status: Depends on implementation of effect types.
Complexity: Trivial once effect types are done.
Rationale: Solves the "colliding type class" problem.
Status: Not yet started.
Complexity: Requires that we switch to a back-tracking solver.
Rationale: Gives us just enough existential typing to get by.
Status: Shap has implemented structure methods. Object methods are straightforward, but the associated type constraints cannot be expressed without has-field.
Complexity: Straightforward.
Rationale: Essential for efficient I/O implementation.
Status: Dropped. See array-ref. A specialized form of literal instantiation was implemented to support has-field, but this case was straightforward. An integer literal was to have been simultaneously a member of a single-element integer literal type and a member of the usual integer types. That proved to be excessively complicated, which is why we dropped the more general form of literal instantiation.
Complexity: Straightforward.
Rationale: Essential for efficient I/O implementation. Replaces literal instantiation.
Status: Completed
Complexity: Straightforward.
has-field)Rationale: Required to state type class dependencies for objects/capsules. Also gives us a form of lateral abstraction.
Status: Straightforward, but not yet started. Ideal implementation requires literal instantiation.
Complexity: Requires updates in the solver. Turned out to be less straightforward than we initially thought, because the method rewrite can occur late (in the instantiator), which required some care about the ordering of AST rewrites and calls to the type checker to re-type things.
Has-field is a specialized form of literal inference, but each field name is a member only of its corresponding unit type. There is no generalized type of field names.
Status: In progress, not yet complete.
Status: Two proposals exist. We need to look at usability issues here.
Status: Not yet started.
Status: Abandoned in favor of using type classes.
Status: Dropped in favor of the capsule/object notion.
1.4.7