Changeset c721105 for doc/theses/mike_brooks_MMath/intro.tex
- Timestamp:
- May 24, 2024, 2:16:09 PM (20 months ago)
- Branches:
- master
- Children:
- df699e0
- Parents:
- 76425bc
- File:
-
- 1 edited
-
doc/theses/mike_brooks_MMath/intro.tex (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/theses/mike_brooks_MMath/intro.tex
r76425bc rc721105 3 3 All modern programming languages provide three high-level containers (collection): array, linked-list, and string. 4 4 Often array is part of the programming language, while linked-list is built from pointer types, and string from a combination of array and linked-list. 5 For all three types, there is some corresponding mechanism for iterating through the structure, where the iterator flexibility varies with the kind of structure and ingenuity of the iterator implementor. 5 6 6 \cite{Blache19}7 \cite{Oorschot23}8 \cite{Ruef19}9 7 10 8 \section{Array} 11 9 12 A rray provides a homogeneous container with $O(1)$ access to elements using subscripting.10 An array provides a homogeneous container with $O(1)$ access to elements using subscripting (some form of pointer arithmetic). 13 11 The array size can be static, dynamic but fixed after creation, or dynamic and variable after creation. 14 12 For static and dynamic-fixed, an array can be stack allocated, while dynamic-variable requires the heap. 13 Because array layout has contiguous components, subscripting is a computation. 14 However, the computation can exceed the array bounds resulting in programming errors and security violations~\cite{Elliott18, Blache19, Ruef19, Oorschot23}. 15 The goal is to provide good performance with safety. 15 16 16 17 17 18 \section{Linked List} 18 19 19 Linked-list provides a homogeneous containerwith $O(log N)$/$O(N)$ access to elements using successor and predecessor operations.20 A linked-list provides a homogeneous container often with $O(log N)$/$O(N)$ access to elements using successor and predecessor operations. 20 21 Subscripting by value is sometimes available, \eg hash table. 21 22 Linked types are normally dynamically sized by adding/removing nodes using link fields internal or external to the elements (nodes). … … 26 27 \section{String} 27 28 28 String provides a dynamic array of homogeneous elements, where the elements are often human-readable characters.29 What differentiates string from other types in that string operations work on blocks of elements for scanning and changing the elements, rather than accessing individual elements.30 Nevertheless, subscriptingis often available.31 The cost of string operations is less important than the power of the block operation to accomplish complex manipulation.32 The dynamic nature of string means storage is normally heap allocated but often implicitly managed, even in unmanaged languages.29 A string provides a dynamic array of homogeneous elements, where the elements are often human-readable characters. 30 What differentiates a string from other types in that its operations work on blocks of elements for scanning and changing the elements, rather than accessing individual elements, \eg @index@ and @substr@. 31 Subscripting individual elements is often available. 32 Often the cost of string operations is less important than the power of the operations to accomplish complex text manipulation, \eg search, analysing, composing, and decomposing. 33 The dynamic nature of a string means storage is normally heap allocated but often implicitly managed, even in unmanaged languages. 33 34 34 35 35 36 \section{Motivation} 36 37 37 The goal of this work is to introduce safe and complex versions of array, link -lists, and stringinto the programming language \CFA~\cite{Cforall}, which is based on C.38 The goal of this work is to introduce safe and complex versions of array, link lists, and strings into the programming language \CFA~\cite{Cforall}, which is based on C. 38 39 Unfortunately, to make C better, while retaining a high level of backwards compatibility, requires a significant knowledge of C's design. 39 40 Hence, it is assumed the reader has a medium knowledge of C or \CC, on which extensive new C knowledge is built. … … 45 46 However, most programming languages are only partially explained by standard's manuals. 46 47 When it comes to explaining how C works, the definitive source is the @gcc@ compiler, which is mimicked by other C compilers, such as Clang~\cite{clang}. 47 Often other C compilers must \emph{ape}@gcc@ because a large part of the C library (runtime) system contains @gcc@ features.48 Often other C compilers must mimic @gcc@ because a large part of the C library (runtime) system contains @gcc@ features. 48 49 While some key aspects of C need to be explained by quoting from the language reference manual, to illustrate definite program semantics, I devise a program, whose behaviour exercises the point at issue, and shows its behaviour. 49 50 These example programs show … … 55 56 This work has been tested across @gcc@ versions 8--12 and clang version 10 running on ARM, AMD, and Intel architectures. 56 57 Any discovered anomalies among compilers or versions is discussed. 57 In thiscase, I do not argue that my sample of major Linux compilers is doing the right thing with respect to the C standard.58 In all case, I do not argue that my sample of major Linux compilers is doing the right thing with respect to the C standard. 58 59 59 60 … … 76 77 \end{cfa} 77 78 with a segmentation fault at runtime. 78 Clearly, @gcc@ understands these ill-typed case, and yet allows the program to compile, which seems like madness.79 Compiling with flag @-Werror@, which turns warnings into errors, is often too strong, because some warnings are just warnings .79 Clearly, @gcc@ understands these ill-typed case, and yet allows the program to compile, which seems inappropriate. 80 Compiling with flag @-Werror@, which turns warnings into errors, is often too strong, because some warnings are just warnings, \eg unsed variable. 80 81 In the following discussion, ``ill-typed'' means giving a nonzero @gcc@ exit condition with a message that discusses typing. 81 82 Note, \CFA's type-system rejects all these ill-typed cases as type mismatch errors. … … 99 100 100 101 \subsection{String} 102 103 \subsection{Iterator}
Note:
See TracChangeset
for help on using the changeset viewer.