Changeset 2d8a770
- Timestamp:
- Apr 29, 2021, 11:00:18 AM (2 years ago)
- Branches:
- ADT, arm-eh, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 3eb55f98
- Parents:
- 3ec79f7 (diff), a6c45c6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- doc/theses/andrew_beach_MMath
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/andrew_beach_MMath/Makefile
r3ec79f7 r2d8a770 34 34 ${LATEX} ${BASE} 35 35 ${BIBTEX} ${BUILD}/${BASE} 36 ${LATEX} ${BASE}37 36 ${GLOSSARY} ${BUILD}/${BASE} 38 37 ${LATEX} ${BASE} -
doc/theses/andrew_beach_MMath/cfalab.sty
r3ec79f7 r2d8a770 10 10 11 11 % Other packages required. 12 % 13 % Access to new basic LaTeX tools and other low level commands. 12 14 \RequirePackage{etoolbox} 15 % Code formatting tools and environments. 13 16 \RequirePackage{listings} 17 % Automatically adds spaces. 14 18 \RequirePackage{xspace} 19 % Improved reference tools. 20 \RequirePackage[nospace]{varioref} 15 21 16 22 % Symbols: All symbols are zero argument robust commands with special rules … … 20 26 21 27 % \newsymbolcmd{<command>}{<replacement text>} 22 % 28 % Defines <command> to be a symbol that has the given <replacement text>. 23 29 \newrobustcmd*\newsymbolcmd[2]{\newrobustcmd{#1}{\cfalab@symbol{#2}}} 24 30 \def\cfalab@symbol#1{\@ifnextchar*{#1\cfalab@eatstar}{#1\xspace}} … … 28 34 \newsymbolcmd\CFA{\textsf{C}\raisebox{\depth}{\rotatebox{180}{\textsf{A}}}} 29 35 % C++ with kerning. (No standard number support.) 30 \newsymbolcmd\C PP{\textrm{C}\kern-.1em\hbox{+\kern-.25em+}}36 \newsymbolcmd\Cpp{\textrm{C}\kern-.1em\hbox{+\kern-.25em+}} 31 37 32 % This is executed very early in the \begin{document} code. 38 % This is executed very early in the \begin{document} code, before the 39 % document's contents but after packages are loaded. 33 40 \AtEndPreamble{ 34 41 \@ifpackageloaded{hyperref}{ … … 36 43 \pdfstringdefDisableCommands{ 37 44 \def\CFA{CFA} 38 \def\CPP{C++} 45 \def\Cpp{C++} 46 \def\lstinline{} 39 47 } 40 48 }{} 41 49 } 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 up 69 % after loading them. 70 \let\cfalab@textunderscore@old=\textunderscore 71 \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}}} 42 75 43 76 % The CFA listings language. Based off of ANCI C and including GCC extensions. … … 61 94 \lstset{defaultdialect={[UW]CFA}} 62 95 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, 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, 68 131 } 69 132 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} 133 % common.tex Compatablity =================================================== 134 % Below this line is for compatability with the old common.tex file. 76 135 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}}} 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} 86 155 87 156 \endinput -
doc/theses/andrew_beach_MMath/existing.tex
r3ec79f7 r2d8a770 16 16 to be defined~\cite{Moss18}. 17 17 \begin{cfa} 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$18 char i; int i; double i; 19 int f(); double f(); 20 void g( int ); void g( double ); 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 28 // name mangling on by default 29 29 int i; // _X1ii_1 30 @extern "C"@ { // noname mangling30 extern "C" { // disables name mangling 31 31 int j; // j 32 @extern "Cforall"@ { //name mangling32 extern "Cforall" { // enables name mangling 33 33 int k; // _X1ki_1 34 34 } 35 // no name mangling36 } 37 // name mangling35 // revert to no name mangling 36 } 37 // revert to 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, infixed67 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 (@?++@).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 @++?@) and post-fix operations (@?++@). 70 70 71 71 The special name for a constructor is @?{}@, which comes from the 72 initialization syntax in C. The special name for a destructor is @^{}@, where 73 the @^@ has no special meaning. 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) { ... } 78 { 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 74 91 % 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 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) { ... } 79 97 { 80 T s = @{@ ... @}@; // same constructor/initialization braces 81 } // destructor call automatically generated82 \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).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. 92 110 93 111 \section{Polymorphism} … … 105 123 works on any type @T@: 106 124 \begin{cfa} 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} 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). 110 132 111 133 To allow a polymorphic function to be separately compiled, the type @T@ must be … … 115 137 types used in a function, \eg: 116 138 \begin{cfa} 117 forall( T @| { void do_once(T); }@) // assertion139 forall( T | { void do_once(T); }) 118 140 void do_twice(T value) { 119 141 do_once(value); 120 142 do_once(value); 121 143 } 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. 144 \end{cfa} 128 145 129 146 A polymorphic function can be used in the same way as a normal function. The … … 132 149 all the variables replaced with the concrete types from the arguments) is 133 150 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 to 157 a @do_twice@ call. 134 158 135 159 Note, a function named @do_once@ is not required in the scope of @do_twice@ to … … 138 162 call. 139 163 \begin{cfa} 140 void do_once(double y) { ... } // global164 void do_once(double y) { ... } 141 165 int quadruple(int x) { 142 void do_once(int y) { y = y * 2; } // local143 do_twice(x); // using local "do_once"166 void do_once(int y) { y = y * 2; } 167 do_twice(x); 144 168 return x; 145 169 } … … 150 174 function. The matched assertion function is then passed as a function pointer 151 175 to @do_twice@ and called within it. 176 The global definition of @do_once@ is ignored. 152 177 153 178 To avoid typing long lists of assertions, constraints can be collect into … … 161 186 and the @forall@ list in the previous example is replaced with the trait. 162 187 \begin{cfa} 163 forall(dtype T | @done_once(T)@)188 forall(dtype T | done_once(T)) 164 189 \end{cfa} 165 190 In general, a trait can contain an arbitrary number of assertions, both … … 172 197 declarations instead of parameters, returns, and local variable declarations. 173 198 \begin{cfa} 174 forall(dtype @T@)199 forall(dtype T) 175 200 struct node { 176 node( @T@) * next; // generic linked node177 @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 \Cpp182 template usage, a polymorphic -type usage must specify a type parameter.201 node(T) * next; // generic linked node 202 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 \Cpp 207 template usage, a polymorphic type usage must specify a type parameter. 183 208 184 209 There are many other polymorphism features in \CFA but these are the ones used … … 219 244 Each coroutine has a @main@ function, which takes a reference to a coroutine 220 245 object and returns @void@. 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; 246 \begin{cfa} 247 void main(CountUp & this) { 248 for (unsigned int next = 0 ; true ; ++next) { 249 next = up; 250 suspend;$\label{suspend}$ 228 251 } 229 252 } … … 254 277 @mutex@. 255 278 \begin{cfa} 256 void example(MonitorA & @mutex@ argA, MonitorB & @mutex@argB);279 void example(MonitorA & mutex argA, MonitorB & mutex argB); 257 280 \end{cfa} 258 281 When the function is called, it implicitly acquires the monitor lock for all of -
doc/theses/andrew_beach_MMath/features.tex
r3ec79f7 r2d8a770 20 20 \subparagraph{Raise} 21 21 The raise is the starting point for exception handling. It marks the beginning 22 of exception handling by \newterm{raising}an excepion, which passes it to22 of exception handling by 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 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 … … 235 234 Both traits ensure a pair of types are an exception type and its virtual table 236 235 and defines one of the two default handlers. The default handlers are used 237 as fallbacks and are discussed in detail in \ VRef{s:ExceptionHandling}.236 as fallbacks and are discussed in detail in \vref{s:ExceptionHandling}. 238 237 239 238 However, all three of these traits can be tricky to use directly. … … 351 350 for particular exception type. 352 351 The global default termination handler performs a cancellation 353 \see{\VRef{s:Cancellation}}on the current stack with the copied exception.352 (see \vref{s:Cancellation}) on the current stack with the copied exception. 354 353 355 354 \subsection{Resumption} … … 426 425 427 426 \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 lessrules to remember.474 lack the symmetry means there are more 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 could handle the same560 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 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 \begin{description} 636 \ item[Main Stack:]635 636 \paragraph{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 \ item[Thread Stack:]647 \paragraph{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 \ item[Coroutine Stack:]673 \paragraph{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
r3ec79f7 r2d8a770 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
r3ec79f7 r2d8a770 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{\VPageref{p:VirtualCast}}, substantial structure is required to12 su pport it, and provide features for exception handling and the standard13 library.11 cast (see the virtual cast feature \vpageref{p:VirtualCast}), 12 substantial structure is required to support it, 13 and provide features for exception handling and the standard 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 C-style stack-unwinding. Its operation is divided into two phases:217 provides \Cpp-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 Cexceptions closely. The main complication for \CFA is that the402 use from \Cpp 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{p:searchskip}}, which ignores parts of the stack 511 Search skipping (see \vpageref{s:ResumptionMarking}), which ignores parts of 512 the stack 512 513 already examined, is accomplished by updating the front of the list as the 513 514 search continues. Before the handler at a node is called the head of the list … … 554 555 Cancellation also uses libunwind to do its stack traversal and unwinding, 555 556 however it uses a different primary function @_Unwind_ForcedUnwind@. Details 556 of its interface can be found in the \ VRef{s:ForcedUnwind}.557 of its interface can be found in the \vref{s:ForcedUnwind}. 557 558 558 559 The first step of cancellation is to find the cancelled stack and its type: -
doc/theses/andrew_beach_MMath/uw-ethesis.tex
r3ec79f7 r2d8a770 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, and70 % un-comment the second \documentclass line.71 % 2) change the value assigned below to the boolean variable "PrintVersion"72 % from "false" to "true".73 74 68 % ====================================================================== 75 69 % D O C U M E N T P R E A M B L E … … 87 81 } 88 82 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... 83 % Does nothing, ignores \href tags (redefined by hyperref package). 84 \newcommand{\href}[1]{#1} 97 85 98 86 % For a nomenclature (optional; available from ctan.org) … … 107 95 % Adds todos (Must be included after comment.) 108 96 \usepackage{todonotes} 97 % cfa macros used in the document 98 \usepackage{cfalab} 109 99 110 100 % Hyperlinks make it very easy to navigate an electronic document. … … 208 198 \makeglossaries 209 199 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} 200 % listings package configuation: 201 \lstMakeShortInline@ 202 \lstset{language=CFA,style=cfacommon,basicstyle=\linespread{0.9}\tt} 203 \lstset{moredelim=**[is][\protect\color{red}]{@}{@}} 235 204 % Annotations from Peter: 236 205 \newcommand{\PAB}[1]{{\color{blue}PAB: #1}}
Note: See TracChangeset
for help on using the changeset viewer.