Index: doc/theses/mike_brooks_MMath/string.tex
===================================================================
--- doc/theses/mike_brooks_MMath/string.tex	(revision c01a2fda199b83ab494a487398adc9882df46722)
+++ doc/theses/mike_brooks_MMath/string.tex	(revision b766c9b7ed206d2e4415fefb1e4ec41121054a51)
@@ -25,16 +25,17 @@
 \end{tabular}
 \end{cquote}
-The key commonality is that operations work on groups of characters for assigning. copying, scanning, and updating,
+The key commonality is that operations work on groups of characters for assigning. copying, scanning, and updating.
 Because a C string is null terminated and requires explicit storage management \see{\VRef{s:String}}, most of its group operations are error prone and expensive.
 Most high-level string libraries use a separate length field and specialized storage management to support group operations.
-\CC strings retains null termination to allow them to interface with C library functions requiring C strings.
+\CC strings retain null termination to interface with library functions requiring C strings.
 \begin{cfa}
 int open( const char * pathname, int flags );
-string fname{ "abc" );
+string fname{ "test.cc" );
 open( fname.@c_str()@ );
 \end{cfa}
-The function @c_str@ does not create a new null-terminated C string of the \CC string, as that requires passing ownership of the C string to the caller for eventual deletion.
+The function @c_str@ does not create a new null-terminated C string from the \CC string, as that requires passing ownership of the C string to the caller for eventual deletion.\footnote{
+C functions like \lstinline{strdup} do return allocated storage that must be freed by the caller.}
 Instead, each \CC string is null terminator just in case it might be needed for this purpose.
-Providing this backwards compatibility with C has a ubiquitous performance and storage cost even when this capability is not used.
+Providing this backwards compatibility with C has a ubiquitous performance and storage cost.
 
 
@@ -42,9 +43,9 @@
 
 This section discusses issues related to storage management of strings.
-Specifically, it is common for strings to logically overlap completely or within a substring.
+Specifically, it is common for strings to logically overlap completely or partially.
 \begin{cfa}
 string s1 = "abcdef";
 string s2 = s1;	$\C{// complete overlap, s2 == "abcdef"}$
-string s3 = s1.substr( 0, 3 ); $\C{// substring overlap, s3 == "abc"}$
+string s3 = s1.substr( 0, 3 ); $\C{// partial overlap, s3 == "abc"}$
 \end{cfa}
 This raises the question of how strings behave when an overlapping component is changed,
@@ -52,21 +53,17 @@
 s3[1] = 'w'; $\C{// what happens to s1 and s2?}$
 \end{cfa}
-\ie the notion of mutable and immutable strings.
-For example, Java has immutable strings so strings are copied when any overlapping string changes.
-Note, the notion of string mutability is not specified by @const@, \eg:
+This question is the notion of mutable or immutable strings.
+For example, Java has immutable strings that are copied when any overlapping string changes.
+Note, the notion of underlying string mutability is not specified by @const@, \eg:
 \begin{cfa}
 const string s1 = "abc";
 \end{cfa}
-Here, @s1@ always points at @"abc"@, and @"abc"@ is an immutable constant, so all aspects of @s1@ are immutable.
-Because a string is an implicit pointer, there is no mechanism to write:
-\begin{cfa}
-const string @* const@ s1;
-\end{cfa}
-Hence, the underlying string is mutable.
+Here, @const@ applies to the @s1@ pointer to @"abc"@, and @"abc"@ is an immutable constant that is \emph{copied} into the string's storage.
+Hence, @s1@ is not pointing at an immutable constant, meaning its underlying string is always mutable, unless some other designation is specified, such as Java's global rule.
 
 
 \subsection{Logical overlap}
 
-Rather than have strings be either mutable or immutable, it is possible to mark them on assignment.
+\CFA provides a dynamic mechanism to indicate mutable or immutable as an assignment attribute: @`shareEdits@.
 
 \input{sharing-demo.tex}
