Changeset a6c45c6
- Timestamp:
- Apr 29, 2021, 10:58:35 AM (3 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 2d8a770
- Parents:
- c1136c56
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/andrew_beach_MMath/features.tex
rc1136c56 ra6c45c6 101 101 between different sub-hierarchies. 102 102 This design is used in \CFA even though it is not a object-orientated 103 language using different toolsto create the hierarchy.103 language; so different tools are used to create the hierarchy. 104 104 105 105 % Could I cite the rational for the Python IO exception rework? … … 123 123 \section{Virtuals} 124 124 Virtual types and casts are not part of \CFA's EHM nor are they required for 125 any EHM. But \CFA uses a hierarchial system of exceptions and this feature 126 is leveraged to create that. 127 128 % Maybe talk about why the virtual system is so minimal. 129 % Created for but not a part of the exception system. 125 any EHM. 126 However the \CFA uses a hierarchy built with the virtual system as the basis 127 for exceptions and exception matching. 128 129 The virtual system would have ideally been part of \CFA before the work 130 on exception handling began, but unfortunately it was not. 131 Because of this only the features and framework needed for the EHM were 132 designed and implemented. Other features were considered to ensure that 133 the structure could accomidate other desirable features but they were not 134 implemented. 135 The rest of this section will only discuss the finalized portion of the 136 virtual system. 130 137 131 138 The virtual system supports multiple ``trees" of types. Each tree is … … 175 182 While much of the virtual infrastructure is created, it is currently only used 176 183 internally for exception handling. The only user-level feature is the virtual 177 cast, which is the same as the \Cpp \ lstinline[language=C++]|dynamic_cast|.184 cast, which is the same as the \Cpp \codeCpp{dynamic_cast}. 178 185 \label{p:VirtualCast} 179 186 \begin{cfa} … … 197 204 \begin{cfa} 198 205 trait is_exception(exceptT &, virtualT &) { 199 virtualT const & get_exception_vtable(exceptT *);206 // Numerous imaginary assertions. 200 207 }; 201 208 \end{cfa} 202 209 The trait is defined over two types, the exception type and the virtual table 203 type. This should be one-to-one: each exception type has only one virtual 204 table type and vice versa. The only assertion in the trait is 205 @get_exception_vtable@, which takes a pointer of the exception type and 206 returns a reference to the virtual table type instance. 207 208 % TODO: This section, and all references to get_exception_vtable, are 209 % out-of-data. Perhaps wait until the update is finished before rewriting it. 210 The function @get_exception_vtable@ is actually a constant function. 211 Regardless of the value passed in (including the null pointer) it should 212 return a reference to the virtual table instance for that type. 213 The reason it is a function instead of a constant is that it make type 214 annotations easier to write as you can use the exception type instead of the 215 virtual table type; which usually has a mangled name. 216 % Also \CFA's trait system handles functions better than constants and doing 217 % it this way reduce the amount of boiler plate we need. 210 type. Each exception type should have but a single virtual table type. 211 Now there are no actual assertions in this trait because the trait system 212 actually can't express them (adding such assertions would be part of 213 completing the virtual system). The imaginary assertions would probably come 214 from a trait defined by the virtual system, and state that the exception type 215 is a virtual type, is a decendent of @exception_t@ (the base exception type) 216 and note its virtual table type. 218 217 219 218 % I did have a note about how it is the programmer's responsibility to make … … 473 472 The symmetry between resumption termination is why this pattern was picked. 474 473 Other patterns, such as marking just the handlers that caught, also work but 475 lack the symmetry means there are lessrules to remember.474 lack the symmetry means there are more rules to remember. 476 475 477 476 \section{Conditional Catch} … … 558 557 \end{cfa} 559 558 If there are further handlers after this handler only the first version will 560 check them. If multiple handlers on a single try block could handle the same561 exception the translations get more complex but they are equivilantly559 check them. If multiple handlers on a single try block that could handle the 560 same exception the translations get more complex but they are equivilantly 562 561 powerful. 563 562 … … 634 633 and the current stack is 635 634 unwound. After that it depends one which stack is being cancelled. 636 \begin{description} 637 \ item[Main Stack:]635 636 \paragraph{Main Stack} 638 637 The main stack is the one used by the program main at the start of execution, 639 638 and is the only stack in a sequential program. … … 646 645 to, so it would have be explicitly managed. 647 646 648 \ item[Thread Stack:]647 \paragraph{Thread Stack} 649 648 A thread stack is created for a \CFA @thread@ object or object that satisfies 650 649 the @is_thread@ trait. … … 672 671 Also you can always add an explicit join if that is the desired behaviour. 673 672 674 \ item[Coroutine Stack:]673 \paragraph{Coroutine Stack} 675 674 A coroutine stack is created for a @coroutine@ object or object that 676 675 satisfies the @is_coroutine@ trait. … … 686 685 (in terms of coroutine state) called resume on this coroutine, so the message 687 686 is passed to the latter. 688 \end{description}
Note: See TracChangeset
for help on using the changeset viewer.