Changeset 9c8afc7
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/mike_brooks_MMath/uw-ethesis-frontpgs.tex
r00aa122 r9c8afc7 129 129 \begin{center}\textbf{Abstract}\end{center} 130 130 131 \CFA strives to fix mistakes in C, chief among them, safety. 132 This thesis presents a significant step forward in \CFA's goal to remove unsafe pointer operations. 133 The thesis presents improvements to the \CFA language design, both syntax and semantics, to support advanced container features. 134 These features are implemented across the \CFA compiler, libraries, and runtime system. 135 The results maintain another \CFA goal of remaining 99\% backwards compatible with C. 136 This thesis leverages preexisting work within the compiler's type and runtime systems generated by prior students working on the \CFA project. 137 131 138 All modern programming languages provide three high-level containers (collections): array, linked-list, and string. 132 Often array is part of the programming language, while linked-list is built from (recursive) pointer types, and stringfrom a combination of array and linked-list.139 Often array is part of the programming language, while linked-lists are built from (recursive) pointer types, and strings from a combination of array and linked-list. 133 140 For all three types, languages and/or their libraries supply varying degrees of high-level mechanisms for manipulating these objects at the bulk and component level, such as copying, slicing, extracting, and iterating among elements. 134 Unfortunately, these three aspects of C cause 60\%--70\% of the reported software vulnerabilities involv edmemory errors, and 70\%--80\% of hacker attack-vectors target these types.141 Unfortunately, these three aspects of C cause 60\%--70\% of the reported software vulnerabilities involving memory errors, and 70\%--80\% of hacker attack-vectors target these types. 135 142 Therefore, hardening these three C types goes a long way to make the majority of C programs safer. 136 143 137 This work looks at extending these three foundational container types in the programming language \CFA, which is a new dialect of the C programming language. 138 The thesis describes improvements made to the \CFA language design, both syntax and semantics, to support the container features, and the source code created within the \CFA compiler, libraries, and runtime system to implement these features. 139 This work leverages preexisting work within the compiler's type and runtime systems generated by prior students working on the \CFA project. 140 141 Overall, this work has produced significant syntactic and semantic improvements to C's container types. 142 \begin{enumerate}[leftmargin=*] 143 \item 144 Introduce a small number of subtle changes to the typing rules for the C array, while still achieving significant backwards compatibility. 145 \item 146 Create a new polymorphic mechanism in the \CFA @forall@ clause to specify array dimension values, similar to a fixed-typed parameter in a \CC \lstinline[language=C++]{template}. 147 The new array type, enabled by prior features, defines an array with guaranteed runtime bound checks (often optimizer-removable) and implicit (guaranteed accurate) inter-function length communication. 148 \item 149 Create a new polymorphic list type and its runtime library following the established design pattern of intrusive link-fields for performance reasons, especially in concurrent programs. 150 \item 151 Create a new string type and runtime library comparable to the \CC @string@ type, including analogous coexistence with raw-character pointers, enabling programs to work with strings by value, without incurring excessive copying. 152 Substrings are supported, including the ability for overlapping ranges to share edits transparently. 153 \end{enumerate} 154 The thesis includes a performance evaluation that shows the new \CFA containers perform comparably with their C counterparts in many programming cases. 144 Specifically, an array utility is provided that tracks length internally, relieving the user of managing explicit length parameters and stopping buffer-overrun errors. 145 This feature requires augmenting the \CFA type system, making array length available at compile and runtime. 146 A linked-list utility is provided, which obviates many explicit recursive pointers by catering directly to system-programming uses (intrusive lists) for which a library solution is often dismissed. 147 Finally, a string utility is provided with implicit memory management of text in a specialized heap, relieving error-prone buffer management, including overrun, and providing a copy-on-write speed boost. 148 For all three utilities, performance is argued to be on-par with, and occasionally surpassing relevant comparators. 149 With the array, this case is made by showing complete erasure down to a naked C array, modulo runtime bound checks, which are removable more often than with Java-style length management. 150 With the linked list and string, empirical measures are compared with relevant libraries. 151 These utilities offer a system programmer workable alternatives to hand-rolling several common causes of system vulnerabilities, thereby improving \CFA's position as a safety-forward system-programming alternative. 155 152 156 153 \cleardoublepage
Note:
See TracChangeset
for help on using the changeset viewer.