Objects have: Collection of Flags Flags have type/name associated with them Are either present or not present Assumptions: Task parameters can't be modified How do we handle new object allocation? Idea #1: Set flags at allocation Only allow flag setting at exit for parameters Non parameter variables: 1) Type must contain flags 2) Apply flag additions to all states Tags operations: create_tag operation(type) tag name=new tag(type); associate_with_tag operation(object, tag) Dispatch: after flag status, allow tag status... each tag state is of the form: Type(name) Other approach: Tag sets: {x, y, z, ... in R Allow additions/removals of tuples in taskexit: remove from R add to R Allow addition of new tuples in object allocation add to R ------------------------------------------------------------------------------ Collection of Tags Tags have type/name associated with them Also have UID associated with them Two basic types: Ordered: Initial/Next / Preserves Sequencing Non-ordered: New / Groups items together ---------------------------------------------------------------------- Tasks: Have list of parameters w/ flag/tag specifications Flag/Tag transitions at task exit ----------------------------------------------------------------------- Problems: How do we efficiently do task dispatch? Idea: Flags - efficiently Build static state transition diagram : explore full space for now Then for each state transition we consider: 1) What task activations have we added 2) What task activations have we removed Collapse state transition diagram to Tags - search once we match a flag Input: trigger role specification for tasks: role mutator operation: role definition: Generate: Role transition diagram Initial features: methods structs type system Language features: Single Inheritance Virtual methods Objects object metastate: 1. flags: flag role1 2. tags: tag tag1 tag operations: tag tag1=new tag; tag tag2=incrementtag(tag tag1); tag tag3=no tag; metastate operations: task foo(type1 o1{role1||role2}, type2 o2{role3}) { exit(o1{role1'=false},o2{role3'=false},onew{role4=true}); } ---------------------------------------------------------------- ---------------------------------------------------------------- Initial design: ---------------------------------------------------------------- Provide runtime with: 1) List of tasks a) Task names b) Parameter types c) Flag settings 2) List of flags for each type 3) Flag transition calls