Changes in / [2d8a770:3ec79f7]
- Location:
- doc/theses/andrew_beach_MMath
- Files:
-
- 7 edited
-
Makefile (modified) (1 diff)
-
cfalab.sty (modified) (5 diffs)
-
existing.tex (modified) (13 diffs)
-
features.tex (modified) (14 diffs)
-
future.tex (modified) (1 diff)
-
implement.tex (modified) (6 diffs)
-
uw-ethesis.tex (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/andrew_beach_MMath/Makefile
r2d8a770 r3ec79f7 34 34 ${LATEX} ${BASE} 35 35 ${BIBTEX} ${BUILD}/${BASE} 36 ${LATEX} ${BASE} 36 37 ${GLOSSARY} ${BUILD}/${BASE} 37 38 ${LATEX} ${BASE} -
doc/theses/andrew_beach_MMath/cfalab.sty
r2d8a770 r3ec79f7 10 10 11 11 % Other packages required. 12 %13 % Access to new basic LaTeX tools and other low level commands.14 12 \RequirePackage{etoolbox} 15 % Code formatting tools and environments.16 13 \RequirePackage{listings} 17 % Automatically adds spaces.18 14 \RequirePackage{xspace} 19 % Improved reference tools.20 \RequirePackage[nospace]{varioref}21 15 22 16 % Symbols: All symbols are zero argument robust commands with special rules … … 26 20 27 21 % \newsymbolcmd{<command>}{<replacement text>} 28 % Defines <command> to be a symbol that has the given <replacement text>.22 % Defines <command> to be a symbol that has the given <replacement text>. 29 23 \newrobustcmd*\newsymbolcmd[2]{\newrobustcmd{#1}{\cfalab@symbol{#2}}} 30 24 \def\cfalab@symbol#1{\@ifnextchar*{#1\cfalab@eatstar}{#1\xspace}} … … 34 28 \newsymbolcmd\CFA{\textsf{C}\raisebox{\depth}{\rotatebox{180}{\textsf{A}}}} 35 29 % C++ with kerning. (No standard number support.) 36 \newsymbolcmd\C pp{\textrm{C}\kern-.1em\hbox{+\kern-.25em+}}30 \newsymbolcmd\CPP{\textrm{C}\kern-.1em\hbox{+\kern-.25em+}} 37 31 38 % This is executed very early in the \begin{document} code, before the 39 % document's contents but after packages are loaded. 32 % This is executed very early in the \begin{document} code. 40 33 \AtEndPreamble{ 41 34 \@ifpackageloaded{hyperref}{ … … 43 36 \pdfstringdefDisableCommands{ 44 37 \def\CFA{CFA} 45 \def\Cpp{C++} 46 \def\lstinline{} 38 \def\CPP{C++} 47 39 } 48 40 }{} 49 41 } 50 51 % \colour{<colour>}{<text>}52 % Just \color but using the LaTeX style instead of TeX style command.53 \newcommand*\colour[2]{{\color{#1}#2}}54 55 % \code*{<code>}56 % Use the listings package to format a snipit of <code>.57 \newrobustcmd*\codeCFA[1]{\lstinline[language=CFA]{#1}}58 \newrobustcmd*\codeC[1]{\lstinline[language=C]{#1}}59 \newrobustcmd*\codeCpp[1]{\lstinline[language=C++]{#1}}60 \newrobustcmd*\codePy[1]{\lstinline[language=Python]{#1}}61 62 % Use the listings package to format a block of CFA code.63 % Extra listings options can be passed in as an optional argument.64 \lstnewenvironment{cfa}[1][]{\lstset{language=CFA}\lstset{#1}}{}65 66 % \settextunderscore{(new|old)}67 % Redefines the underscore either as a new repersentation or the old one.68 % Not that some other packages (ex. hyperref) can override this. Set it up69 % after loading them.70 \let\cfalab@textunderscore@old=\textunderscore71 \newcommand\cfalab@textunderscore@new{%72 \leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}}73 \newcommand\settextunderscore[1]{%74 \renewcommand\textunderscore{\csuse{cfalab@textunderscore@#1}}}75 42 76 43 % The CFA listings language. Based off of ANCI C and including GCC extensions. … … 94 61 \lstset{defaultdialect={[UW]CFA}} 95 62 96 % Create an internal paragraph indent amount. This is used internally to 97 % mimic the standard indent even when it has been overriden in the document. 98 \newlength\cfalab@parindent 99 \deflength\cfalab@parindent{\parindent} 100 101 % The cfacommon style has many useful defaults for CFA and other types of 102 % code. Use the listings option "style=cfacommon" to load them. 103 \lstdefinestyle{cfacommon}{ 104 columns=fullflexible, 105 basicstyle=\linespread{0.9}\sf, 106 stringstyle=\tt, 107 tabsize=5, 108 % Indent code to paragraph indentation. 109 xleftmargin=\cfalab@parindent, 110 % Allow ASCII characters in the range 128-255. 111 extendedchars=true, 112 % This allows you to use "math mode" to insert LaTeX into the code. 113 % Use \( and \) if you need to insert math mode inside that code. 114 escapechar=\$, 115 % Disable LaTeX math escape in CFA code $...$ 116 mathescape=false, 117 keepspaces=true, 118 % Do not show spaces with cup. 119 showstringspaces=false, 120 % Show blank lines at end of code. 121 showlines=true, 122 % Spacing above/below code block. 123 aboveskip=4pt,belowskip=0pt, 124 numberstyle=\footnotesize\sf, 125 % Replace/adjust listing characters that look bad in sanserif. 126 literate={-}{\makebox[1ex][c]{\raisebox{0.4ex}{\rule{0.75ex}{0.1ex}}}}1 127 {^}{\raisebox{0.6ex}{$\scriptscriptstyle\land\,$}}1 128 {~}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}}1 {`}{\ttfamily\upshape\hspace*{-0.1ex}`}1 129 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 130 {->}{\makebox[1ex][c]{\raisebox{0.4ex}{\rule{0.8ex}{0.075ex}}}\kern-0.2ex\textgreater}2, 63 % The cfalab style defines some common settings useful in different languages. 64 \lstdefinestyle{cfalab}{% 65 columns=fullflexible, 66 basicstyle=\linespread{0.9}\tt, 67 stringstyle=\tt, 131 68 } 132 69 133 % common.tex Compatablity =================================================== 134 % Below this line is for compatability with the old common.tex file. 70 % \code*[<escape character>]{<code>} 71 % Use the listings package to format a snipit of <code>. 72 % The <escape character> must be a character that does not appear in 73 % <code> and defaults to a backtick. 74 \newcommand*\codeC[2][\`]{\lstinline[language=C]#1#2#1} 75 \newcommand*\codeCFA[2][\`]{\lstinline[language=CFA]#1#2#1} 135 76 136 % Backwards compatable way to activate the cfacommon style. 137 \newcommand{\CFAStyle}{\lstset{style=cfacommon}} 138 139 % A couple of abbreviations are provided. Just ones someone liked. 140 % 141 % Abbreviation formatting commands (renew to customize): 142 \newcommand{\abbrevFont}{\textit} 143 % 144 % Abbreviations that, if not followed by a comma or colon, add a comma. 145 \newrobustcmd*\cfalab@abbrev@comma{% 146 \@ifnextchar{,}{}{\@ifnextchar{:}{}{,\xspace}}} 147 \providerobustcmd*\eg{\abbrevFont{e}.\abbrevFont{g}.\cfalab@abbrev@comma} 148 \providerobustcmd*\ie{\abbrevFont{i}.\abbrevFont{e}.\cfalab@abbrev@comma} 149 % 150 % Abbreviations that, if not followed by a period, add a period. 151 \newrobustcmd*\cfalab@abbrev@period{\@ifnextchar{.}{}{.\xspace}} 152 \providerobustcmd*\etc{\abbrevFont{etc}\cfalab@abbrev@period} 153 \providerobustcmd*\etal{\abbrevFont{et}~\abbrevFont{al}\cfalab@abbrev@period} 154 \providerobustcmd*\viz{\abbrevFont{viz}\cfalab@abbrev@period} 77 % \settextunderscore{(new|old)} 78 % Redefines the underscore either as a new repersentation or the old one. 79 % Not that some other packages (ex. hyperref) can override this. Set it 80 % up after loading them. 81 \let\cfalab@textunderscore@old=\textunderscore 82 \newcommand\cfalab@textunderscore@new{% 83 \leavevmode\makebox[1.2ex][c]{\rule{1ex}{0.075ex}}} 84 \newcommand\settextunderscore[1]{% 85 \renewcommand\textunderscore{\csuse{cfalab@textunderscore@#1}}} 155 86 156 87 \endinput -
doc/theses/andrew_beach_MMath/existing.tex
r2d8a770 r3ec79f7 16 16 to be defined~\cite{Moss18}. 17 17 \begin{cfa} 18 char i; int i; double i; 19 int f(); double f(); 20 void g( int ); void g( double ); 18 char i; int i; double i; $\C[3.75in]{// variable overload}$ 19 int f(); double f(); $\C{// return overload}$ 20 void g( int ); void g( double ); $\C{// parameter overload}\CRT$ 21 21 \end{cfa} 22 22 This feature requires name mangling so the assembly symbols are unique for … … 26 26 mangling is: 27 27 \begin{cfa} 28 // name mangling on by default28 // name mangling 29 29 int i; // _X1ii_1 30 extern "C" { // disablesname mangling30 @extern "C"@ { // no name mangling 31 31 int j; // j 32 extern "Cforall" { // enablesname mangling32 @extern "Cforall"@ { // name mangling 33 33 int k; // _X1ki_1 34 34 } 35 // revert tono name mangling36 } 37 // revert toname mangling35 // no name mangling 36 } 37 // name mangling 38 38 \end{cfa} 39 39 Both forms of @extern@ affect all the declarations within their nested lexical … … 50 50 \begin{cfa} 51 51 int i, j; 52 int & ri = i, &&rri = ri;52 int @&@ ri = i, @&&@ rri = ri; 53 53 rri = 3; // auto-dereference assign to i 54 &ri = &j; // rebindable54 @&@ri = @&@j; // rebindable 55 55 ri = 5; // assign to j 56 56 \end{cfa} … … 64 64 65 65 In general, operator names in \CFA are constructed by bracketing an operator 66 token with @?@, which indicates the position of the arguments. For example, 67 infixed multiplication is @?*?@ while prefix dereference is @*?@. 68 This syntax make it easy to tell the difference between prefix operations 69 (such as @++?@) andpost-fix operations (@?++@).66 token with @?@, which indicates the position of the arguments. For example, infixed 67 multiplication is @?*?@ while prefix dereference is @*?@. This syntax make it 68 easy to tell the difference between prefix operations (such as @++?@) and 69 post-fix operations (@?++@). 70 70 71 71 The special name for a constructor is @?{}@, which comes from the 72 initialization syntax in C. That initialation syntax is also the operator 73 form. \CFA will generate a constructor call each time a variable is declared, 74 passing the initialization arguments to the constructort. 75 \begin{cfa} 76 struct Example { ... }; 77 void ?{}(Example & this) { ... } 72 initialization syntax in C. The special name for a destructor is @^{}@, where 73 the @^@ has no special meaning. 74 % I don't like the \^{} symbol but $^\wedge$ isn't better. 75 \begin{cfa} 76 struct T { ... }; 77 void ?@{}@(@T &@ this, ...) { ... } // constructor 78 void ?@^{}@(@T &@ this, ...) { ... } // destructor 78 79 { 79 Example a; 80 Example b = {}; 81 } 82 void ?{}(Example & this, char first, int num) { ... } 83 { 84 Example c = {'a', 2}; 85 } 86 \end{cfa} 87 Both @a@ and @b@ will be initalized with the first constructor (there is no 88 general way to skip initialation) while @c@ will be initalized with the 89 second. 90 91 % I don't like the \^{} symbol but $^\wedge$ isn't better. 92 Similarly destructors use the special name @^?{}@ (the @^@ has no special 93 meaning). They can be called explicatly as well but normally they are 94 implicitly called on a variable when it goes out of scope. 95 \begin{cfa} 96 void ^?{}(Example & this) { ... } 97 { 98 Example d; 99 } // <- implicit destructor call 100 \end{cfa} 101 No operator name is restricted in what function signatures they may be bound 102 to although most of the forms cannot be called in operator form. Some 103 ``near-misses" will generate warnings. 104 105 Whenever a type is defined, \CFA will create a default zero-argument 106 constructor, a copy constructor, a series of argument-per-field constructors 107 and a destructor. All user constructors are defined after this. 108 Because operators are never part of the type definition they may be added 109 at any time, including on built-in types. 80 T s = @{@ ... @}@; // same constructor/initialization braces 81 } // destructor call automatically generated 82 \end{cfa} 83 The first parameter is a reference parameter to the type for the 84 constructor/destructor. Destructors may have multiple parameters. The compiler 85 implicitly matches an overloaded constructor @void ^?{}(T &, ...);@ to an 86 object declaration with associated initialization, and generates a construction 87 call after the object is allocated. When an object goes out of scope, the 88 matching overloaded destructor @void ^?{}(T &);@ is called. Without explicit 89 definition, \CFA creates a default and copy constructor, destructor and 90 assignment (like \Cpp). It is possible to define constructors/destructors for 91 basic and existing types (unlike \Cpp). 110 92 111 93 \section{Polymorphism} … … 123 105 works on any type @T@: 124 106 \begin{cfa} 125 forall( T ) T identity( T val ) { return val; } 126 int forty_two = identity( 42 ); 127 char capital_a = identity( 'A' ); 128 \end{cfa} 129 Each use of a polymorphic declaration will resolve its polymorphic parameters 130 (in this case, just @T@) to concrete types (@int@ in the first use and @char@ 131 in the second). 107 @forall( T )@ @T@ identity( @T@ val ) { return val; } 108 int forty_two = identity( 42 ); // T bound to int, forty_two == 42 109 \end{cfa} 132 110 133 111 To allow a polymorphic function to be separately compiled, the type @T@ must be … … 137 115 types used in a function, \eg: 138 116 \begin{cfa} 139 forall( T | { void do_once(T); })117 forall( T @| { void do_once(T); }@) // assertion 140 118 void do_twice(T value) { 141 119 do_once(value); 142 120 do_once(value); 143 121 } 144 \end{cfa} 122 void do_once(@int@ i) { ... } // provide assertion 123 @int@ i; 124 do_twice(i); // implicitly pass assertion do_once to do_twice 125 \end{cfa} 126 Any object with a type fulfilling the assertion may be passed as an argument to 127 a @do_twice@ call. 145 128 146 129 A polymorphic function can be used in the same way as a normal function. The … … 149 132 all the variables replaced with the concrete types from the arguments) is 150 133 defined at a call site. 151 \begin{cfa}152 void do_once(int i) { ... }153 int i;154 do_twice(i);155 \end{cfa}156 Any object with a type fulfilling the assertion may be passed as an argument to157 a @do_twice@ call.158 134 159 135 Note, a function named @do_once@ is not required in the scope of @do_twice@ to … … 162 138 call. 163 139 \begin{cfa} 164 void do_once(double y) { ... } 140 void do_once(double y) { ... } // global 165 141 int quadruple(int x) { 166 void do_once(int y) { y = y * 2; } 167 do_twice(x); 142 void do_once(int y) { y = y * 2; } // local 143 do_twice(x); // using local "do_once" 168 144 return x; 169 145 } … … 174 150 function. The matched assertion function is then passed as a function pointer 175 151 to @do_twice@ and called within it. 176 The global definition of @do_once@ is ignored.177 152 178 153 To avoid typing long lists of assertions, constraints can be collect into … … 186 161 and the @forall@ list in the previous example is replaced with the trait. 187 162 \begin{cfa} 188 forall(dtype T | done_once(T))163 forall(dtype T | @done_once(T)@) 189 164 \end{cfa} 190 165 In general, a trait can contain an arbitrary number of assertions, both … … 197 172 declarations instead of parameters, returns, and local variable declarations. 198 173 \begin{cfa} 199 forall(dtype T)174 forall(dtype @T@) 200 175 struct node { 201 node( T) * next; // generic linked node202 T* data;203 } 204 node( int) inode;205 \end{cfa} 206 The generic type @node(T)@ is an example of a polymorphic type usage. Like \Cpp207 template usage, a polymorphic type usage must specify a type parameter.176 node(@T@) * next; // generic linked node 177 @T@ * data; 178 } 179 node(@int@) inode; 180 \end{cfa} 181 The generic type @node(T)@ is an example of a polymorphic-type usage. Like \Cpp 182 template usage, a polymorphic-type usage must specify a type parameter. 208 183 209 184 There are many other polymorphism features in \CFA but these are the ones used … … 244 219 Each coroutine has a @main@ function, which takes a reference to a coroutine 245 220 object and returns @void@. 246 \begin{cfa} 247 void main(CountUp & this) { 248 for (unsigned int next = 0 ; true ; ++next) { 249 next = up; 250 suspend;$\label{suspend}$ 221 \begin{cfa}[numbers=left] 222 void main(@CountUp & this@) { // argument matches trait is_coroutine 223 unsigned int up = 0; // retained between calls 224 while (true) { 225 next = up; // make "up" available outside function 226 @suspend;@$\label{suspend}$ 227 up += 1; 251 228 } 252 229 } … … 277 254 @mutex@. 278 255 \begin{cfa} 279 void example(MonitorA & mutex argA, MonitorB & mutexargB);256 void example(MonitorA & @mutex@ argA, MonitorB & @mutex@ argB); 280 257 \end{cfa} 281 258 When the function is called, it implicitly acquires the monitor lock for all of -
doc/theses/andrew_beach_MMath/features.tex
r2d8a770 r3ec79f7 20 20 \subparagraph{Raise} 21 21 The raise is the starting point for exception handling. It marks the beginning 22 of exception handling by raisingan excepion, which passes it to22 of exception handling by \newterm{raising} an excepion, which passes it to 23 23 the EHM. 24 24 … … 101 101 between different sub-hierarchies. 102 102 This design is used in \CFA even though it is not a object-orientated 103 language ; so different tools are usedto create the hierarchy.103 language using different tools 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. 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. 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. 137 130 138 131 The virtual system supports multiple ``trees" of types. Each tree is … … 182 175 While much of the virtual infrastructure is created, it is currently only used 183 176 internally for exception handling. The only user-level feature is the virtual 184 cast, which is the same as the \Cpp \ codeCpp{dynamic_cast}.177 cast, which is the same as the \Cpp \lstinline[language=C++]|dynamic_cast|. 185 178 \label{p:VirtualCast} 186 179 \begin{cfa} … … 204 197 \begin{cfa} 205 198 trait is_exception(exceptT &, virtualT &) { 206 // Numerous imaginary assertions.199 virtualT const & get_exception_vtable(exceptT *); 207 200 }; 208 201 \end{cfa} 209 202 The trait is defined over two types, the exception type and the virtual table 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. 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. 217 218 218 219 % I did have a note about how it is the programmer's responsibility to make … … 234 235 Both traits ensure a pair of types are an exception type and its virtual table 235 236 and defines one of the two default handlers. The default handlers are used 236 as fallbacks and are discussed in detail in \ vref{s:ExceptionHandling}.237 as fallbacks and are discussed in detail in \VRef{s:ExceptionHandling}. 237 238 238 239 However, all three of these traits can be tricky to use directly. … … 350 351 for particular exception type. 351 352 The global default termination handler performs a cancellation 352 (see \vref{s:Cancellation})on the current stack with the copied exception.353 \see{\VRef{s:Cancellation}} on the current stack with the copied exception. 353 354 354 355 \subsection{Resumption} … … 425 426 426 427 \subsubsection{Resumption Marking} 427 \label{s:ResumptionMarking}428 428 A key difference between resumption and termination is that resumption does 429 429 not unwind the stack. A side effect that is that when a handler is matched … … 472 472 The symmetry between resumption termination is why this pattern was picked. 473 473 Other patterns, such as marking just the handlers that caught, also work but 474 lack the symmetry means there are morerules to remember.474 lack the symmetry means there are less rules to remember. 475 475 476 476 \section{Conditional Catch} … … 557 557 \end{cfa} 558 558 If there are further handlers after this handler only the first version will 559 check them. If multiple handlers on a single try block that could handle the560 sameexception the translations get more complex but they are equivilantly559 check them. If multiple handlers on a single try block could handle the same 560 exception the translations get more complex but they are equivilantly 561 561 powerful. 562 562 … … 633 633 and the current stack is 634 634 unwound. After that it depends one which stack is being cancelled. 635 636 \ paragraph{Main Stack}635 \begin{description} 636 \item[Main Stack:] 637 637 The main stack is the one used by the program main at the start of execution, 638 638 and is the only stack in a sequential program. … … 645 645 to, so it would have be explicitly managed. 646 646 647 \ paragraph{Thread Stack}647 \item[Thread Stack:] 648 648 A thread stack is created for a \CFA @thread@ object or object that satisfies 649 649 the @is_thread@ trait. … … 671 671 Also you can always add an explicit join if that is the desired behaviour. 672 672 673 \ paragraph{Coroutine Stack}673 \item[Coroutine Stack:] 674 674 A coroutine stack is created for a @coroutine@ object or object that 675 675 satisfies the @is_coroutine@ trait. … … 685 685 (in terms of coroutine state) called resume on this coroutine, so the message 686 686 is passed to the latter. 687 \end{description} -
doc/theses/andrew_beach_MMath/future.tex
r2d8a770 r3ec79f7 110 110 \section{Zero-Cost Try} 111 111 \CFA does not have zero-cost try-statements because the compiler generates C 112 code rather than assembler code (see \vpageref{p:zero-cost}). When the compiler112 code rather than assembler code \see{\VPageref{p:zero-cost}}. When the compiler 113 113 does create its own assembly (or LLVM byte-code), then zero-cost try-statements 114 114 are possible. The downside of zero-cost try-statements is the LSDA complexity, -
doc/theses/andrew_beach_MMath/implement.tex
r2d8a770 r3ec79f7 9 9 % Virtual table rules. Virtual tables, the pointer to them and the cast. 10 10 While the \CFA virtual system currently has only one public feature, virtual 11 cast (see the virtual cast feature \vpageref{p:VirtualCast}),12 su bstantial structure is required to support it,13 and provide features for exception handling and the standardlibrary.11 cast \see{\VPageref{p:VirtualCast}}, substantial structure is required to 12 support it, and provide features for exception handling and the standard 13 library. 14 14 15 15 \subsection{Virtual Type} … … 215 215 \subsection{libunwind Usage} 216 216 Libunwind, accessed through @unwind.h@ on most platforms, is a C library that 217 provides \C pp-style stack-unwinding. Its operation is divided into two phases:217 provides \CC-style stack-unwinding. Its operation is divided into two phases: 218 218 search and cleanup. The dynamic target search -- phase 1 -- is used to scan the 219 219 stack and decide where unwinding should stop (but no unwinding occurs). The … … 291 291 @_UA_FORCE_UNWIND@ specifies a forced unwind call. Forced unwind only performs 292 292 the cleanup phase and uses a different means to decide when to stop 293 (see \vref{s:ForcedUnwind}).293 \see{\VRef{s:ForcedUnwind}}. 294 294 \end{enumerate} 295 295 … … 400 400 401 401 Termination exceptions use libunwind heavily because it matches the intended 402 use from \C ppexceptions closely. The main complication for \CFA is that the402 use from \CC exceptions closely. The main complication for \CFA is that the 403 403 compiler generates C code, making it very difficult to generate the assembly to 404 404 form the LSDA for try blocks or destructors. … … 509 509 510 510 % Recursive Resumption Stuff: 511 Search skipping (see \vpageref{s:ResumptionMarking}), which ignores parts of 512 the stack 511 Search skipping \see{\VPageref{p:searchskip}}, which ignores parts of the stack 513 512 already examined, is accomplished by updating the front of the list as the 514 513 search continues. Before the handler at a node is called the head of the list … … 555 554 Cancellation also uses libunwind to do its stack traversal and unwinding, 556 555 however it uses a different primary function @_Unwind_ForcedUnwind@. Details 557 of its interface can be found in the \ vref{s:ForcedUnwind}.556 of its interface can be found in the \VRef{s:ForcedUnwind}. 558 557 559 558 The first step of cancellation is to find the cancelled stack and its type: -
doc/theses/andrew_beach_MMath/uw-ethesis.tex
r2d8a770 r3ec79f7 66 66 % Tip: Photographs should be cropped and compressed so as not to be too large. 67 67 68 % To create a PDF output that is optimized for double-sided printing: 69 % 1) comment-out the \documentclass statement in the preamble below, and 70 % un-comment the second \documentclass line. 71 % 2) change the value assigned below to the boolean variable "PrintVersion" 72 % from "false" to "true". 73 68 74 % ====================================================================== 69 75 % D O C U M E N T P R E A M B L E … … 81 87 } 82 88 83 % Does nothing, ignores \href tags (redefined by hyperref package). 84 \newcommand{\href}[1]{#1} 89 % Some LaTeX commands I define for my own nomenclature. 90 % If you have to, it's easier to make changes to nomenclature once here than 91 % in a million places throughout your thesis! 92 \newcommand{\package}[1]{\textbf{#1}} % package names in bold text 93 \newcommand{\cmmd}[1]{\textbackslash\texttt{#1}} % command name in tt font 94 \newcommand{\href}[1]{#1} % does nothing, but defines the command so the 95 % print-optimized version will ignore \href tags (redefined by hyperref pkg). 96 % Anything defined here may be redefined by packages added below... 85 97 86 98 % For a nomenclature (optional; available from ctan.org) … … 95 107 % Adds todos (Must be included after comment.) 96 108 \usepackage{todonotes} 97 % cfa macros used in the document98 \usepackage{cfalab}99 109 100 110 % Hyperlinks make it very easy to navigate an electronic document. … … 198 208 \makeglossaries 199 209 200 % listings package configuation: 201 \lstMakeShortInline@ 202 \lstset{language=CFA,style=cfacommon,basicstyle=\linespread{0.9}\tt} 203 \lstset{moredelim=**[is][\protect\color{red}]{@}{@}} 210 % cfa macros used in the document 211 %\usepackage{cfalab} 212 % I'm going to bring back eventually. 213 \makeatletter 214 % Combines all \CC* commands: 215 \newrobustcmd*\Cpp[1][\xspace]{\cfalab@Cpp#1} 216 \newcommand\cfalab@Cpp{C\kern-.1em\hbox{+\kern-.25em+}} 217 % Optional arguments do not work with pdf string. (Some fix-up required.) 218 \pdfstringdefDisableCommands{\def\Cpp{C++}} 219 220 % Wrappers for inline code snippits. 221 \newrobustcmd*\codeCFA[1]{\lstinline[language=CFA]{#1}} 222 \newrobustcmd*\codeC[1]{\lstinline[language=C]{#1}} 223 \newrobustcmd*\codeCpp[1]{\lstinline[language=C++]{#1}} 224 \newrobustcmd*\codePy[1]{\lstinline[language=Python]{#1}} 225 226 % Colour text, formatted in LaTeX style instead of TeX style. 227 \newcommand*\colour[2]{{\color{#1}#2}} 228 \makeatother 229 230 \input{common} 231 % CFA code-style for all languages 232 \CFAStyle 233 % CFA default lnaguage 234 \lstset{language=CFA,basicstyle=\linespread{0.9}\tt} 204 235 % Annotations from Peter: 205 236 \newcommand{\PAB}[1]{{\color{blue}PAB: #1}}
Note:
See TracChangeset
for help on using the changeset viewer.