Index: doc/theses/fangren_yu_MMath/background.tex
===================================================================
--- doc/theses/fangren_yu_MMath/background.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/fangren_yu_MMath/background.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -21,5 +21,5 @@
 Furthermore, Cyclone's polymorphic functions and types are restricted to abstraction over types with the same layout and calling convention as @void *@, \ie only pointer types and @int@.
 In \CFA terms, all Cyclone polymorphism must be dtype-static.
-While the Cyclone design provides the efficiency benefits discussed in Section~\ref{sec:generic-apps} for dtype-static polymorphism, it is more restrictive than \CFA's general model.
+While the Cyclone design provides the efficiency benefits discussed in~\VRef{s:GenericImplementation} for dtype-static polymorphism, it is more restrictive than \CFA's general model.
 Smith and Volpano~\cite{Smith98} present Polymorphic C, an ML dialect with polymorphic functions, C-like syntax, and pointer types;
 it lacks many of C's features, most notably structure types, and hence, is not a practical C replacement.
Index: doc/theses/fangren_yu_MMath/features.tex
===================================================================
--- doc/theses/fangren_yu_MMath/features.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/fangren_yu_MMath/features.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -13,5 +13,5 @@
 Here, manipulating the pointer address is the primary operation, while dereferencing the pointer to its value is the secondary operation.
 For example, \emph{within} a data structure, \eg stack or queue, all operations involve pointer addresses and the pointer may never be dereferenced because the referenced object is opaque.
-Alternatively, use a reference when its primary purpose is to alias a value, \eg a function parameter that does not copy the argument (performance reason).
+Alternatively, use a reference when its primary purpose is to alias a value, \eg a function parameter that does not copy the argument, for performance reasons.
 Here, manipulating the value is the primary operation, while changing the pointer address is the secondary operation.
 Succinctly, if the address changes often, use a pointer;
@@ -23,5 +23,5 @@
 \CFA adopts a uniform policy between pointers and references where mutability is a separate property made at the declaration.
 
-The following examples shows how pointers and references are treated uniformly in \CFA.
+The following examples show how pointers and references are treated uniformly in \CFA.
 \begin{cfa}[numbers=left,numberblanklines=false]
 int x = 1, y = 2, z = 3;$\label{p:refexamples}$
@@ -36,5 +36,5 @@
 @&@r3 = @&@y; @&&@r3 = @&&@r4;				$\C{// change r1, r2}$
 \end{cfa}
-Like pointers, reference can be cascaded, \ie a reference to a reference, \eg @&& r2@.\footnote{
+Like pointers, references can be cascaded, \ie a reference to a reference, \eg @&& r2@.\footnote{
 \CC uses \lstinline{&&} for rvalue reference, a feature for move semantics and handling the \lstinline{const} Hell problem.}
 Usage of a reference variable automatically performs the same number of dereferences as the number of references in its declaration, \eg @r2@ becomes @**r2@.
@@ -64,5 +64,5 @@
 The call applies an implicit dereference once to @x@ so the call is typed @f( int & )@ with @T = int@, rather than with @T = int &@.
 
-As for a pointer type, a reference type may have qualifiers, where @const@ is most common.
+As with a pointer type, a reference type may have qualifiers, where @const@ is most common.
 \begin{cfa}
 int x = 3; $\C{// mutable}$
@@ -101,5 +101,5 @@
 Interestingly, C does not give a warning/error if a @const@ pointer is not initialized, while \CC does.
 Hence, type @& const@ is similar to a \CC reference, but \CFA does not preclude initialization with a non-variable address.
-For example, in system's programming, there are cases where an immutable address is initialized to a specific memory location.
+For example, in systems programming, there are cases where an immutable address is initialized to a specific memory location.
 \begin{cfa}
 int & const mem_map = *0xe45bbc67@p@; $\C{// hardware mapped registers ('p' for pointer)}$
@@ -122,5 +122,6 @@
 \end{cfa}
 the call to @foo@ must pass @x@ by value, implying auto-dereference, while the call to @bar@ must pass @x@ by reference, implying no auto-dereference.
-Without any restrictions, this ambiguity limits the behaviour of reference types in \CFA polymorphic functions, where a type @T@ can bind to a reference or non-reference type.
+
+\PAB{My analysis shows} without any restrictions, this ambiguity limits the behaviour of reference types in \CFA polymorphic functions, where a type @T@ can bind to a reference or non-reference type.
 This ambiguity prevents the type system treating reference types the same way as other types, even if type variables could be bound to reference types.
 The reason is that \CFA uses a common \emph{object trait}\label{p:objecttrait} (constructor, destructor and assignment operators) to handle passing dynamic concrete type arguments into polymorphic functions, and the reference types are handled differently in these contexts so they do not satisfy this common interface.
@@ -157,5 +158,5 @@
 \end{cfa}
 While it is possible to write a reference type as the argument to a generic type, it is disallowed in assertion checking, if the generic type requires the object trait \see{\VPageref{p:objecttrait}} for the type argument, a fairly common use case.
-Even if the object trait can be made optional, the current type system often misbehaves by adding undesirable auto-dereference on the referenced-to value rather than the reference variable itself, as intended.
+Even if the object trait can be made optional, the current compiler implementation often misbehaves by adding undesirable auto-dereference on the referenced-to value rather than the reference variable itself, as intended.
 Some tweaks are necessary to accommodate reference types in polymorphic contexts and it is unclear what can or cannot be achieved.
 Currently, there are contexts where the \CFA programmer is forced to use a pointer type, giving up the benefits of auto-dereference operations and better syntax with reference types.
@@ -188,5 +189,5 @@
 @[x, y, z]@ = foo( 3, 4 );  // return 3 values into a tuple
 \end{cfa}
-Along with making returning multiple values a first-class feature, tuples were extended to simplify a number of other common context that normally require multiple statements and/or additional declarations, all of which reduces coding time and errors.
+Along with making returning multiple values a first-class feature, tuples were extended to simplify a number of other common contexts that normally require multiple statements and/or additional declarations.
 \begin{cfa}
 [x, y, z] = 3; $\C[2in]{// x = 3; y = 3; z = 3, where types may be different}$
@@ -205,5 +206,5 @@
 Only when returning a tuple from a function is there the notion of a tuple value.
 
-Overloading in the \CFA type-system must support complex composition of tuples and C type conversions using a costing scheme giving lower cost to widening conversions that do not truncate a value.
+Overloading in the \CFA type-system must support complex composition of tuples and C type conversions using a conversion cost scheme giving lower cost to widening conversions that do not truncate a value.
 \begin{cfa}
 [ int, int ] foo$\(_1\)$( int );			$\C{// overloaded foo functions}$
@@ -213,5 +214,5 @@
 \end{cfa}
 The type resolver only has the tuple return types to resolve the call to @bar@ as the @foo@ parameters are identical.
-The resultion involves unifying the flattened @foo@ return values with @bar@'s parameter list.
+The resulution involves unifying the flattened @foo@ return values with @bar@'s parameter list.
 However, no combination of @foo@s is an exact match with @bar@'s parameters;
 thus, the resolver applies C conversions to obtain a best match.
@@ -223,5 +224,5 @@
 bar( foo( 3 ) ) // only one tuple returning call 
 \end{lstlisting}
-Hence, programers cannot take advantage of the full power of tuples but type match is straightforward.
+Hence, programmers cannot take advantage of the full power of tuples but type match is straightforward.
 
 K-W C also supported tuple variables, but with a strong distinction between tuples and tuple values/variables.
@@ -286,5 +287,5 @@
 \end{figure}
 
-The primary issues for tuples in the \CFA type system are polymorphism and conversions.
+\PAB{I identified} the primary issues for tuples in the \CFA type system are polymorphism and conversions.
 Specifically, does it make sense to have a generic (polymorphic) tuple type, as is possible for a structure?
 \begin{cfa}
@@ -303,5 +304,5 @@
 \section{Tuple Implementation}
 
-As noted, tradition languages manipulate multiple values by in/out parameters and/or structures.
+As noted, traditional languages manipulate multiple values by in/out parameters and/or structures.
 K-W C adopted the structure for tuple values or variables, and as needed, the fields are extracted by field access operations.
 As well, for the tuple-assignment implementation, the left-hand tuple expression is expanded into assignments of each component, creating temporary variables to avoid unexpected side effects.
@@ -356,5 +357,5 @@
 \end{figure}
 
-Interestingly, in the third implementation of \CFA tuples by Robert Schluntz~\cite[\S~3]{Schluntz17}, the MVR functions revert back to structure based, where it remains in the current version of \CFA.
+Interestingly, in the third implementation of \CFA tuples by Robert Schluntz~\cite[\S~3]{Schluntz17}, the MVR functions revert back to structure based, and this remains in the current version of \CFA.
 The reason for the reversion is a uniform approach for tuple values/variables making tuples first-class types in \CFA, \ie allow tuples with corresponding tuple variables.
 This reversion was possible, because in parallel with Schluntz's work, generic types were added independently by Moss~\cite{Moss19}, and the tuple variables leveraged the same implementation techniques as for generic variables~\cite[\S~3.7]{Schluntz17}.
@@ -384,5 +385,5 @@
 Scala, like \CC, provides tuple types through a library using this structural expansion, \eg Scala provides tuple sizes 1 through 22 via hand-coded generic data-structures.
 
-However, after experience gained building the \CFA runtime system, making tuple-types first-class seems to add little benefit.
+However, after experience gained building the \CFA runtime system, \PAB{I convinced them} making tuple-types first-class seems to add little benefit.
 The main reason is that tuples usages are largely unstructured,
 \begin{cfa}
@@ -512,5 +513,5 @@
 looping is used to traverse the argument pack from left to right.
 The @va_list@ interface is walking up the stack (by address) looking at the arguments pushed by the caller.
-(Magic knowledge is needed for arguments pushed using registers.)
+(Compiler-specific ABI knowledge is needed for arguments pushed using registers.)
 
 \begin{figure}
@@ -571,10 +572,10 @@
 
 Currently in \CFA, variadic polymorphic functions are the only place tuple types are used.
-And because \CFA compiles polymorphic functions versus template expansion, many wrapper functions are generated to implement both user-defined generic-types and polymorphism with variadics.
+\PAB{My analysis showed} many wrapper functions are generated to implement both user-defined generic-types and polymorphism with variadics, because \CFA compiles polymorphic functions versus template expansion.
 Fortunately, the only permitted operations on polymorphic function parameters are given by the list of assertion (trait) functions.
 Nevertheless, this small set of functions eventually needs to be called with flattened tuple arguments.
 Unfortunately, packing the variadic arguments into a rigid @struct@ type and generating all the required wrapper functions is significant work and largely wasted because most are never called.
 Interested readers can refer to pages 77-80 of Robert Schluntz's thesis to see how verbose the translator output is to implement a simple variadic call with 3 arguments.
-As the number of arguments increases, \eg a call with 5 arguments, the translator generates a concrete @struct@ types for a 4-tuple and a 3-tuple along with all the polymorphic type data for them.
+As the number of arguments increases, \eg a call with 5 arguments, the translator generates concrete @struct@ types for a 4-tuple and a 3-tuple along with all the polymorphic type data for them.
 An alternative approach is to put the variadic arguments into an array, along with an offset array to retrieve each individual argument.
 This method is similar to how the C @va_list@ object is used (and how \CFA accesses polymorphic fields in a generic type), but the \CFA variadics generate the required type information to guarantee type safety (like the @printf@ format string).
@@ -683,5 +684,5 @@
 
 Nested \emph{named} aggregates are allowed in C but there is no qualification operator, like the \CC type operator `@::@', to access an inner type.
-\emph{To compensate for the missing type operator, all named nested aggregates are hoisted to global scope, regardless of the nesting depth, and type usages within the nested type are replaced with global type name.}
+To compensate for the missing type operator, all named nested aggregates are hoisted to global scope, regardless of the nesting depth, and type usages within the nested type are replaced with global type name.
 Hoisting nested types can result in name collisions among types at the global level, which defeats the purpose of nesting the type.
 \VRef[Figure]{f:NestedNamedAggregate} shows the nested type @T@ is hoisted to the global scope and the declaration rewrites within structure @S@.
@@ -729,5 +730,5 @@
 \end{figure}
 
-For good reasons, \CC chose to change this semantics:
+\CC chose to change this semantics:
 \begin{cquote}
 \begin{description}[leftmargin=*,topsep=0pt,itemsep=0pt,parsep=0pt]
@@ -769,5 +770,5 @@
 Like an anonymous nested type, a named Plan-9 nested type has its field names hoisted into @struct S@, so there is direct access, \eg @s.x@ and @s.i@.
 Hence, the field names must be unique, unlike \CC nested types, but the type names are at a nested scope level, unlike type nesting in C.
-In addition, a pointer to a structure is automatically converted to a pointer to an anonymous field for assignments and function calls, providing containment inheritance with implicit subtyping, \ie @U@ $\subset$ @S@ and @W@ $\subset$ @S@, \eg:
+In addition, a pointer to a structure is automatically converted to a pointer to an anonymous field for assignments and function calls, providing containment inheritance with implicit subtyping, \ie @U@ $<:$ @S@ and @W@ $<:$ @S@, \eg:
 \begin{cfa}
 void f( union U * u );
@@ -781,5 +782,5 @@
 Note, there is no value assignment, such as, @w = s@, to copy the @W@ field from @S@.
 
-Unfortunately, the Plan-9 designers did not lookahead to other useful features, specifically nested types.
+Unfortunately, the Plan-9 designers did not look ahead to other useful features, specifically nested types.
 This nested type compiles in \CC and \CFA.
 \begin{cfa}
@@ -808,5 +809,5 @@
 In addition, a semi-non-compatible change is made so that Plan-9 syntax means a forward declaration in a nested type.
 Since the Plan-9 extension is not part of C and rarely used, this change has minimal impact.
-Hence, all Plan-9 semantics are denoted by the @inline@ qualifier, which is good ``eye-candy'' when reading a structure definition to spot Plan-9 definitions.
+Hence, all Plan-9 semantics are denoted by the @inline@ qualifier, which clearly indicates the usage of Plan-9 definitions.
 Finally, the following code shows the value and pointer polymorphism.
 \begin{cfa}
@@ -821,5 +822,5 @@
 
 In general, non-standard C features (@gcc@) do not need any special treatment, as they are directly passed through to the C compiler.
-However, the Plan-9 semantics allow implicit conversions from the outer type to the inner type, which means the \CFA type resolver must take this information into account.
+However, \PAB{I found} the Plan-9 semantics allow implicit conversions from the outer type to the inner type, which means the \CFA type resolver must take this information into account.
 Therefore, the \CFA resolver must implement the Plan-9 features and insert necessary type conversions into the translated code output.
 In the current version of \CFA, this is the only kind of implicit type conversion other than the standard C arithmetic conversions.
@@ -847,6 +848,6 @@
 \end{c++}
 and again the expression @d.x@ is ambiguous.
-While \CC has no direct syntax to disambiguate @x@, \ie @d.B.x@ or @d.C.x@, it is possible with casts, @((B)d).x@ or @((C)d).x@.
+While \CC has no direct syntax to disambiguate @x@, \eg @d.B.x@ or @d.C.x@, it is possible with casts, @((B)d).x@ or @((C)d).x@.
 Like \CC, \CFA compiles the Plan-9 version and provides direct qualification and casts to disambiguate @x@.
-While ambiguous definitions are allowed, duplicate field names is poor practice and should be avoided if possible.
+While ambiguous definitions are allowed, duplicate field names are poor practice and should be avoided if possible.
 However, when a programmer does not control all code, this problem can occur and a naming workaround must exist.
Index: doc/theses/fangren_yu_MMath/future.tex
===================================================================
--- doc/theses/fangren_yu_MMath/future.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/fangren_yu_MMath/future.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -4,9 +4,10 @@
 The following are feature requests related to type-system enhancements that have surfaced during the development of the \CFA language and library, but have not been implemented yet.
 Currently, developers must work around these missing features, sometimes resulting in inefficiency.
+\PAB{The following sections discuss new features I am proposing to fix these problems.}
 
 
 \section{Closed Trait Types}
 
-Currently, \CFA does not have any closed types, as open type are the basis of its unique type-system, allowing new functions to be added at any time to override existing ones for trait satisfaction.
+Currently, \CFA does not have any closed types, as open types are the basis of its unique type-system, allowing new functions to be added at any time to override existing ones for trait satisfaction.
 Locally-declared nested-functions,\footnote{
 Nested functions are not a feature in C but supported by \lstinline{gcc} for multiple decades and are used heavily in \CFA.}
@@ -17,5 +18,5 @@
 Library implementers normally do not want users to override certain operations and cause the behaviour of polymorphic invocations to change.
 \item
-Caching and reusing resolution results in the compiler is effected, as newly introduced declarations can participate in assertion resolution;
+Caching and reusing resolution results in the compiler is affected, as newly introduced declarations can participate in assertion resolution;
 as a result, previously invalid subexpressions suddenly become valid, or alternatively cause ambiguity in assertions.
 \end{enumerate}
@@ -70,5 +71,5 @@
 \end{figure}
 
-A \CFA closed trait type is similar to a Haskell type class requiring an explicit instance declaration.
+A \CFA closed trait type is planned to be working similarly to a Haskell type class that requires an explicit instance declaration.
 The syntax for the closed trait might look like:
 \begin{cfa}
@@ -91,6 +92,7 @@
 
 \section{Associated Types}
+\label{s:AssociatedTypes}
 
-The analysis presented in \VRef{s:AssertionSatisfaction} shows if all type parameters have to be bound before assertion resolution, the complexity of resolving assertions become much lower as every assertion parameter can be resolved independently.
+The analysis presented in \VRef{s:AssertionSatisfaction} shows if all type parameters have to be bound before assertion resolution, the complexity of resolving assertions becomes much lower as every assertion parameter can be resolved independently.
 That is, by utilizing information from higher up the expression tree for return value overloading, most of the type bindings can be resolved.
 However, there are scenarios where some intermediate types need to be involved in certain operations, which are neither input nor output types.
@@ -152,5 +154,5 @@
 Note that the type @list *@ satisfies both @pointer_like( list *, int )@ and @pointer_like( list *,@ @list )@ (the latter by the built-in pointer dereference operator) and the expression @*it@ can be either a @struct list@ or an @int@.
 Requiring associated types to be unique makes the @pointer_like@ trait not applicable to @list *@, which is undesirable.
-I have not attempted to implement associated types in \CFA compiler, but based on the above discussions, one option is to make associated type resolution and return type overloading coexist:
+I have not attempted to implement associated types in the \CFA compiler, but based on the above discussions, one option is to make associated type resolution and return type overloading coexist:
 when the associated type appears in returns, it is deduced from the context and then verify the trait with ordinary assertion resolution;
 when it does not appear in the returns, the type is required to be uniquely determined by the expression that defines the associated type.
@@ -159,5 +161,5 @@
 \section{User-defined Conversions}
 
-Missing type-system feature is a scheme for user-defined conversions.
+A missing type-system feature in \CFA is a scheme for user-defined conversions.
 Conversion means one type goes through an arbitrary complex process of changing its value to some meaningful value in another type.
 Because the conversion process can be arbitrarily complex, it requires the power of a function.
Index: doc/theses/fangren_yu_MMath/intro.tex
===================================================================
--- doc/theses/fangren_yu_MMath/intro.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/fangren_yu_MMath/intro.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -30,14 +30,17 @@
 
 \section{Overloading}
-
+\label{s:Overloading}
+
+\vspace*{-5pt}
 \begin{quote}
 There are only two hard things in Computer Science: cache invalidation and \emph{naming things}. --- Phil Karlton
 \end{quote}
+\vspace*{-5pt}
 Overloading allows programmers to use the most meaningful names without fear of name clashes within a program or from external sources, like include files.
-Experience from \CC and \CFA developers shows the type system can implicitly and correctly disambiguates the majority of overloaded names, \ie it is rare to get an incorrect selection or ambiguity, even among hundreds of overloaded (variables and) functions.
+Experience from \CC and \CFA developers shows the type system can implicitly and correctly disambiguate the majority of overloaded names, \ie it is rare to get an incorrect selection or ambiguity, even among hundreds of overloaded (variables and) functions.
 In many cases, a programmer is unaware of name clashes, as they are silently resolved, simplifying the development process.
 
 Disambiguating among overloads is implemented by examining each call site and selecting the best matching overloaded function based on criteria like the types and number of arguments and the return context.
-Since the hardware does not support mixed-mode operands, @2 + 3.5@, the type system must disallow it or (safely) convert the operands to a common type.
+Since the hardware does not support mixed-mode operands, such as @2 + 3.5@, the type system must disallow it or (safely) convert the operands to a common type.
 Like overloading, the majority of mixed-mode conversions are silently resolved, simplifying the development process.
 This approach matches with programmer intuition and expectation, regardless of any \emph{safety} issues resulting from converted values.
@@ -49,12 +52,14 @@
 As well, many namespace systems provide a mechanism to open their scope returning to normal overloading, \ie no qualification.
 While namespace mechanisms are very important and provide a number of crucial program-development features, protection from overloading is overstated.
-Similarly, lexical nesting is another place where overloading occurs.
+Similarly, lexical nesting is another place where duplicate naming issues arise.
 For example, in object-oriented programming, class member names \newterm{shadow} names within members.
-Some programmers, qualify all member names with @class::@ or @this->@ to make them unique from names defined in members.
-Even nested lexical blocks result in shadowing, \eg multiple nested loop-indices called @i@.
-Again, coding styles exist requiring all variables in nested block to be unique to prevent name shadowing.
+Some programmers qualify all member names with @class::@ or @this->@ to make them unique from names defined in members.
+Even nested lexical blocks result in shadowing, \eg multiple nested loop-indices called @i@, silently changing the meaning of @i@ at lower scope levels.
+Again, coding styles exist requiring all variables in nested block to be unique to prevent name shadowing problems.
 Depending on the language, these possible ambiguities can be reported (as warnings or errors) and resolved explicitly using some form of qualification and/or cast.
-
-Formally, overloading is defined by Strachey as \newterm{ad hoc polymorphism}:
+For example, if variables can be overloaded, shadowed variables of different type can produce ambiguities, indicating potential problems in lower scopes.
+
+Formally, overloading is defined by Strachey as one kind of \newterm{ad hoc polymorphism}:
+\vspace*{-5pt}
 \begin{quote}
 In ad hoc polymorphism there is no single systematic way of determining the type of the result from the type of the arguments.
@@ -63,5 +68,7 @@
 It seems, moreover, that the automatic insertion of transfer functions by the compiling system is limited to this.~\cite[p.~37]{Strachey00}
 \end{quote}
+\vspace*{-5pt}
 where a \newterm{transfer function} is an implicit conversion to help find a matching overload:
+\vspace*{-5pt}
 \begin{quote}
 The problem of dealing with polymorphic operators is complicated by the fact that the range of types sometimes overlap.
@@ -69,4 +76,5 @@
 The functions which perform this operation are known as transfer functions and may either be used explicitly by the programmer, or, in some systems, inserted automatically by the compiling system.~\cite[p.~35]{Strachey00}
 \end{quote}
+\vspace*{-5pt}
 The differentiating characteristic between parametric polymorphism and overloading is often stated as: polymorphic functions use one algorithm to operate on arguments of many different types, whereas overloaded functions use a different algorithm for each type of argument.
 A similar differentiation is applicable for overloading and default parameters.
@@ -128,5 +136,5 @@
 \end{cfa}
 the overloaded names @S@ and @E@ are separated into the type and object domain, and C uses the type kinds @struct@ and @enum@ to disambiguate the names.
-In general, types are not overloaded because inferencing them is difficult to imagine in a statically programming language.
+In general, types are not overloaded because inferencing them is difficult to imagine in a statically typed programming language.
 \begin{cquote}
 \setlength{\tabcolsep}{26pt}
@@ -181,5 +189,5 @@
 \noindent
 \newterm{General overloading} occurs when the type-system \emph{knows} a function's parameters and return types (or a variable's type for variable overloading).
-In functional programming-languages, there is always a return type (except for a monad).
+In functional programming-languages, there is always a return type.
 If a return type is specified, the compiler does not have to inference the function body.
 For example, the compiler has complete knowledge about builtin types and their overloaded arithmetic operators.
@@ -214,7 +222,10 @@
 Hence, parametric overloading requires additional information about the universal types to make them useful.
 
-This additional information often comes as a set of operations a type must supply (@trait@/-@concept@) and these operations can then be used in the body of the function.
-\begin{cfa}
-forall( T | T ?@++@( T, T ) ) T inc( T t ) { return t@++@; }
+This additional information often comes as a set of operations that must be supply for a type, \eg \CFA/Rust/Go have traits, \CC template has concepts, Haskell has type-classes.
+These operations can then be used in the body of the function to manipulate the type's value.
+Here, a type binding to @T@ must have available a @++@ operation with the specified signature.
+\begin{cfa}
+forall( T | @T ?++( T, T )@ ) // trait
+T inc( T t ) { return t@++@; } // change type value
 int i = 3
 i = inc( i )
@@ -222,5 +233,5 @@
 \end{cfa}
 Given a qualifying trait, are its elements inferred or declared?
-In the above example, the type system infers @int@ for @T@, infers it needs a @++@ operator that takes an @int@ and returns an @int@, and finds this function in the enclosing environment (\eg standard prelude).
+In the example, the type system infers @int@ for @T@, infers it needs an appropriately typed @++@ operator, and finds it in the enclosing environment, possibly in the language's prelude defining basic types and their operations.
 This implicit inferencing is expensive if matched with implicit conversions when there is no exact match.
 Alternatively, types opt-in to traits via declarations.
@@ -420,5 +431,5 @@
 \subsection{Operator Overloading}
 
-Virtually all programming languages provide general overloading of the arithmetic operators across the basic computational types using the number and type of parameters and returns.
+Many programming languages provide general overloading of the arithmetic operators~\cite{OperOverloading} across the basic computational types using the number and type of parameters and returns.
 However, in some languages, arithmetic operators may not be first class, and hence, cannot be overloaded.
 Like \CC, \CFA allows general operator overloading for user-defined types.
@@ -438,5 +449,6 @@
 \subsection{Function Overloading}
 
-Both \CFA and \CC allow general overloading for functions, as long as their prototypes differ in the number and type of parameters and returns.
+Many programming languages provide general overloading for functions~\cite{FuncOverloading}, as long as their prototypes differ in the number and type of parameters.
+A few programming languages also use the return type for selecting overloaded functions \see{below}.
 \begin{cfa}
 void f( void );			$\C[2in]{// (1): no parameter}$
@@ -445,8 +457,8 @@
 f( 'A' );				$\C{// select (2)}\CRT$
 \end{cfa}
-The type system examines each call size and first looks for an exact match and then a best match using conversions.
+The type system examines each call site and first looks for an exact match and then a best match using conversions.
 
 Ada, Scala, and \CFA type-systems also use the return type in resolving a call, to pinpoint the best overloaded name.
-Essentailly, the return types are \emph{reversed curried} into output parameters of the function.
+Essentially, the return types are \emph{reversed curried} into output parameters of the function.
 For example, in many programming languages with overloading, the following functions are ambiguous without using the return type.
 \begin{cfa}
@@ -478,5 +490,5 @@
 \begin{cfa}
 void foo( double d );
-int v;				    $\C[2in]{// (1)}$
+int v;					$\C[2in]{// (1)}$
 double v;				$\C{// (2) variable overloading}$
 foo( v );				$\C{// select (2)}$
@@ -487,5 +499,5 @@
 }
 \end{cfa}
-It is interesting that shadow overloading is considered a normal programming-language feature with only slight software-engineering problems.
+It is interesting that shadowing \see{namespace pollution in \VRef{s:Overloading}} is considered a normal programming-language feature with only slight software-engineering problems.
 However, variable overloading within a scope is often considered dangerous, without any evidence to corroborate this claim.
 In contrast, function overloading in \CC occurs silently within the global scope from @#include@ files all the time without problems.
@@ -554,5 +566,5 @@
 The following covers these issues, and why this scheme is not amenable with the \CFA type system.
 
-One of the first and powerful type-inferencing system is Hindley--Milner~\cite{Damas82}.
+One of the first and most powerful type-inferencing systems is Hindley--Milner~\cite{Damas82}.
 Here, the type resolver starts with the types of the program constants used for initialization and these constant types flow throughout the program, setting all variable and expression types.
 \begin{cfa}
@@ -579,5 +591,5 @@
 Note, return-type inferencing goes in the opposite direction to Hindley--Milner: knowing the type of the result and flowing back through an expression to help select the best possible overloads, and possibly converting the constants for a best match.
 
-In simpler type-inferencing systems, such as C/\CC/\CFA, there are more specific usages.
+There are multiple ways to indirectly specify a variable's type, \eg from a prior variable or expression.
 \begin{cquote}
 \setlength{\tabcolsep}{10pt}
@@ -606,5 +618,6 @@
 \end{tabular}
 \end{cquote}
-The two important capabilities are:
+Here, @type(expr)@ computes the same type as @auto@ righ-hand expression.
+The advantages are:
 \begin{itemize}[topsep=0pt]
 \item
@@ -616,5 +629,5 @@
 This issue is exaggerated with \CC templates, where type names are 100s of characters long, resulting in unreadable error messages.
 \item
-Ensuring the type of secondary variables, match a primary variable.
+Ensuring the type of secondary variables match a primary variable.
 \begin{cfa}
 int x; $\C{// primary variable}$
@@ -625,4 +638,7 @@
 \end{itemize}
 Note, the use of @typeof@ is more restrictive, and possibly safer, than general type-inferencing.
+\begin{cquote}
+\setlength{\tabcolsep}{20pt}
+\begin{tabular}{@{}ll@{}}
 \begin{cfa}
 int x;
@@ -630,10 +646,18 @@
 type(x) z = ... // complex expression
 \end{cfa}
-Here, the types of @y@ and @z@ are fixed (branded), whereas with type inferencing, the types of @y@ and @z@ are potentially unknown.
+&
+\begin{cfa}
+int x;
+auto y = ... // complex expression
+auto z = ... // complex expression
+\end{cfa}
+\end{tabular}
+\end{cquote}
+On the left, the types of @y@ and @z@ are fixed (branded), whereas on the right, the types of @y@ and @z@ can fluctuate.
 
 
 \subsection{Type-Inferencing Issues}
 
-Each kind of type-inferencing system has its own set of issues that flow onto the programmer in the form of convenience, restrictions, or confusions.
+Each kind of type-inferencing system has its own set of issues that affect the programmer in the form of convenience, restrictions, or confusions.
 
 A convenience is having the compiler use its overarching program knowledge to select the best type for each variable based on some notion of \emph{best}, which simplifies the programming experience.
@@ -643,5 +667,5 @@
 For example, if a change is made in an initialization expression, it can cascade type changes producing many other changes and/or errors.
 At some point, a variable's type needs to remain constant and the initializing expression needs to be modified or be in error when it changes.
-Often type-inferencing systems allow restricting (\newterm{branding}) a variable or function type, so the complier can report a mismatch with the constant initialization.
+Often type-inferencing systems allow restricting (\newterm{branding}) a variable or function type, so the compiler can report a mismatch with the constant initialization.
 \begin{cfa}
 void f( @int@ x, @int@ y ) {  // brand function prototype
@@ -657,5 +681,5 @@
 As a result, understanding and changing the code becomes almost impossible.
 Types provide important clues as to the behaviour of the code, and correspondingly to correctly change or add new code.
-In these cases, a programmer is forced to re-engineer types, which is fragile, or rely on a fancy IDE that can re-engineer types for them.
+In these cases, a programmer is forced to re-engineer types, which is fragile, or rely on an IDE that can re-engineer types for them.
 For example, given:
 \begin{cfa}
@@ -670,14 +694,12 @@
 In this situation, having the type name or its short alias is essential.
 
-\CFA's type system tries to prevent type-resolution mistakes by relying heavily on the type of the left-hand side of assignment to pinpoint the right types within an expression.
+\CFA's type system tries to prevent type-resolution mistakes by relying heavily on the type of the left-hand side of assignment to pinpoint correct types within an expression.
 Type inferencing defeats this goal because there is no left-hand type.
-Fundamentally, type inferencing tries to magic away variable types from the programmer.
-However, this results in lazy programming with the potential for poor performance and safety concerns.
-Types are as important as control-flow in writing a good program, and should not be masked, even if it requires the programmer to think!
-A similar issue is garbage collection, where storage management is magicked away, often resulting in poor program design and performance.\footnote{
-There are full-time Java consultants, who are hired to find memory-management problems in large Java programs.}
-The entire area of Computer-Science data-structures is obsessed with time and space, and that obsession should continue into regular programming.
-Understanding space and time issues is an essential part of the programming craft.
-Given @typedef@ and @typeof@ in \CFA, and the strong desire to use the left-hand type in resolution, the decision was made not to support implicit type-inferencing in the type system.
+Fundamentally, type inferencing tries to remove explicit typing from programming.
+However, writing down types is an important aspect of good programming, as it provides a check of the programmer's expected type and the actual type.
+Thinking carefully about types is similar to thinking carefully about date structures, often resulting in better performance and safety.
+Similarly, thinking carefully about storage management in unmanaged languages is an important aspect of good programming, versus implicit storage management (garbage collection) in managed language.\footnote{
+There are full-time Java consultants, who are hired to find memory-management problems in large Java programs, \eg Monika Beckworth.}
+Given @typedef@ and @typeof@, and the strong desire to use the left-hand type in resolution, no attempt has been made in \CFA to support implicit type-inferencing.
 Should a significant need arise, this decision can be revisited.
 
@@ -702,5 +724,5 @@
 int i, * ip = identity( &i );
 \end{cfa}
-Unlike \CC template functions, \CFA polymorphic functions are compatible with C \emph{separate compilation}, preventing compilation and code bloat.
+Unlike \CC template functions, \CFA polymorphic functions are compatible with \emph{separate compilation}, preventing compilation and code bloat.
 
 To constrain polymorphic types, \CFA uses \newterm{type assertions}~\cite[pp.~37-44]{Alphard} to provide further type information, where type assertions may be variable or function declarations that depend on a polymorphic type variable.
@@ -710,5 +732,5 @@
 int val = twice( twice( 3 ) );  $\C{// val == 12}$
 \end{cfa}
-Parametric polymorphism and assertions occur in existing type-unsafe (@void *@) C functions, like @qsort@ for sorting an array of unknown values.
+The closest approximation to parametric polymorphism and assertions in C is type-unsafe (@void *@) functions, like @qsort@ for sorting an array of unknown values.
 \begin{cfa}
 void qsort( void * base, size_t nmemb, size_t size, int (*cmp)( const void *, const void * ) );
@@ -761,5 +783,5 @@
 The @sized@ assertion passes size and alignment as a data object has no implicit assertions.
 Both assertions are used in @malloc@ via @sizeof@ and @_Alignof@.
-In practise, this polymorphic @malloc@ is unwrapped by the C compiler and the @if@ statement is elided producing a type-safe call to @malloc@ or @memalign@.
+In practice, this polymorphic @malloc@ is unwrapped by the C compiler and the @if@ statement is elided producing a type-safe call to @malloc@ or @memalign@.
 
 This mechanism is used to construct type-safe wrapper-libraries condensing hundreds of existing C functions into tens of \CFA overloaded functions.
@@ -787,7 +809,7 @@
 forall( T @| sumable( T )@ )   // use trait
 T sum( T a[$\,$], size_t size ) {
-	@T@ total = 0;          // initialize by 0 constructor
+	@T@ total = 0;		  // initialize by 0 constructor
 	for ( i; size )
-		total @+=@ a[i];    // select appropriate +
+		total @+=@ a[i];	// select appropriate +
 	return total;
 }
@@ -795,5 +817,5 @@
 \end{tabular}
 \end{cquote}
-Traits are implemented by flatten them at use points, as if written in full by the programmer.
+Traits are implemented by flattening them at use points, as if written in full by the programmer.
 Flattening often results in overlapping assertions, \eg operator @+@.
 Hence, trait names play no part in type equivalence.
@@ -821,10 +843,16 @@
 Write bespoke data structures for each context.
 While this approach is flexible and supports integration with the C type checker and tooling, it is tedious and error prone, especially for more complex data structures.
+
 \item
 Use @void *@-based polymorphism, \eg the C standard library functions @bsearch@ and @qsort@, which allow for the reuse of code with common functionality.
 However, this approach eliminates the type checker's ability to ensure argument types are properly matched, often requiring a number of extra function parameters, pointer indirection, and dynamic allocation that is otherwise unnecessary.
+
 \item
-Use preprocessor macros, similar to \CC @templates@, to generate code that is both generic and type checked, but errors may be difficult to interpret.
-Furthermore, writing and using complex preprocessor macros is difficult and inflexible.
+Use an internal macro capability, like \CC @templates@, to generate code that is both generic and type checked, but errors may be difficult to interpret.
+Furthermore, writing complex template macros is difficult and complex.
+
+\item
+Use an external macro capability, like M4~\cite{M4}, to generate code that is generic code, but errors may be difficult to interpret.
+Like internal macros, writing and using external macros is equally difficult and complex.
 \end{enumerate}
 
@@ -857,4 +885,5 @@
 \end{tabular}
 \end{cquote}
+\label{s:GenericImplementation}
 \CFA generic types are \newterm{fixed} or \newterm{dynamic} sized.
 Fixed-size types have a fixed memory layout regardless of type parameters, whereas dynamic types vary in memory layout depending on the type parameters.
@@ -883,8 +912,10 @@
 For software-engineering reasons, the set assertions would be refactored into a trait to allow alternative implementations, like a Java \lstinline[language=java]{interface}.
 
-In summation, the \CFA type system inherits \newterm{nominal typing} for concrete types from C, and adds \newterm{structural typing} for polymorphic types.
-Traits are used like interfaces in Java or abstract base-classes in \CC, but without the nominal inheritance relationships.
-Instead, each polymorphic function or generic type defines the structural type needed for its execution, which is fulfilled at each call site from the lexical environment, like Go~\cite{Go} or Rust~\cite{Rust} interfaces.
-Hence, new lexical scopes and nested functions are used extensively to create local subtypes, as in the @qsort@ example, without having to manage a nominal inheritance hierarchy.
+In summation, the \CFA type system inherits \newterm{nominal typing} for concrete types from C;
+however, without inheritance in \CFA, nominal typing cannot be extended to polymorphic subtyping.
+Instead, \CFA adds \newterm{structural typing} and uses it to generate polymorphism.
+Here, traits are like interfaces in Java or abstract base-classes in \CC, but without the nominal inheritance relationships.
+Instead, each polymorphic function or generic type defines the structural requirements needed for its execution, which is fulfilled at each call site from the lexical environment, like Go~\cite{Go} or Rust~\cite{Rust} interfaces.
+Hence, lexical scopes and nested functions are used extensively to mimic subtypes, as in the @qsort@ example, without managing a nominal inheritance hierarchy.
 
 
@@ -902,5 +933,5 @@
 general\footnote{overloadable entities: V $\Rightarrow$ variable, O $\Rightarrow$ operator, F $\Rightarrow$ function, M $\Rightarrow$ member}
 						& O\footnote{except assignment}/F	& O/F/M	& V/O/F	& M\footnote{not universal}	& O/M	& O/F/M	& no	& no	\\
-general constraints\footnote{T $\Rightarrow$ parameter type, \# $\Rightarrow$ parameter number, N $\Rightarrow$ parameter name; R $\Rightarrow$ return type}
+general constraints\footnote{T $\Rightarrow$ parameter type, \# $\Rightarrow$ parameter count, N $\Rightarrow$ parameter name; R $\Rightarrow$ return type}
 						& T/\#//R\footnote{parameter names can be used to disambiguate among overloads but not create overloads}
 									& T/\#	& T/\#/R	& T/\#	& T/\#/N/R	& T/\#/N/R	& T/\#/N	& T/R \\
@@ -999,5 +1030,5 @@
 
 However, the parameter operations are severely restricted because universal types have few operations.
-For example, swift provides a @print@ operation for its universal type, and the java @Object@ class provides general methods: @toString@, @hashCode@, @equals@, @finalize@, \etc.
+For example, Swift provides a @print@ operation for its universal type, and the Java @Object@ class provides general methods: @toString@, @hashCode@, @equals@, @finalize@, \etc.
 This restricted mechanism still supports a few useful functions, where the parameters are abstract entities, \eg:
 \begin{swift}
@@ -1009,5 +1040,5 @@
 \end{swift}
 To make a universal function useable, an abstract description is needed for the operations used on the parameters within the function body.
-Type matching these operations can occur by discover using techniques like \CC template expansion, or explicit stating, \eg interfaces, subtyping (inheritance), assertions (traits), type classes, type bounds.
+Type matching these operations can be done by using techniques like \CC template expansion, or explicit stating, \eg interfaces, subtyping (inheritance), assertions (traits), type classes, type bounds.
 The mechanism chosen can affect separate compilation or require runtime type information (RTTI).
 \begin{description}
@@ -1030,5 +1061,5 @@
 
 \begin{figure}
-\setlength{\tabcolsep}{15pt}
+\setlength{\tabcolsep}{12pt}
 \begin{tabular}{@{}ll@{}}
 \multicolumn{1}{c}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{Haskell}} \\
@@ -1036,12 +1067,10 @@
 forall( T ) trait sumable {
 	void ?{}( T &, zero_t );
-	T ?+=?( T &, T );
-};
+	T ?+=?( T &, T );  };
 forall( T | sumable( T ) )
 T sum( T a[], size_t size ) {
 	T total = 0;
 	for ( i; size ) total += a[i];
-	return total;
-}
+	return total;  }
 struct S { int i, j; };
 void ?{}( S & s, zero_t ) { s.[i, j] = 0; }
@@ -1049,13 +1078,11 @@
 void ?{}( S & s, int i, int j ) { s.[i, j] = [i, j]; }
 S ?+=?( S & l, S r ) { l.[i, j] += r.[i, j]; }
-
-int main() {
-	int ia[] = { 1, 2, 3 };
-	sout | sum( ia, 3 );        // trait inference
-	double da[] = { 1.5, 2.5, 3.5 };
-	sout | sum( da, 3 );        // trait inference
-	S sa[] = { {1, 1}, {2, 2}, {3, 3 } };
-	sout | sum( sa, 3 ).[i, j]; // trait inference
-}
+int main() {		// trait inferencing
+	sout | sum( (int []){ 1, 2, 3 }, 3 );
+	sout | sum( (double []){ 1.5, 2.5, 3.5 }, 3 );
+	sout | sum( (S []){ {1,1}, {2,2}, {3,3} }, 3 ).[i, j];  }
+
+
+
 \end{cfa}
 &
@@ -1064,11 +1091,7 @@
 	szero :: a
 	sadd :: a -> a -> a
-
 ssum ::  Sumable a $=>$ [a] -> a
 ssum (x:xs) = sadd x (ssum xs)
 ssum [] = szero
-
-
-
 data S = S Int Int deriving Show
 @instance Sumable Int@ where
@@ -1077,5 +1100,5 @@
 @instance Sumable Float@ where
 	szero = 0.0
-   sadd = (+)
+	sadd = (+)
 @instance Sumable S@ where
 	szero = S 0 0
@@ -1087,10 +1110,10 @@
 \end{haskell}
 \end{tabular}
-\caption{Implicitly/Explicitly Trait Inferencing}
-\label{f:ImplicitlyExplicitlyTraitInferencing}
+\caption{Implicit/Explicit Trait Inferencing}
+\label{f:ImplicitExplicitTraitInferencing}
 \end{figure}
 
 One differentiating feature among these specialization techniques is the ability to implicitly or explicitly infer the trait information at a class site.
-\VRef[Figure]{f:ImplicitlyExplicitlyTraitInferencing} compares the @sumable@ trait and polymorphic @sum@ function \see{\VRef{s:Traits}} for \CFA and Haskell.
+\VRef[Figure]{f:ImplicitExplicitTraitInferencing} compares the @sumable@ trait and polymorphic @sum@ function \see{\VRef{s:Traits}} for \CFA and Haskell.
 Here, the \CFA type system inferences the trait functions at each call site, so no additional specification is necessary by the programmer.
 The Haskell program requires the programmer to explicitly bind the trait and to each type that can be summed.
@@ -1102,5 +1125,5 @@
 \end{ada}
 Finally, there is a belief that certain type systems cannot support general overloading, \eg Haskell.
-As \VRef[Table]{t:OverloadingFeatures} shows, there are multiple languages with both general and parametric overloading, so the decision to not support general overloading is based on the opinion of the language designers and the type system they choose, not any reason in type theory.
+As \VRef[Table]{t:OverloadingFeatures} shows, there are multiple languages with both general and parametric overloading, so the decision to not support general overloading is based on design choices made by the language designers not any reason in type theory.
 
 The fourth row classifies if conversions are attempted beyond exact match.
@@ -1121,5 +1144,5 @@
 The details of compiler optimization work are covered in a previous technical report~\cite{Yu20}, which essentially forms part of this thesis.
 \item
-The thesis presents a systematic review of the new features added to the \CFA language and its type system.
+This thesis presents a systematic review of the new features added to the \CFA language and its type system.
 Some of the more recent inclusions to \CFA, such as tuples and generic structure types, were not well tested during development due to the limitation of compiler performance.
 Several issues coming from the interactions of various language features are identified and discussed in this thesis;
Index: doc/theses/fangren_yu_MMath/resolution.tex
===================================================================
--- doc/theses/fangren_yu_MMath/resolution.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/fangren_yu_MMath/resolution.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -2,5 +2,5 @@
 \label{c:content2}
 
-Recapping, the \CFA's type-system provides expressive polymorphism: variables can be overloaded, functions can be overloaded by argument and return types, tuple types, generic (polymorphic) functions and types (aggregates) can have multiple type parameters with assertion restrictions;
+Recapping, \CFA's type-system provides expressive polymorphism: variables can be overloaded, functions can be overloaded by argument and return types, tuple types, generic (polymorphic) functions and types (aggregates) can have multiple type parameters with assertion restrictions;
 in addition, C's multiple implicit type-conversions must be respected.
 This generality leads to internal complexity and correspondingly higher compilation cost directly related to type resolution.
@@ -24,5 +24,5 @@
 \end{enumerate}
 \VRef[Table]{t:SelectedFileByCompilerBuild} shows improvements for selected tests with accumulated reductions in compile time across each of the 5 fixes.
-To this day, the large reduction in compilation time significantly improves the development of the \CFA's runtime because of its frequent compilation cycles.
+The large reduction in compilation time significantly improves the development of the \CFA's runtime because of its frequent compilation cycles.
 
 \begin{table}[htb]
@@ -54,5 +54,5 @@
 Some of those problems arise from the newly introduced language features described in the previous chapter.
 In addition, fixing unexpected interactions within the type system has presented challenges.
-This chapter describes in detail the type-resolution rules currently in use and some major problems that have been identified.
+This chapter describes in detail the type-resolution rules currently in use and some major problems \PAB{I} have identified.
 Not all of those problems have immediate solutions, because fixing them may require redesigning parts of the \CFA type system at a larger scale, which correspondingly affects the language design.
 
@@ -69,5 +69,5 @@
 \begin{enumerate}[leftmargin=*]
 \item \textbf{Unsafe} cost representing a narrowing conversion of arithmetic types, \eg @int@ to @short@, and qualifier-dropping conversions for pointer and reference types.
-Narrowing conversions have the potential to lose (truncation) data.
+Narrowing conversions have the potential to lose (truncate) data.
 A programmer must decide if the computed data-range can safely be shorted in the smaller storage.
 Warnings for unsafe conversions are helpful.
@@ -86,5 +86,5 @@
 
 \item \textbf{Safe} cost representing a widening conversion \eg @short@ to @int@, qualifier-adding conversions for pointer and reference types, and value conversion for enumeration constants.
-Even when conversions are safe, the fewest conversions it ranked better, \eg @short@ to @int@ versus @short@ to @long int@.
+When all conversions are safe, closer conversions are ranked better, \eg @short@ to @int@ versus @short@ to @long int@.
 \begin{cfa}
 void f( long int p ); $\C[2.5in]{// 1}$
@@ -103,5 +103,5 @@
 
 \item \textbf{Specialization} cost counting the number of restrictions introduced by type assertions.
-Fewer restriction means fews parametric variables passed at the function call giving better performance.
+Fewer restriction means fewer parametric variables passed at the function call giving better performance.
 \begin{cfa}
 forall( T | { T ?+?( T, T ) } ) void f( T ); $\C[3.25in]{// 1}$
@@ -110,10 +110,10 @@
 \end{cfa}
 \end{enumerate}
-Cost tuples are compared by lexicographical order, from unsafe (highest) to specialization (lowest), with ties moving to the next lowest item.
+Cost tuples are compared in lexicographical order, from unsafe (highest) to specialization (lowest), with ties moving to the next lowest item.
 At a subexpression level, the lowest cost candidate for each result type is included as a possible interpretation of the expression;
 at the top level, all possible interpretations of different types are considered (generating a total ordering) and the overall lowest cost is selected as the final interpretation of the expression.
 Glen Ditchfield first proposed this costing model~\cite[\S~4.4.5]{Ditchfield92} to generate a resolution behaviour that is reasonable to C programmers based on existing conversions in the C programming language.
 This model carried over into the first implementation of the \CFA type-system by Richard Bilson~\cite[\S~2.2]{Bilson03}, and was extended but not redesigned by Aaron Moss~\cite[chap.~4]{Moss19}.
-Moss's work began to show problems with the underlying costing model;
+Moss's work began to show problems with the underlying cost model;
 these design issues are part of this work.
 
@@ -152,5 +152,5 @@
 Therefore, at each resolution step, the arguments are already given unique interpretations, so the ordering only needs to compare different sets of conversion targets (function parameter types) on the same set of input.
 
-In \CFA, trying to use such a system is problematic because of the presence of return-type overloading of functions and variable.
+\PAB{My conclusion} is that trying to use such a system in \CFA is problematic because of the presence of return-type overloading of functions and variables.
 Specifically, \CFA expression resolution considers multiple interpretations of argument subexpressions with different types, \eg:
 so it is possible that both the selected function and the set of arguments are different, and cannot be compared with a partial-ordering system.
@@ -165,5 +165,5 @@
 \end{quote}
 However, I was unable to generate any Ada example program that demonstrates this preference.
-In contrast, the \CFA overload resolution-system is at the other end of the spectrum, as it tries to order every legal interpretations of an expression and chooses the best one according to cost, occasionally giving unexpected results rather than an ambiguity.
+In contrast, the \CFA overload resolution-system is at the other end of the spectrum, as it tries to order all legal interpretations of an expression and chooses the best one according to cost, occasionally giving unexpected results rather than an ambiguity.
 
 Interestingly, the \CFA cost-based model can sometimes make expression resolution too permissive because it always attempts to select the lowest cost option, and only when there are multiple options tied at the lowest cost does it report the expression is ambiguous.
@@ -171,5 +171,5 @@
 Other than the case of multiple exact matches, where all have cost zero, incomparable candidates under a partial ordering can often have different expression costs since different kinds of implicit conversions are involved, resulting in seemingly arbitrary overload selections.
 
-There are currently at least three different situations where the polymorphic cost element of the cost model does not yield a candidate selection that is clearly justifiable, and one of them is straight up wrong.
+There are currently at least three different situations where the polymorphic cost element of the cost model does not yield a candidate selection that is justifiable, and one of them is clearly wrong.
 \begin{enumerate}[leftmargin=*]
 \item Polymorphic exact match versus non-polymorphic inexact match.
@@ -193,5 +193,5 @@
 \end{itemize}
 In this example, option 1 produces the prototype @void f( int )@, which gives an exact match and therefore takes priority.
-The \CC resolution rules effectively makes option 2 a specialization that only applies to type @long@ exactly,\footnote{\CC does have explicit template specializations, however they do not participate directly in overload resolution and can sometimes lead to unintuitive results.} while the current \CFA rules make option 2 apply for all integral types below @long@.
+The \CC resolution rules effectively make option 2 a specialization that only applies to type @long@ exactly,\footnote{\CC does have explicit template specializations, however they do not participate directly in overload resolution and can sometimes lead to unintuitive results.} while the current \CFA rules make option 2 apply for all integral types ranked lower than @long@ as well.
 This difference could be explained as compensating for \CFA polymorphic functions being separately compiled versus template inlining;
 hence, calling them requires passing type information and assertions increasing the runtime cost.
@@ -211,5 +211,5 @@
 Although it is true that both the sequence 1, 2 and 1, 3, 4 are increasingly more constrained on the argument types, option 2 is not comparable to either of option 3 or 4;
 they actually describe independent constraints on the two arguments.
-Specifically, option 2 says the two arguments must have the same type, while option 3 states the second argument must have type @int@, 
+Specifically, option 2 says the two arguments must have the same type, while option 3 states the second argument must have type @int@. 
 Because two constraints can independently be satisfied, neither should be considered a better match when trying to resolve a call to @f@ with argument types @(int, int)@;
 reporting such an expression as ambiguous is more appropriate.
@@ -227,14 +227,14 @@
 Passing a @pair@ variable to @f@
 \begin{cfa}
-pair p;
+pair(int, double) p;
 f( p );
 \end{cfa}
 gives a cost of 1 poly, 2 variable for the @pair@ overload, versus a cost of 1 poly, 1 variable for the unconstrained overload.
 Programmer expectation is to select option 1 because of the exact match, but the cost model selects 2;
-while either could work, the type system should select a call that meets expectation of say the call is ambiguous, forcing the programmer to mediate.
+it is not possible to write a specialization for @f@ that works on any pair type and gets selected by the type resolver as intended.
 As a result, simply counting the number of polymorphic type variables is no longer correct to order the function candidates as being more constrained.
 \end{enumerate}
 
-These inconsistencies are not easily solvable in the current cost-model, meaning the currently \CFA codebase has to workaround these defects.
+These inconsistencies are not easily solvable in the current cost-model, meaning that currently the \CFA codebase has to workaround these defects.
 One potential solution is to mix the conversion cost and \CC-like partial ordering of specializations.
 For example, observe that the first three elements (unsafe, polymorphic and safe conversions) in the \CFA cost-tuple are related to the argument/parameter types, while the other two elements (polymorphic variable and assertion counts) are properties of the function declaration.
@@ -352,5 +352,5 @@
 Here, the unsafe cost of signed to unsigned is factored into the ranking, so the safe conversion is selected over an unsafe one.
 Furthermore, an integral option is taken before considering a floating option.
-This model locally matches the C approach, but provides an ordering when there are many overloaded alternative.
+This model locally matches the C approach, but provides an ordering when there are many overload alternatives.
 However, as Moss pointed out overload resolution by total cost has problems, \eg handling cast expressions.
 \begin{cquote}
@@ -379,5 +379,5 @@
 if an expression has any legal interpretations as a C builtin operation, only the lowest cost one is kept, regardless of the result type.
 
-\VRef[Figure]{f:CFAArithmeticConversions} shows an alternative \CFA partial-order arithmetic-conversions graphically.
+\VRef[Figure]{f:CFAArithmeticConversions} shows \PAB{my} alternative \CFA partial-order arithmetic-conversions graphically.
 The idea here is to first look for the best integral alternative because integral calculations are exact and cheap.
 If no integral solution is found, than there are different rules to select among floating-point alternatives.
@@ -387,5 +387,5 @@
 \section{Type Unification}
 
-Type unification is the algorithm that assigns values to each (free) type parameters such that the types of the provided arguments and function parameters match.
+Type unification is the algorithm that assigns values to each (free) type parameter such that the types of the provided arguments and function parameters match.
 
 \CFA does not attempt to do any type \textit{inference} \see{\VRef{s:IntoTypeInferencing}}: it has no anonymous functions (\ie lambdas, commonly found in functional programming and also used in \CC and Java), and the variable types must all be explicitly defined (no auto typing).
@@ -408,5 +408,5 @@
 With the introduction of generic record types, the parameters must match exactly as well; currently there are no covariance or contravariance supported for the generics.
 
-One simplification was made to the \CFA language that makes modelling the type system easier: polymorphic function pointer types are no longer allowed.
+\PAB{I made} one simplification to the \CFA language that makes modelling the type system easier: polymorphic function pointer types are no longer allowed.
 The polymorphic function declarations themselves are still treated as function pointer types internally, however the change means that formal parameter types can no longer be polymorphic.
 Previously it was possible to write function prototypes such as 
@@ -418,5 +418,5 @@
 A function operates on the call-site arguments together with any local and global variables.
 When the function is polymorphic, the types are inferred at each call site.
-On each invocation, the types to be operate on are determined from the arguments provided, and therefore, there is no need to pass a polymorphic function pointer, which can take any type in principle.
+On each invocation, the types to be operated on are determined from the arguments provided, and therefore, there is no need to pass a polymorphic function pointer, which can take any type in principle.
 For example, consider a polymorphic function that takes one argument of type @T@ and polymorphic function pointer.
 \begin{cfa}
@@ -441,5 +441,5 @@
 The assertion set that needs to be resolved is just the declarations on the function prototype, which also simplifies the assertion satisfaction algorithm, which is discussed further in the next section.
 
-An implementation sketch stores type unification results in a type-environment data-structure, which represents all the type variables currently in scope as equivalent classes, together with their bound types and information such as whether the bound type is allowed to be opaque (\ie a forward declaration without definition in scope) and whether the bounds are allowed to be widened.
+\PAB{My} implementation sketch stores type unification results in a type-environment data-structure, which represents all the type variables currently in scope as equivalent classes, together with their bound types and information such as whether the bound type is allowed to be opaque (\ie a forward declaration without definition in scope) and whether the bounds are allowed to be widened.
 In the general approach commonly used in functional languages, the unification variables are given a lower bound and an upper bound to account for covariance and contravariance of types.
 \CFA does not implement any variance with its generic types and does not allow polymorphic function types, therefore no explicit upper bound is needed and one binding value for each equivalence class suffices.
@@ -469,5 +469,5 @@
 
 
-In previous versions of \CFA, this number was set at 4; as the compiler becomes more optimized and capable of handling more complex expressions in a reasonable amount of time, I have increased the limit to 8 and it does not lead to problems.
+In previous versions of \CFA, this number was set at 4; as the compiler has become more optimized and capable of handling more complex expressions in a reasonable amount of time, I have increased the limit to 8 and it has not led to problems.
 Only rarely is there a case where the infinite recursion produces an exponentially growing assertion set, causing minutes of time wasted before the limit is reached.
 Fortunately, it is very hard to generate this situation with realistic \CFA code, and the ones that have occurred have clear characteristics, which can be prevented by alternative approaches.
@@ -475,5 +475,5 @@
 One example is analysed in this section.
 
-While the assertion satisfaction problem in isolation looks like just another expression to resolve, its recursive nature makes some techniques for expression resolution no longer possible.
+\PAB{My analysis shows that} while the assertion satisfaction problem in isolation looks like just another expression to resolve, its recursive nature makes some techniques for expression resolution no longer possible.
 The most significant impact is that type unification has a side effect, namely editing the type environment (equivalence classes and bindings), which means if one expression has multiple associated assertions it is dependent, as the changes to the type environment must be compatible for all the assertions to be resolved.
 Particularly, if one assertion parameter can be resolved in multiple different ways, all of the results need to be checked to make sure the change to type variable bindings are compatible with other assertions to be resolved.
@@ -481,5 +481,5 @@
 In many cases, these problems can be avoided by examining other assertions that provide insight on the desired type binding: if one assertion parameter can only be matched by a unique option, the type bindings can be updated confidently without the need for backtracking.
 
-The Moss algorithm currently used in \CFA was developed using a simplified type-simulator that capture most of \CFA type-system features.
+The Moss algorithm currently used in \CFA was developed using a simplified type system that captures most of \CFA's type system features.
 The simulation results were then ported back to the actual language.
 The simulator used a mix of breadth- and depth-first search in a staged approach.
@@ -494,5 +494,5 @@
 If any new assertions are introduced by the selected candidates, the algorithm is applied recursively, until there are none pending resolution or the recursion limit is reached, which results in a failure.
 
-However, in practice the efficiency of this algorithm can be sensitive to the order of resolving assertions.
+However, \PAB{I identify that} in practice the efficiency of this algorithm can be sensitive to the order of resolving assertions.
 Suppose an unbound type variable @T@ appears in two assertions:
 \begin{cfa}
@@ -517,8 +517,8 @@
 A type variable introduced by the @forall@ clause of function declaration can appear in parameter types, return types and assertion variables.
 If it appears in parameter types, it can be bound when matching the arguments to parameters at the call site.
-If it only appears in the return type, it can be eventually be determined from the call-site context.
+If it only appears in the return type, it can be eventually determined from the call-site context.
 Currently, type resolution cannot do enough return-type inferencing while performing eager assertion resolution: the return type information is unknown before the parent expression is resolved, unless the expression is an initialization context where the variable type is known.
 By delaying the assertion resolution until the return type becomes known, this problem can be circumvented.
-The truly problematic case occurs if a type variable does not appear in either of the parameter or return types and only appears in assertions or variables (associate types).
+The truly problematic case occurs if a type variable does not appear in either of the parameter or return types and only appears in assertions or variables (\newterm{associate types}).
 \begin{cfa}
 forall( T | { void foo( @T@ ) } ) int f( float ) {
@@ -526,6 +526,6 @@
 }
 \end{cfa}
-This case is rare so forcing every type variable to appear at least once in parameter or return types limits does not limit the expressiveness of \CFA type system to a significant extent.
-The next section presents a proposal for including type declarations in traits rather than having all type variables appear in the trait parameter list, which is provides equivalent functionality to an unbound type parameter in assertion variables, and also addresses some of the variable cost issue discussed in \VRef{s:ExpressionCostModel}.
+This case is rare so forcing every type variable to appear at least once in parameter or return types does not limit the expressiveness of \CFA type system to a significant extent.
+\VRef{s:AssociatedTypes} presents a proposal for including type declarations in traits rather than having all type variables appear in the trait parameter list, which provides equivalent functionality to an unbound type parameter in assertion variables, and also addresses some of the variable cost issue discussed in \VRef{s:ExpressionCostModel}.
 
 
@@ -535,5 +535,5 @@
 Based on the experiment results, this approach can improve the performance of expression resolution in general, and sometimes allow difficult instances of assertion resolution problems to be solved that are otherwise infeasible, \eg when the resolution encounters an infinite loop.
 
-The tricky problem in implementing this approach is that the resolution algorithm has side effects, namely modifying the type bindings in the environment.
+\PAB{I identify that} the tricky problem in implementing this approach is that the resolution algorithm has side effects, namely modifying the type bindings in the environment.
 If the modifications are cached, \ie the results that cause the type bindings to be modified, it is also necessary to store the changes to type bindings, too.
 Furthermore, in cases where multiple candidates can be used to satisfy one assertion parameter, all of them must be cached including those that are not eventually selected, since the side effect can produce different results depending on the context.
@@ -583,5 +583,5 @@
 However, the implementation of the type environment is simplified;
 it only stores a tentative type binding with a flag indicating whether \emph{widening} is possible for an equivalence class of type variables. 
-Formally speaking, this means the type environment used in \CFA is only capable of representing \emph{lower-bound} constraints.
+Formally speaking, \PAB{I concluded} the type environment used in \CFA is only capable of representing \emph{lower-bound} constraints.
 This simplification works most of the time, given the following properties of the existing \CFA type system and the resolution algorithms:
 \begin{enumerate}
@@ -599,5 +599,5 @@
 \end{enumerate}
 
-\CFA does attempt to incorporate upstream type information propagated from variable a declaration with initializer, since the type of the variable being initialized is known.
+\CFA does attempt to incorporate upstream type information propagated from a variable declaration with initializer, since the type of the variable being initialized is known.
 However, the current type-environment representation is flawed in handling such type inferencing, when the return type in the initializer is polymorphic.
 Currently, an inefficient workaround is performed to create the necessary effect.
Index: doc/theses/fangren_yu_MMath/uw-ethesis.bib
===================================================================
--- doc/theses/fangren_yu_MMath/uw-ethesis.bib	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/fangren_yu_MMath/uw-ethesis.bib	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -2,2 +2,19 @@
 % For use with BibTeX
 
+@misc{OperOverloading,
+    contributer	= {pabuhr@plg},
+    key		= {Operator Overloading},
+    title	= {Operator Overloading},
+    author	= {{WikipediA}},
+    howpublished= {\url{https://en.wikipedia.org/wiki/Operator_overloading}},
+    year	= 2025,
+}
+
+@misc{FuncOverloading,
+    contributer	= {pabuhr@plg},
+    key		= {Function Overloading},
+    title	= {Function Overloading},
+    author	= {{WikipediA}},
+    howpublished= {\url{https://en.wikipedia.org/wiki/Function_overloading}},
+    year	= 2025,
+}
Index: doc/theses/fangren_yu_MMath/uw-ethesis.tex
===================================================================
--- doc/theses/fangren_yu_MMath/uw-ethesis.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/fangren_yu_MMath/uw-ethesis.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -100,5 +100,5 @@
 \lstnewenvironment{ada}[1][]{\lstset{language=Ada,escapechar=\$,moredelim=**[is][\color{red}]{@}{@},}\lstset{#1}}{}
 
-\newcommand{\PAB}[1]{{\color{red}PAB: #1}}
+\newcommand{\PAB}[1]{{\color{magenta}#1}}
 \newcommand{\newtermFont}{\emph}
 \newcommand{\Newterm}[1]{\newtermFont{#1}}
Index: doc/theses/mike_brooks_MMath/Makefile
===================================================================
--- doc/theses/mike_brooks_MMath/Makefile	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/Makefile	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -13,11 +13,7 @@
 TeXSRC = ${wildcard *.tex}
 PicSRC = ${notdir ${wildcard ${Pictures}/*.png}} ${notdir ${wildcard ${Pictures}/*.fig}}
-PicSRC := ${PicSRC:.fig=.pdf}		# substitute ".fig" with ".pdf"
-GraphSRC_OLD = ${notdir ${wildcard ${Pictures}/*.dat}}
-GraphSRC_OLD := ${GraphSRC_OLD:.dat=.pdf}		# substitute ".dat" with ".pdf"
-PlotINPUTS = ${wildcard ${Plots}/*.gp} ${wildcard ${Plots}/*.py}
-PlotINPUTS := ${addsuffix .INPUTS,${PlotINPUTS}}
+PicSRC := ${PicSRC:.fig=.pdf}			# substitute ".fig" with ".pdf"
 PlotSRC = ${notdir ${wildcard ${Plots}/*.gp}}
-PlotSRC := ${addprefix ${Build}/plot-,${PlotSRC:.gp=.pdf}}		# substitute ".gp" with ".pdf"
+PlotSRC := ${addprefix ${Build}/plot-,${PlotSRC:.gp=.pdf}} # substitute ".gp" with ".pdf"
 DemoPgmSRC = ${notdir ${wildcard ${Programs}/*-demo.cfa}}
 PgmSRC = ${notdir ${wildcard ${Programs}/*}}
@@ -49,5 +45,5 @@
 # Rules and Recipes
 
-.PHONY : all clean			# not file names
+.PHONY : all clean				# not file names
 .SECONDARY:
 #.PRECIOUS : ${Build}/%				# don't delete intermediates
@@ -61,5 +57,5 @@
 # File Dependencies
 
-${DOCUMENT}: ${TeXSRC} $(RunPgmOut) ${DemoPgmOut} ${GraphSRC_OLD} ${PlotSRC} ${PicSRC} ${BibSRC} ${BibRep}/pl.bib ${LaTMac}/common.tex Makefile | ${Build}
+${DOCUMENT}: ${TeXSRC} $(RunPgmOut) ${DemoPgmOut} ${PlotSRC} ${PicSRC} ${BibSRC} ${BibRep}/pl.bib ${LaTMac}/common.tex Makefile | ${Build}
 	echo ${PicSRC}
 	echo ${GraphSRC_OLD}
@@ -82,5 +78,5 @@
 	${CFA} $< -o $@
 
-${Build}/%: ${Programs}/%.run.cfa | ${Build} # cfa cannot handle pipe
+${Build}/%: ${Programs}/%.run.cfa | ${Build}	# cfa cannot handle pipe
 	sed -f ${Programs}/sedcmd $< > ${Build}/tmp.cfa; ${CFA} ${Build}/tmp.cfa -o $@
 
@@ -94,23 +90,10 @@
 	$< > $@
 
-string-graph-peq-sharing.pdf: string-graph-peq-sharing.dat plot-peq-sharing.gp | ${Build}
-	gnuplot plot-peq-sharing.gp
-
-string-graph-pta-sharing.pdf: string-graph-pta-sharing.dat plot-pta-sharing.gp | ${Build}
-	gnuplot plot-pta-sharing.gp
-
-string-graph-pbv.pdf: string-graph-pbv.dat plot-pbv.gp | ${Build}
-	gnuplot plot-pbv.gp
-
-string-graph-allocn.pdf: string-graph-allocn.dat plot-allocn.gp | ${Build}
-	gnuplot plot-allocn.gp
-
 %.pdf: %.fig | ${Build}
 	fig2dev -L pdf $< > ${Build}/$@
 
--include $(Plots)/string-peq-cppemu.d
+-include $(Plots)/*.d
 
 ${Build}/plot-%.dat: ${Plots}/%.py ${Plots}/%.py.INPUTS | ${Build}
-	echo ${PlotINPUTS}	
 	python3 $< > $@
 
Index: doc/theses/mike_brooks_MMath/array.tex
===================================================================
--- doc/theses/mike_brooks_MMath/array.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/array.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -17,19 +17,17 @@
 though using a new style of generic parameter.
 \begin{cfa}
-@array( float, 99 )@ x;					$\C[2.75in]{// x contains 99 floats}$
-\end{cfa}
-Here, the arguments to the @array@ type are @float@ (element type) and @99@ (length).
-When this type is used as a function parameter, the type-system requires that a call's argument is a perfect match.
+@array( float, 99 )@ x;					$\C[2.5in]{// x contains 99 floats}$
+\end{cfa}
+Here, the arguments to the @array@ type are @float@ (element type) and @99@ (dimension).
+When this type is used as a function parameter, the type-system requires the argument is a perfect match.
 \begin{cfa}
 void f( @array( float, 42 )@ & p ) {}	$\C{// p accepts 42 floats}$
 f( x );									$\C{// statically rejected: type lengths are different, 99 != 42}$
-
 test2.cfa:3:1 error: Invalid application of existing declaration(s) in expression.
 Applying untyped:  Name: f ... to:  Name: x
 \end{cfa}
-Here, the function @f@'s parameter @p@ is declared with length 42.
-However, the call @f( x )@ is invalid, because @x@'s length is @99@, which does not match @42@.
-
-A function declaration can be polymorphic over these @array@ arguments by using the \CFA @forall@ declaration prefix.
+Function @f@'s parameter expects an array with dimension 42, but the argument dimension 99 does not match.
+
+A function can be polymorphic over @array@ arguments using the \CFA @forall@ declaration prefix.
 \begin{cfa}
 forall( T, @[N]@ )
@@ -38,21 +36,19 @@
 }
 g( x, 0 );								$\C{// T is float, N is 99, dynamic subscript check succeeds}$
-g( x, 1000 );							$\C{// T is float, N is 99, dynamic subscript check fails}\CRT$
-
+g( x, 1000 );							$\C{// T is float, N is 99, dynamic subscript check fails}$
 Cforall Runtime error: subscript 1000 exceeds dimension range [0,99) $for$ array 0x555555558020.
 \end{cfa}
-Function @g@ takes an arbitrary type parameter @T@ and a \emph{dimension parameter} @N@.
-A dimension parameter represents a to-be-determined count of elements, managed by the type system.
-The call @g( x, 0 )@ is valid because @g@ accepts any length of array, where the type system infers @float@ for @T@ and length @99@ for @N@.
-Inferring values for @T@ and @N@ is implicit.
-Furthermore, in this case, the runtime subscript @x[0]@ (parameter @i@ being @0@) in @g@ is valid because 0 is in the dimension range $[0,99)$ of argument @x@.
-However, the call @g( x, 1000 )@ is also accepted through compile time;
-however, this case's subscript, @x[1000]@, generates an error, because @1000@ is outside the dimension range $[0,99)$ of argument @x@.
+Function @g@ takes an arbitrary type parameter @T@ and an unsigned integer \emph{dimension} @N@.
+The dimension represents a to-be-determined number of elements, managed by the type system, where 0 represents an empty array.
+The type system implicitly infers @float@ for @T@ and @99@ for @N@.
+Furthermore, the runtime subscript @x[0]@ (parameter @i@ being @0@) in @g@ is valid because 0 is in the dimension range $[0,99)$ for argument @x@.
+The call @g( x, 1000 )@ is also accepted at compile time.
+However, the subscript, @x[1000]@, generates a runtime error, because @1000@ is outside the dimension range $[0,99)$ of argument @x@.
 In general, the @forall( ..., [N] )@ participates in the user-relevant declaration of the name @N@, which becomes usable in parameter/return declarations and within a function.
 The syntactic form is chosen to parallel other @forall@ forms:
 \begin{cfa}
-forall( @[N]@ ) ...	$\C[1.5in]{// dimension}$
-forall( T ) ...		$\C{// value datatype (formerly, "otype")}$
-forall( T & ) ...	$\C{// opaque datatype (formerly, "dtype")}\CRT$
+forall( @[N]@ ) ...	$\C{// dimension}$
+forall( T ) ...		$\C{// value datatype}$
+forall( T & ) ...	$\C{// opaque datatype}$
 \end{cfa}
 % The notation @array(thing, N)@ is a single-dimensional case, giving a generic type instance.
@@ -63,26 +59,24 @@
 \begin{cfa}
 forall( [N] )
-void declDemo( ... ) {
-	float x1[N];						$\C{// built-in type ("C array")}$
-	array(float, N) x2;					$\C{// type from library}$
-}
-\end{cfa}
-Both of the locally-declared array variables, @x1@ and @x2@, have 42 elements, each element being a @float@.
-The two variables have identical size and layout; they both encapsulate 42-float stack allocations, with no additional ``bookkeeping'' allocations or headers.
+void f( ... ) {
+	float x1[@N@];						$\C{// C array, no subscript checking}$
+	array(float, N) x2;					$\C{// \CFA array, subscript checking}\CRT$
+}
+\end{cfa}
+Both of the stack declared array variables, @x1@ and @x2@, have 42 elements, each element being a @float@.
+The two variables have identical size and layout, with no additional ``bookkeeping'' allocations or headers.
+The C array, @x1@, has no subscript checking, while \CFA array, @x2@, does.
 Providing this explicit generic approach requires a significant extension to the \CFA type system to support a full-feature, safe, efficient (space and time) array-type, which forms the foundation for more complex array forms in \CFA.
-In all following discussion, ``C array'' means the types like that of @x@ and ``\CFA array'' means the standard-library @array@ type (instantiations), like the type of @x2@.
-
-Admittedly, the @array@ library type for @x2@ is syntactically different from its C counterpart.
-A future goal (TODO xref) is to provide the new @array@ features with syntax approaching C's (declaration style of @x1@).
+In all following discussion, ``C array'' means types like @x1@ and ``\CFA array'' means types like @x2@.
+
+A future goal is to provide the new @array@ features with syntax approaching C's (declaration style of @x1@).
 Then, the library @array@ type could be removed, giving \CFA a largely uniform array type.
-At present, the C-syntax @array@ is only partially supported, so the generic @array@ is used exclusively in the thesis;
-feature support and C compatibility are revisited in Section ? TODO.
+At present, the C-syntax @array@ is only partially supported, so the generic @array@ is used exclusively in the thesis.
 
 My contributions in this chapter are:
-\begin{enumerate}
+\begin{enumerate}[leftmargin=*]
 \item A type system enhancement that lets polymorphic functions and generic types be parameterized by a numeric value: @forall( [N] )@.
-\item Provide a length-checked array-type in the \CFA standard library, where the array's length is statically managed and dynamically valued.
+\item Provide a dimension/subscript-checked array-type in the \CFA standard library, where the array's length is statically managed and dynamically valued.
 \item Provide argument/parameter passing safety for arrays and subscript safety.
-\item TODO: general parking...
 \item Identify the interesting specific abilities available by the new @array@ type.
 \item Where there is a gap concerning this feature's readiness for prime-time, identification of specific workable improvements that are likely to close the gap.
@@ -90,8 +84,8 @@
 
 
+\begin{comment}
 \section{Dependent Typing}
 
-General dependent typing allows the type system to encode arbitrary predicates (\eg behavioural specifications for functions),
-which is an anti-goal for my work.
+General dependent typing allows a type system to encode arbitrary predicates, \eg behavioural specifications for functions, which is an anti-goal for my work.
 Firstly, this application is strongly associated with pure functional languages,
 where a characterization of the return value (giving it a precise type, generally dependent upon the parameters)
@@ -101,17 +95,17 @@
 Secondly, TODO: bash Rust.
 TODO: cite the crap out of these claims.
+\end{comment}
 
 
 \section{Features Added}
 
-This section shows more about using the \CFA array and dimension parameters, demonstrating their syntax and semantics by way of motivating examples.
+This section shows more about using the \CFA array and dimension parameters, demonstrating syntax and semantics by way of motivating examples.
 As stated, the core capability of the new array is tracking all dimensions within the type system, where dynamic dimensions are represented using type variables.
 
 By declaring type variables at the front of object declarations, an array dimension is lexically referenceable where it is needed.
-For example, a declaration can share one length, @N@, among a pair of parameters and the return,
-meaning that it requires both input arrays to be of the same length, and guarantees that the result is of that length as well.
+For example, a declaration can share one length, @N@, among a pair of parameters and return type, meaning the input arrays and return array are the same length.
 \lstinput{10-17}{hello-array.cfa}
 Function @f@ does a pointwise comparison of its two input arrays, checking if each pair of numbers is within half a percent of each other, returning the answers in a newly allocated @bool@ array.
-The dynamic allocation of the @ret@ array, by the library @alloc@ function,
+The dynamic allocation of the @ret@ array uses the library @alloc@ function,
 \begin{cfa}
 forall( T & | sized(T) )
@@ -120,6 +114,6 @@
 }
 \end{cfa}
-uses the parameterized dimension information implicitly within its @sizeof@ determination, and casts the return type.
-Note that @alloc@ only sees one whole type for its @T@ (which is @f@'s @array(bool, N)@); this type's size is a computation based on @N@.
+which captures the parameterized dimension information implicitly within its @sizeof@ determination, and casts the return type.
+Note, @alloc@ only sees the whole type for its @T@, @array(bool, N)@, where this type's size is a computation based on @N@.
 This example illustrates how the new @array@ type plugs into existing \CFA behaviour by implementing necessary \emph{sized} assertions needed by other types.
 (\emph{sized} implies a concrete \vs abstract type with a runtime-available size, exposed as @sizeof@.)
@@ -129,9 +123,9 @@
 \lstinput{30-43}{hello-array.cfa}
 \lstinput{45-48}{hello-array.cfa}
-\caption{\lstinline{f} Harness}
-\label{f:fHarness}
+\caption{\lstinline{f} Example}
+\label{f:fExample}
 \end{figure}
 
-\VRef[Figure]{f:fHarness} shows a harness that uses function @f@, illustrating how dynamic values are fed into the @array@ type.
+\VRef[Figure]{f:fExample} shows an example using function @f@, illustrating how dynamic values are fed into the @array@ type.
 Here, the dimension of arrays @x@, @y@, and @result@ is specified from a command-line value, @dim@, and these arrays are allocated on the stack.
 Then the @x@ array is initialized with decreasing values, and the @y@ array with amounts offset by constant @0.005@, giving relative differences within tolerance initially and diverging for later values.
@@ -144,9 +138,9 @@
 
 In summary:
-\begin{itemize}
+\begin{itemize}[leftmargin=*]
 \item
 @[N]@ within a @forall@ declares the type variable @N@ to be a managed length.
 \item
-@N@ can be used an expression of type @size_t@ within the declared function body.
+@N@ can be used in an expression with type @size_t@ within the function body.
 \item
 The value of an @N@-expression is the acquired length, derived from the usage site, \ie generic declaration or function call.
@@ -158,10 +152,10 @@
 \begin{enumerate}[leftmargin=*]
 \item
-The \CC template @N@ can only be compile-time value, while the \CFA @N@ may be a runtime value.
-% agreed, though already said
+The \CC template @N@ can only be a compile-time value, while the \CFA @N@ may be a runtime value.
 \item
 \CC does not allow a template function to be nested, while \CFA lets its polymorphic functions to be nested.
-% why is this important?
-\item
+Hence, \CC precludes a simple form of information hiding.
+\item
+\label{p:DimensionPassing}
 The \CC template @N@ must be passed explicitly at the call, unless @N@ has a default value, even when \CC can deduct the type of @T@.
 The \CFA @N@ is part of the array type and passed implicitly at the call.
@@ -169,5 +163,5 @@
 % mycode/arrr/thesis-examples/check-peter/cs-cpp.cpp, v2
 \item
-\CC cannot have an array of references, but can have an array of pointers.
+\CC cannot have an array of references, but can have an array of @const@ pointers.
 \CC has a (mistaken) belief that references are not objects, but pointers are objects.
 In the \CC example, the arrays fall back on C arrays, which have a duality with references with respect to automatic dereferencing.
@@ -178,9 +172,10 @@
 % https://stackoverflow.com/questions/922360/why-cant-i-make-a-vector-of-references
 \item
+\label{p:ArrayCopy}
 C/\CC arrays cannot be copied, while \CFA arrays can be copied, making them a first-class object (although array copy is often avoided for efficiency).
 % fixed by comparing to std::array
 % mycode/arrr/thesis-examples/check-peter/cs-cpp.cpp, v10
 \end{enumerate}
-TODO: settle Mike's concerns with this comparison (perhaps, remove)
+The \CC template @array@ type mitigates points \VRef[]{p:DimensionPassing} and \VRef[]{p:ArrayCopy}, but it is also trying to accomplish a similar mechanism to \CFA @array@.
 
 \begin{figure}
@@ -226,5 +221,5 @@
 Just as the first example in \VRef[Section]{s:ArrayIntro} shows a compile-time rejection of a length mismatch,
 so are length mismatches stopped when they involve dimension parameters.
-While \VRef[Figure]{f:fHarness} shows successfully calling a function @f@ expecting two arrays of the same length,
+While \VRef[Figure]{f:fExample} shows successfully calling a function @f@ expecting two arrays of the same length,
 \begin{cfa}
 array( bool, N ) & f( array( float, N ) &, array( float, N ) & );
@@ -246,14 +241,20 @@
 The same argument safety and the associated implicit communication of array length occurs.
 Preexisting \CFA allowed aggregate types to be generalized with type parameters, enabling parameterizing of element types.
-Now, \CFA also allows parameterizing them by length.
-Doing so gives a refinement of C's ``flexible array member'' pattern[TODO: cite ARM 6.7.2.1 pp18]\cite{arr:gnu-flex-mbr}.
-While a C flexible array member can only occur at the end of the enclosing structure,
-\CFA allows length-parameterized array members to be nested at arbitrary locations.
-This flexibility, in turn, allows for multiple array members.
+This has been extended to allow parameterizing by dimension.
+Doing so gives a refinement of C's ``flexible array member''~\cite[\S~6.7.2.1.18]{C11}.
+\begin{cfa}
+struct S {
+	...
+	double d []; // incomplete array type => flexible array member
+} * s = malloc( sizeof( struct S ) + sizeof( double [10] ) );
+\end{cfa}
+which creates a VLA of size 10 @double@s at the end of the structure.
+A C flexible array member can only occur at the end of a structure;
+\CFA allows length-parameterized array members to be nested at arbitrary locations, with intervening member declarations.
 \lstinput{10-15}{hello-accordion.cfa}
 The structure has course- and student-level metatdata (their respective field names) and a position-based preferences' matrix.
 Its layout has the starting offset of @studentIds@ varying according to the generic parameter @C@, and the offset of @preferences@ varying according to both generic parameters.
 
-\VRef[Figure]{f:checkHarness} shows a program main using @School@ and results with different array sizes.
+\VRef[Figure]{f:checkExample} shows a program main using @School@ and results with different array sizes.
 The @school@ variable holds many students' course-preference forms.
 It is on the stack and its initialization does not use any casting or size arithmetic.
@@ -285,11 +286,11 @@
 \end{cquote}
 
-\caption{\lstinline{School} harness, input and output}
-\label{f:checkHarness}
+\caption{\lstinline{School} Example, Input and Output}
+\label{f:checkExample}
 \end{figure}
 
 When a function operates on a @School@ structure, the type system handles its memory layout transparently.
 \lstinput{30-37}{hello-accordion.cfa}
-In the example, this @getPref@ function answers, for the student at position @is@, what is the position of its @pref@\textsuperscript{th}-favoured class?
+In the example, function @getPref@ returns, for the student at position @is@, what is the position of their @pref@\textsuperscript{th}-favoured class?
 
 
@@ -324,5 +325,5 @@
 
 The repurposed heavy equipment is
-\begin{itemize}
+\begin{itemize}[leftmargin=*]
 \item
 	Resolver provided values for a used declaration's type-system variables,
@@ -348,10 +349,9 @@
 int main() {
 	thing( @10@ ) x;  f( x );  $\C{// prints 10, [4]}$
-	thing( 100 ) y;  f( y );  $\C{// prints 100}$
-	return 0;
+	thing( @100@ ) y;  f( y );  $\C{// prints 100}$
 }
 \end{cfa}
 This example has:
-\begin{enumerate}
+\begin{enumerate}[leftmargin=*]
 \item
 	The symbol @N@ being declared as a type variable (a variable of the type system).
@@ -369,9 +369,9 @@
 Because the box pass handles a type's size as its main datum, the encoding is chosen to use it.
 The production and recovery are then straightforward.
-\begin{itemize}
+\begin{itemize}[leftmargin=*]
 \item
 	The value $n$ is encoded as a type whose size is $n$.
 \item
-	Given a dimension expression $e$, produce type @char[@$e$@]@ to represent it.
+	Given a dimension expression $e$, produce an internal type @char[@$e$@]@ to represent it.
 	If $e$ evaluates to $n$ then the encoded type has size $n$.
 \item
@@ -389,14 +389,13 @@
 }
 int main() {
-	thing( char[@10@] ) x;  f( x );  $\C{// prints 10, [4]}$
-	thing( char[100] ) y;  f( y );  $\C{// prints 100}$
-	return 0;
+	thing( @char[10]@ ) x;  f( x );  $\C{// prints 10, [4]}$
+	thing( @char[100]@ ) y;  f( y );  $\C{// prints 100}$
 }
 \end{cfa}
 Observe:
-\begin{enumerate}
+\begin{enumerate}[leftmargin=*]
 \item
 	@N@ is now declared to be a type.
-	It is declared to be \emph{sized} (by the @*@), meaning that the box pass shall do its @sizeof(N)@--@__sizeof_N@ extra parameter and expression translation.
+	It is declared to be \emph{sized} (by the @*@), meaning that the box pass shall do its @sizeof(N)@$\rightarrow$@__sizeof_N@ extra parameter and expression translation.
 \item
 	@thing(N)@ is a type; the argument to the generic @thing@ is a type (type variable).
@@ -404,5 +403,5 @@
 	The @sout...@ expression (being an application of the @?|?@ operator) has a second argument that is an ordinary expression.
 \item
-	The type of variable @x@ is another @thing(-)@ type; the argument to the generic @thing@ is a type (array type of bytes, @char@).
+	The type of variable @x@ is another @thing(-)@ type; the argument to the generic @thing@ is a type (array type of bytes, @char[@$e$@]@).
 \end{enumerate}
 
@@ -415,9 +414,8 @@
 	struct __conc_thing_10 {} x;  f( @10@, &x );  $\C{// prints 10, [4]}$
 	struct __conc_thing_100 {} y;  f( @100@, &y );  $\C{// prints 100}$
-	return 0;
 }
 \end{cfa}
 Observe:
-\begin{enumerate}
+\begin{enumerate}[leftmargin=*]
 \item
 	The type parameter @N@ is gone.
@@ -427,5 +425,5 @@
 	The @sout...@ expression (being an application of the @?|?@ operator) has a regular variable (parameter) usage for its second argument.
 \item
-	Information about the particular @thing@ instantiation (value 10) has moved, from the type, to a regular function-call argument.
+	Information about the particular @thing@ instantiation (value 10) is moved, from the type, to a regular function-call argument.
 \end{enumerate}
 At the end of the desugaring and downstream processing, the original C idiom of ``pass both a length parameter and a pointer'' has been reconstructed.
@@ -433,6 +431,6 @@
 The compiler's action produces the more complex form, which if handwritten, would be error-prone.
 
-Back at the compiler front end, the parsing changes AST schema extensions and validation rules for enabling the sugared user input.
-\begin{itemize}
+At the compiler front end, the parsing changes AST schema extensions and validation rules for enabling the sugared user input.
+\begin{itemize}[leftmargin=*]
 \item
 	Recognize the form @[N]@ as a type-variable declaration within a @forall@.
@@ -440,5 +438,5 @@
 	Have the new brand of type-variable, \emph{Dimension}, in the AST form of a type-variable, to represent one parsed from @[-]@.
 \item
-	Allow a type variable to occur in an expression.  Validate (after parsing) that only dimension-branded type variables are used here.
+	Allow a type variable to occur in an expression.  Validate (after parsing) that only dimension-branded type-variables are used here.
 \item
 	Allow an expression to occur in type-argument position.  Brand the resulting type argument as a dimension.
@@ -457,202 +455,93 @@
 \label{s:ArrayTypingC}
 
-Essential in giving a guarantee of accurate length is the compiler's ability
-to reject a program that presumes to mishandle length.
-By contrast, most discussion so far dealt with communicating length,
-from one party who knows it, to another who is willing to work with any given length.
-For scenarios where the concern is a mishandled length,
-the interaction is between two parties who both claim to know something about it.
-Such a scenario occurs in this pure C fragment, which today's C compilers accept:
-\begin{cfa}
-int n = @42@;
-float x[n];
-float (*xp)[@999@] = &x;
+Essential in giving a guarantee of accurate length is the compiler's ability to reject a program that presumes to mishandle length.
+By contrast, most discussion so far deals with communicating length, from one party who knows it, to another willing to work with any given length.
+For scenarios where the concern is a mishandled length, the interaction is between two parties who both claim to know something about it.
+
+C and \CFA can check when working with two static values.
+\begin{cfa}
+enum { n = 42 };
+float x[@n@];   // or just 42
+float (*xp1)[@42@] = &x;    // accept
+float (*xp2)[@999@] = &x;   // reject
+warning: initialization of 'float (*)[999]' from incompatible pointer type 'float (*)[42]'
+\end{cfa}
+When a variable is involved, C and \CFA take two different approaches.
+Today's C compilers accept the following without warning.
+\begin{cfa}
+static const int n = 42;
+float x[@n@];
+float (* xp)[@999@] = &x; $\C{// should be static rejection here}$
 (*xp)[@500@]; $\C{// in "bound"?}$
 \end{cfa}
 Here, the array @x@ has length 42, while a pointer to it (@xp@) claims length 999.
-So, while the subscript of @xp@ at position 500 is out of bound of its referent @x@,
+So, while the subscript of @xp@ at position 500 is out of bound with its referent @x@,
 the access appears in-bound of the type information available on @xp@.
-Truly, length is being mishandled in the previous step,
-where the type-carried length information on @x@ is not compatible with that of @xp@.
-
-The \CFA new-array rejects the analogous case:
-\begin{cfa}
-int n = @42@;
-array(float, n) x;
-array(float, 999) * xp = x; $\C{// static rejection here}$
-(*xp)[@500@]; $\C{// runtime check vs len 999}$
-\end{cfa}
-The way the \CFA array is implemented, the type analysis of this case reduces to a case similar to the earlier C version.
+In fact, length is being mishandled in the previous step, where the type-carried length information on @x@ is not compatible with that of @xp@.
+
+In \CFA, I choose to reject this C example at the point where the type-carried length information on @x@ is not compatible with that of @xp@, and correspondingly, its array counterpart at the same location:
+\begin{cfa}
+static const int n = 42;
+array( float, @n@ ) x;
+array( float, @999@ ) * xp = &x; $\C{// static rejection here}$
+(*xp)[@500@]; $\C{// runtime check passes}$
+\end{cfa}
+The way the \CFA array is implemented, the type analysis for this case reduces to a case similar to the earlier C version.
 The \CFA compiler's compatibility analysis proceeds as:
 \begin{itemize}[parsep=0pt]
 \item
-	Is @array(float, 999)@ type-compatible with @array(float, n)@?
-\item
-	Is @arrayX(float, char[999])@ type-compatible with @arrayX(float, char[n])@?\footnote{
-		Here, \lstinline{arrayX} represents the type that results
-		from desugaring the \lstinline{array} type
-		into a type whose generic parameters are all types.
-		This presentation elides the noisy fact that
-		\lstinline{array} is actually a macro for something bigger;
-		the reduction to \lstinline{char[-]} still proceeds as sketched.}
-\item
-	Is @char[999]@ type-compatible with @char[n]@?
+	Is @array( float, 999 )@ type-compatible with @array( float, n )@?
+\item
+	Is desugared @array( float, char[999] )@ type-compatible with desugared @array( float, char[n] )@?
+%		\footnote{
+%		Here, \lstinline{arrayX} represents the type that results from desugaring the \lstinline{array} type into a type whose generic parameters are all types.
+%		This presentation elides the noisy fact that \lstinline{array} is actually a macro for something bigger;
+%		the reduction to \lstinline{char [-]} still proceeds as sketched.}
+\item
+	Is internal type @char[999]@ type-compatible with internal type @char[n]@?
 \end{itemize}
-To achieve the necessary \CFA rejections meant rejecting the corresponding C case, which is not backward compatible.
-There are two complementary mitigations for this incompatibility.
-
-First, a simple recourse is available to a programmer who intends to proceed
-with the statically unsound assignment.
-This situation might arise if @n@ were known to be 999,
-rather than 42, as in the introductory examples.
-The programmer can add a cast in the \CFA code.
-\begin{cfa}
-xp = @(float (*)[999])@ &x;
-\end{cfa}
-This addition causes \CFA to accept, because now, the programmer has accepted blame.
-This addition is benign in plain C, because the cast is valid, just unnecessary there.
-Moreover, the addition can even be seen as appropriate ``eye candy,''
-marking where the unchecked length knowledge is used.
-Therefore, a program being onboarded to \CFA can receive a simple upgrade,
-to satisfy the \CFA rules (and arguably become clearer),
-without giving up its validity to a plain C compiler.
-
-Second, the incompatibility only affects types like pointer-to-array,
-which are are infrequently used in C.
-The more common C idiom for aliasing an array is to use a pointer-to-first-element type,
-which does not participate in the \CFA array's length checking.\footnote{
+The answer is false because, in general, the value of @n@ is unknown at compile time, and hence, an error is raised.
+For safety, it makes sense to reject the corresponding C case, which is a non-backwards compatible change.
+There are two mitigations for this incompatibility.
+
+First, a simple recourse is available in a situation where @n@ is \emph{known} to be 999 by using a cast.
+\begin{cfa}
+float (* xp)[999] = @(float (*)[999])@&x;
+\end{cfa}
+The cast means the programmer has accepted blame.
+Moreover, the cast is ``eye candy'' marking where the unchecked length knowledge is used.
+Therefore, a program being onboarded to \CFA requires some upgrading to satisfy the \CFA rules (and arguably become clearer), without giving up its validity to a plain C compiler.
+Second, the incompatibility only affects types like pointer-to-array, which are infrequently used in C.
+The more common C idiom for aliasing an array is to use a pointer-to-first-element type, which does not participate in the \CFA array's length checking.\footnote{
 	Notably, the desugaring of the \lstinline{array} type avoids letting any \lstinline{-[-]} type decay,
 	in order to preserve the length information that powers runtime bound-checking.}
-Therefore, the frequency of needing to upgrade legacy C code (as discussed in the first mitigation)
-is anticipated to be low.
-
-Because the incompatibility represents a low cost to a \CFA onboarding effort
-(with a plausible side benefit of linting the original code for a missing annotation),
-no special measures were added to retain the compatibility.
-It would be possible to flag occurrences of @-[-]@ types that come from @array@ desugaring,
-treating those with stricter \CFA rules, while treating others with classic C rules.
-If future lessons from C project onboarding warrant it,
-this special compatibility measure can be added.
-
-Having allowed that both the initial C example's check
-\begin{itemize}
-	\item
-		Is @float[999]@ type-compatible with @float[n]@?
-\end{itemize}
-and the second \CFA example's induced check
-\begin{itemize}
-	\item
-		Is @char[999]@ type-compatible with @char[n]@?
-\end{itemize}
-shall have the same answer, (``no''),
-discussion turns to how I got the \CFA compiler to produce this answer.
-In its preexisting form, it produced a (buggy) approximation of the C rules.
-To implement the new \CFA rules, I took the syntactic recursion a step further, obtaining,
-in both cases:
-\begin{itemize}
-	\item
-		Is @999@ compatible with @n@?
-\end{itemize}
-This compatibility question applies to a pair of expressions, where the earlier implementation were to types.
-Such an expression-compatibility question is a new addition to the \CFA compiler.
-Note, these questions only arise in the context of dimension expressions on (C) array types.
-
-TODO: ensure these compiler implementation matters are treated under \CFA compiler background:
-type unification,
-cost calculation,
-GenPoly.
-
-The relevant technical component of the \CFA compiler is the type unification procedure within the type resolver.
-I added rules for continuing this unification into expressions that occur within types.
-It is still fundamentally doing \emph{type} unification
-because it is participating in binding type variables,
-and not participating in binding any variables that stand in for expression fragments
-(for there is no such sort of variable in \CFA's analysis.)
-An unfortunate fact about the \CFA compiler's preexisting implementation is that
-type unification suffers from two forms of duplication.
-
-The first duplication has (many of) the unification rules stated twice.
-As a result, my additions for dimension expressions are stated twice.
-The extra statement of the rules occurs in the @GenPoly@ module,
-where concrete types like @array(int, 5)@\footnote{
-	Again, the presentation is simplified
-	by leaving the \lstinline{array} macro unexpanded.}
-are lowered into corresponding C types @struct __conc_array_1234@ (the suffix being a generated index).
-In this case, the struct's definition contains fields that hardcode the argument values of @float@ and @5@.
-The next time an @array(-,-)@ concrete instance is encountered, it checks if the previous @struct __conc_array_1234@ is suitable for it.
-Yes, for another occurrence of @array(int, 5)@;
-no, for either @array(rational(int), 5)@ or @array(int, 42)@.
-By the last example, this phase must ``reject''
-the hypothesis that it should reuse the dimension-5 instance's C-lowering for a dimension-42 instance.
-
-The second duplication has unification (proper) being invoked at two stages of expression resolution.
-As a result, my added rule set needs to handle more cases than the preceding discussion motivates.
-In the program
-\begin{cfa}
-void @f@( double );
-forall( T & ) void @f@( T & );
-void g( int n ) {
-	array( float, n + 1 ) x;
-	f(x);   // overloaded
-}
-\end{cfa}
-when resolving the function call, @g@, the first unification stage
-compares the type @T@ of the parameter with @array( float, n + 1 )@, of the argument.
-TODO: finish.
-
-The actual rules for comparing two dimension expressions are conservative.
-To answer, ``yes, consider this pair of expressions to be matching,''
-is to imply, ``all else being equal, allow an array with length calculated by $e_1$
-to be passed to a function expecting a length-$e_2$ array.''\footnote{
-	TODO: Deal with directionality, that I'm doing exact-match, no ``at least as long as,'' no subtyping.
-	Should it be an earlier scoping principle?  Feels like it should matter in more places than here.}
-So, a ``yes'' answer must represent a guarantee that both expressions evaluate the
-same result, while a ``no'' can tolerate ``they might, but we're not sure'',
-provided that practical recourses are available
-to let programmers express better knowledge.
-The new rule-set in the current release is, in fact, extremely conservative.
-I chose to keep things simple,
-and allow future needs to drive adding additional complexity, within the new framework.
-
-For starters, the original motivating example's rejection
-is not based on knowledge that
-the @xp@ length of (the literal) 999 is value-unequal to
-the (obvious) runtime value of the variable @n@, which is the @x@ length.
-Rather, the analysis assumes a variable's value can be anything,
-and so there can be no guarantee that its value is 999.
-So, a variable and a literal can never match.
-
-Two occurrences of the same literal value are obviously a fine match.
-For two occurrences of the same variable, more information is needed.
-For example, this one is fine
-\begin{cfa}
-void f( const int n ) {
-	float x[n];
-	float (*xp)[n] = x;   // accept
-}
-\end{cfa}
-while this one is not:
-\begin{cfa}
+Therefore, the need to upgrade legacy C code is low.
+Finally, if this incompatibility is a problem onboarding C programs to \CFA, it is should be possible to change the C type check to a warning rather than an error, acting as a \emph{lint} of the original code for a missing type annotation.
+
+To handle two occurrences of the same variable, more information is needed, \eg, this is fine,
+\begin{cfa}
+int n = 42;
+float x[@n@];
+float (*xp)[@n@] = x;   // accept
+\end{cfa}
+where @n@ remains fixed across a contiguous declaration context.
+However, intervening dynamic statement cause failures.
+\begin{cfa}
+int n = 42;
+float x[@n@];
+@n@ = 999; // dynamic change
+float (*xp)[@n@] = x;   // reject
+\end{cfa}
+However, side-effects can occur in a contiguous declaration context.
+\begin{cquote}
+\setlength{\tabcolsep}{20pt}
+\begin{tabular}{@{}ll@{}}
+\begin{cfa}
+// compile unit 1
+extern int @n@;
+extern float g();
 void f() {
-	int n = 42;
-	float x[n];
-	n = 999;
-	float (*xp)[n] = x;   // reject
-}
-\end{cfa}
-Furthermore, the fact that the first example sees @n@ as @const@
-is not actually sufficient.
-In this example, @f@'s length expression's declaration is as @const@ as it can be,
-yet its value still changes between the two invocations:
-\begin{cquote}
-\setlength{\tabcolsep}{15pt}
-\begin{tabular}{@{}ll@{}}
-\begin{cfa}
-// compile unit 1
-void g();
-void f( const int & const nr ) {
-	float x[nr];
-	g();    // change n
-	@float (*xp)[nr] = x;@   // reject
+	float x[@n@] = { g() };
+	float (*xp)[@n@] = x;   // reject
 }
 \end{cfa}
@@ -660,10 +549,10 @@
 \begin{cfa}
 // compile unit 2
-static int n = 42;
+int @n@ = 42;
 void g() {
-	n = 99;
-}
-
-f( n );
+	@n@ = 99;
+}
+
+
 \end{cfa}
 \end{tabular}
@@ -671,33 +560,43 @@
 The issue here is that knowledge needed to make a correct decision is hidden by separate compilation.
 Even within a translation unit, static analysis might not be able to provide all the information.
-
-My rule set also respects a traditional C feature: In spite of the several limitations of the C rules
-accepting cases that produce different values, there are a few mismatches that C stops.
-C is quite precise when working with two static values.
-\begin{cfa}
-enum { fortytwo = 42 };
-float x[fortytwo];
-float (*xp1)[42] = &x;    // accept
-float (*xp2)[999] = &x;   // reject
-\end{cfa}
-My \CFA rules agree with C's on these cases.
+However, if the example uses @const@, the check is possible.
+\begin{cquote}
+\setlength{\tabcolsep}{20pt}
+\begin{tabular}{@{}ll@{}}
+\begin{cfa}
+// compile unit 1
+extern @const@ int n;
+extern float g();
+void f() {
+	float x[n] = { g() };
+	float (*xp)[n] = x;   // reject
+}
+\end{cfa}
+&
+\begin{cfa}
+// compile unit 2
+@const@ int n = 42;
+void g() {
+	@n = 99@; // allowed
+}
+
+
+\end{cfa}
+\end{tabular}
+\end{cquote}
 
 In summary, the new rules classify expressions into three groups:
 \begin{description}
 \item[Statically Evaluable]
-	Expressions for which a specific value can be calculated (conservatively)
-	at compile-time.
-	A preexisting \CFA compiler module defines which literals, enumerators, and expressions qualify,
-	and evaluates them.
+	Expressions for which a specific value can be calculated (conservatively) at compile-time.
+	A preexisting \CFA compiler module defines which literals, enumerators, and expressions qualify and evaluates them.
 \item[Dynamic but Stable]
 	The value of a variable declared as @const@, including a @const@ parameter.
 \item[Potentially Unstable]
 	The catch-all category.  Notable examples include:
-	any function-call result, @float x[foo()];@,
-	the particular function-call result that is a pointer dereference, @void f(const int * n)@ @{ float x[*n]; }@, and
-	any use of a reference-typed variable.
+	any function-call result, @float x[foo()]@, the particular function-call result that is a pointer dereference, @void f(const int * n)@ @{ float x[*n]; }@, and any use of a reference-typed variable.
 \end{description}
 Within these groups, my \CFA rules are:
-\begin{itemize}
+\begin{itemize}[leftmargin=*]
 \item
 	Accept a Statically Evaluable pair, if both expressions have the same value.
@@ -710,5 +609,5 @@
 \end{itemize}
 The traditional C rules are:
-\begin{itemize}
+\begin{itemize}[leftmargin=*]
 \item
 	Reject a Statically Evaluable pair, if the expressions have two different values.
@@ -716,4 +615,7 @@
 	Otherwise, accept.
 \end{itemize}
+\VRef[Figure]{f:DimexprRuleCompare} gives a case-by-case comparison of the consequences of these rule sets.
+It demonstrates that the \CFA false alarms occur in the same cases as C treats unsafe.
+It also shows that C-incompatibilities only occur in cases that C treats unsafe.
 
 \begin{figure}
@@ -746,5 +648,5 @@
 		where \lstinline{expr1} and \lstinline{expr2} are meta-variables varying according to the row's Case.
 		Each row's claim applies to other harnesses too, including,
-		\begin{itemize}
+		\begin{itemize}[leftmargin=*]
 		\item
 			calling a function with a parameter like \lstinline{x} and an argument of the \lstinline{xp} type,
@@ -762,5 +664,5 @@
 		The table treats symbolic identity (Same/Different on rows)
 		apart from value equality (Equal/Unequal on columns).
-		\begin{itemize}
+		\begin{itemize}[leftmargin=*]
 		\item
 			The expressions \lstinline{1}, \lstinline{0+1} and \lstinline{n}
@@ -781,29 +683,92 @@
 \end{figure}
 
-
-\VRef[Figure]{f:DimexprRuleCompare} gives a case-by-case comparison of the consequences of these rule sets.
-It demonstrates that the \CFA false alarms occur in the same cases as C treats unsafe.
-It also shows that C-incompatibilities only occur in cases that C treats unsafe.
-
-
-The conservatism of the new rule set can leave a programmer needing a recourse,
-when needing to use a dimension expression whose stability argument
-is more subtle than current-state analysis.
+\begin{comment}
+Given that the above check
+\begin{itemize}
+	\item
+	Is internal type @char[999]@ type-compatible with internal type @char[n]@?
+\end{itemize}
+answers false, discussion turns to how I got the \CFA compiler to produce this answer.
+In its preexisting form, the type system had a buggy approximation of the C rules.
+To implement the new \CFA rules, I added one further step.
+\begin{itemize}
+	\item
+		Is @999@ compatible with @n@?
+\end{itemize}
+This question applies to a pair of expressions, where the earlier question applies to types.
+An expression-compatibility question is a new addition to the \CFA compiler, and occurs in the context of dimension expressions, and possibly enumerations assigns, which must be unique.
+
+% TODO: ensure these compiler implementation matters are treated under \CFA compiler background: type unification, cost calculation, GenPoly.
+
+The relevant technical component of the \CFA compiler is the standard type-unification within the type resolver.
+\begin{cfa}
+example
+\end{cfa}
+I added rules for continuing this unification into expressions that occur within types.
+It is still fundamentally doing \emph{type} unification because it is participating in binding type variables, and not participating in binding any variables that stand in for expression fragments (for there is no such sort of variable in \CFA's analysis.)
+An unfortunate fact about the \CFA compiler's preexisting implementation is that type unification suffers from two forms of duplication.
+
+In detail, the first duplication has (many of) the unification rules stated twice.
+As a result, my additions for dimension expressions are stated twice.
+The extra statement of the rules occurs in the @GenPoly@ module, where concrete types like @array( int, 5 )@\footnote{
+	Again, the presentation is simplified
+	by leaving the \lstinline{array} macro unexpanded.}
+are lowered into corresponding C types @struct __conc_array_1234@ (the suffix being a generated index).
+In this case, the struct's definition contains fields that hardcode the argument values of @float@ and @5@.
+The next time an @array( -, - )@ concrete instance is encountered, it checks if the previous @struct __conc_array_1234@ is suitable for it.
+Yes, for another occurrence of @array( int, 5 )@;
+no, for examples like @array( int, 42 )@ or @array( rational(int), 5 )@.
+In the first example, it must reject the reuse hypothesis for a dimension-@5@ and a dimension-@42@ instance.
+
+The second duplication has unification (proper) being invoked at two stages of expression resolution.
+As a result, my added rule set needs to handle more cases than the preceding discussion motivates.
+In the program
+\begin{cfa}
+void @f@( double ); // overload 
+forall( T & ) void @f@( T & ); // overload 
+void g( int n ) {
+	array( float, n + 1 ) x;
+	f(x);   // overloaded
+}
+\end{cfa}
+when resolving a function call to @g@, the first unification stage compares the type @T@ of the parameter with @array( float, n + 1 )@, of the argument.
+\PAB{TODO: finish.}
+
+The actual rules for comparing two dimension expressions are conservative.
+To answer, ``yes, consider this pair of expressions to be matching,''
+is to imply, ``all else being equal, allow an array with length calculated by $e_1$
+to be passed to a function expecting a length-$e_2$ array.''\footnote{
+	TODO: Deal with directionality, that I'm doing exact-match, no ``at least as long as,'' no subtyping.
+	Should it be an earlier scoping principle?  Feels like it should matter in more places than here.}
+So, a ``yes'' answer must represent a guarantee that both expressions evaluate the
+same result, while a ``no'' can tolerate ``they might, but we're not sure'',
+provided that practical recourses are available
+to let programmers express better knowledge.
+The new rule-set in the current release is, in fact, extremely conservative.
+I chose to keep things simple,
+and allow future needs to drive adding additional complexity, within the new framework.
+
+For starters, the original motivating example's rejection is not based on knowledge that the @xp@ length of (the literal) 999 is value-unequal to the (obvious) runtime value of the variable @n@, which is the @x@ length.
+Rather, the analysis assumes a variable's value can be anything, and so there can be no guarantee that its value is 999.
+So, a variable and a literal can never match.
+
+TODO: Discuss the interaction of this dimension hoisting with the challenge of extra unification for cost calculation
+\end{comment}
+
+The conservatism of the new rule set can leave a programmer needing a recourse, when needing to use a dimension expression whose stability argument is more subtle than current-state analysis.
 This recourse is to declare an explicit constant for the dimension value.
-Consider these two dimension expressions,
-whose reuses are rejected by the blunt current-state rules:
-\begin{cfa}
-void f( int & nr, const int nv ) {
-	float x[nr];
-	float (*xp)[nr] = &x;   // reject: nr varying (no references)
-	float y[nv + 1];
-	float (*yp)[nv + 1] = &y;   // reject: ?+? unpredictable (no functions)
+Consider these two dimension expressions, whose uses are rejected by the blunt current-state rules:
+\begin{cfa}
+void f( int @&@ nr, @const@ int nv ) {
+	float x[@nr@];
+	float (*xp)[@nr@] = &x;   // reject: nr varying (no references)
+	float y[@nv + 1@];
+	float (*yp)[@nv + 1@] = &y;   // reject: ?+? unpredictable (no functions)
 }
 \end{cfa}
 Yet, both dimension expressions are reused safely.
-The @nr@ reference is never written, not volatile
-and control does not leave the function between the uses.
-The name @?+?@ resolves to a function that is quite predictable.
-Here, the programmer can add the constant declarations (cast does not work):
+The @nr@ reference is never written, not volatile meaning no implicit code (load) between declarations, and control does not leave the function between the uses.
+As well, the build-in @?+?@ function is predictable.
+To make these cases work, the programmer must add the follow constant declarations (cast does not work):
 \begin{cfa}
 void f( int & nr, const int nv ) {
@@ -819,18 +784,16 @@
 achieved by adding a superfluous ``snapshot it as of now'' directive.
 
-The snapshotting trick is also used by the translation, though to achieve a different outcome.
+The snapshot trick is also used by the \CFA translation, though to achieve a different outcome.
 Rather obviously, every array must be subscriptable, even a bizarre one:
 \begin{cfa}
-array( float, rand(10) ) x;
-x[0];  // 10% chance of bound-check failure
-\end{cfa}
-Less obvious is that the mechanism of subscripting is a function call,
-which must communicate length accurately.
-The bound-check above (callee logic) must use the actual allocated length of @x@,
-without mistakenly reevaluating the dimension expression, @rand(10)@.
+array( float, @rand(10)@ ) x;
+x[@0@];  // 10% chance of bound-check failure
+\end{cfa}
+Less obvious is that the mechanism of subscripting is a function call, which must communicate length accurately.
+The bound-check above (callee logic) must use the actual allocated length of @x@, without mistakenly reevaluating the dimension expression, @rand(10)@.
 Adjusting the example to make the function's use of length more explicit:
 \begin{cfa}
-forall ( T * )
-void f( T * x ) { sout | sizeof(*x); }
+forall( T * )
+void f( T * x ) { sout | sizeof( *x ); }
 float x[ rand(10) ];
 f( x );
@@ -840,10 +803,10 @@
 void f( size_t __sizeof_T, void * x ) { sout | __sizeof_T; }
 \end{cfa}
-the translation must call the dimension argument twice:
+the translation calls the dimension argument twice:
 \begin{cfa}
 float x[ rand(10) ];
 f( rand(10), &x );
 \end{cfa}
-Rather, the translation is:
+The correct form is:
 \begin{cfa}
 size_t __dim_x = rand(10);
@@ -851,10 +814,8 @@
 f( __dim_x, &x );
 \end{cfa}
-The occurrence of this dimension hoisting during translation was in the preexisting \CFA compiler.
-But its cases were buggy, particularly with determining, ``Can hoisting the expression be skipped here?'', for skipping this hoisting is clearly desirable in some cases.
-For example, when the programmer has already done so manually. \PAB{I don't know what this means.}
+Dimension hoisting already existed in the \CFA compiler.
+But its was buggy, particularly with determining, ``Can hoisting the expression be skipped here?'', for skipping this hoisting is clearly desirable in some cases.
+For example, when a programmer has already hoisted to perform an optimiation to prelude duplicate code (expression) and/or expression evaluation.
 In the new implementation, these cases are correct, harmonized with the accept/reject criteria.
-
-TODO: Discuss the interaction of this dimension hoisting with the challenge of extra unification for cost calculation
 
 
@@ -863,5 +824,5 @@
 
 A multidimensional array implementation has three relevant levels of abstraction, from highest to lowest, where the array occupies \emph{contiguous memory}.
-\begin{enumerate}
+\begin{enumerate}[leftmargin=*]
 \item
 Flexible-stride memory:
@@ -1100,5 +1061,5 @@
 Preexisting \CFA mechanisms achieve this requirement, but with poor performance.
 Furthermore, advanced array users need an exception to the basic mechanism, which does not occur with other aggregates.
-Hence, arrays introduce subleties in supporting an element's lifecycle.
+Hence, arrays introduce subtleties in supporting an element's lifecycle.
 
 The preexisting \CFA support for contained-element lifecycle is based on recursive occurrences of the object-type (@otype@) pseudo-trait.
@@ -1319,5 +1280,5 @@
 The @worker@ type is designed this way to work with the threading system.
 A thread type forks a thread at the end of each constructor and joins with it at the start of each destructor.
-But a @worker@ cannot begin its forked-thead work without knowing its @id@.
+But a @worker@ cannot begin its forked-thread work without knowing its @id@.
 Therefore, there is a conflict between the implicit actions of the builtin @thread@ type and a user's desire to defer these actions.
 
@@ -1460,5 +1421,5 @@
 
 The \CFA array and the field of ``array language'' comparators all leverage dependent types to improve on the expressiveness over C and Java, accommodating examples such as:
-\begin{itemize}
+\begin{itemize}[leftmargin=*]
 \item a \emph{zip}-style operation that consumes two arrays of equal length
 \item a \emph{map}-style operation whose produced length matches the consumed length
@@ -1544,5 +1505,5 @@
 The details in this presentation aren't meant to be taken too precisely as suggestions for how it should look in \CFA.
 But the example shows these abilities:
-\begin{itemize}
+\begin{itemize}[leftmargin=*]
 \item a built-in way (the @is_enum@ trait) for a generic routine to require enumeration-like information about its instantiating type
 \item an implicit implementation of the trait whenever a user-written enum occurs (@weekday@'s declaration implies @is_enum@)
Index: doc/theses/mike_brooks_MMath/background.tex
===================================================================
--- doc/theses/mike_brooks_MMath/background.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/background.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -995,5 +995,5 @@
 		Illustrated by pseudocode implementation of an STL-compatible API fragment using LQ as the underlying implementation.
 		The gap that makes it pseudocode is that
-		the LQ C macros do not expand to valid C++ when instantiated with template parameters---there is no \lstinline{struct El}.
+		the LQ C macros do not expand to valid \CC when instantiated with template parameters---there is no \lstinline{struct El}.
 		When using a custom-patched version of LQ to work around this issue,
 		the programs of \VRef[Figure]{f:WrappedRef} and wrapped value work with this shim in place of real STL.
Index: doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-attrib-cfa.ssv
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-attrib-cfa.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-attrib-cfa.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,11 @@
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.2 other 10985 39989 0.27470054264922855 1:8|2:1|3:1|14:774|15:2|16:2|17:2|18:2|19:1|20:1|21:1|22:2235|23:1|24:649|44:7221|45:1|46:2|47:3|48:1|49:1|50:1|51:2|52:4|53:3|54:1|55:4|56:4|57:1|58:4|59:3|60:6|61:3|62:6|63:5|64:3|66:1|67:1|68:1|69:1|73:1|76:2|78:1|88:1|91:1|92:1|103:1|106:1|121:1|122:1|123:1|124:1|125:1|126:1|127:1|128:2|129:1|130:1|131:1|132:1
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.2 ctor-dtor 8128 39989 0.2032558953712271 4:1|25:2319|26:1|27:1|28:1338|29:3071|30:1|31:1|32:1|33:2|34:1|35:1163|36:208|37:1|38:1|42:1|71:1|79:1|84:1|85:1|89:1|90:1|93:1|95:1|96:1|100:1|104:1|110:2|111:1|112:1|115:1|120:1
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.2 text-import 2740 39989 0.06851884268173748 5:1|39:2736|40:1|41:1|74:1
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.2 gc 1959 39989 0.04898847182975318 6:660|7:1|8:16|9:38|10:842|11:1|12:401
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.2 harness-leaf 16177 39989 0.4045362474680537 13:14914|43:1230|65:1|70:2|72:1|75:2|77:1|80:1|81:1|82:1|83:1|86:1|87:1|94:1|97:2|98:1|99:1|101:2|102:1|105:1|107:2|108:1|109:1|113:1|114:1|116:1|117:1|118:1|119:2
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.2 other 9846 39971 0.2463285882264642 1:8|2:1|3:5|4:1|5:1|15:641|16:1|17:1|18:3|19:1|20:1|21:1788|22:493|38:1|39:1|40:6819|41:3|42:1|43:1|44:1|45:7|46:1|47:1|48:1|49:1|50:1|51:3|52:3|53:2|54:2|55:2|56:2|57:1|58:2|59:5|60:2|61:6|62:6|63:1|64:1|67:1|68:2|69:1|70:1|71:1|77:1|89:1|91:1|96:1|113:1|116:1|125:1|126:1|127:1|128:1|129:1|130:1|131:1|132:1|133:1|134:1|135:1|136:1
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.2 gc 2302 39971 0.057591754021665706 6:513|7:29|8:36|9:1388|10:1|11:1|12:1|13:333
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.2 harness-leaf 13762 39971 0.3442996172224863 14:12714|37:1021|73:1|74:1|76:1|78:1|82:2|83:1|85:1|86:2|87:1|90:1|93:1|95:2|99:1|100:1|102:1|103:1|107:2|110:2|112:1|117:1|120:1|123:1
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.2 ctor-dtor 6821 39971 0.17064872032223363 23:1959|24:1094|25:1|26:2584|27:2|28:987|29:172|30:1|31:1|36:9|66:1|80:1|88:1|94:1|97:1|104:1|105:1|108:1|114:1|118:1|124:1
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.2 text-import 7239 39971 0.18110630206900002 32:7219|33:2|34:2|35:1|65:1|75:1|79:1|81:1|84:1|92:1|98:1|101:1|106:1|109:1|111:1|115:1|119:1|121:1|122:1
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.2 malloc-free 1 39971 2.5018138150158864e-05 72:1
Index: doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-attrib-stl.ssv
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-attrib-stl.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-attrib-stl.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,10 @@
+perfexp-stl-pall-na-na-na corpus-1-50-1.txt -1.0 other 5967 39986 0.14922722953033563 1:8|2:2|3:1|4:1|5:1|6:1|10:1|12:413|13:1|14:1182|15:1|16:2|17:1|18:2|19:1|20:1|21:1|22:1|23:10|24:3|38:4259|39:1|40:1|41:1|42:1|43:10|44:1|45:1|50:2|51:3|52:5|53:3|54:1|55:1|56:4|57:1|58:2|59:7|60:2|61:8|62:1|63:1|66:1|67:1|68:1|69:1|70:1|89:1|90:1|91:1|92:1|94:1|101:1|112:1|127:1|131:1|137:1|154:1|155:1
+perfexp-stl-pall-na-na-na corpus-1-50-1.txt -1.0 harness-leaf 16659 39986 0.4166208172860501 7:1|11:14669|65:1949|95:1|96:1|98:3|100:1|102:1|104:1|106:2|107:1|108:1|110:1|111:1|113:1|114:1|116:1|117:2|118:1|119:2|121:1|122:2|123:1|124:1|126:2|129:1|130:1|133:1|134:1|136:1|138:2|139:3|140:1
+perfexp-stl-pall-na-na-na corpus-1-50-1.txt -1.0 malloc-free 11581 39986 0.28962636922923024 8:1|9:1|25:5148|26:1|27:1|28:1|29:2|30:2|31:2|32:3|33:1|34:4|35:940|36:1|37:1|64:370|77:4843|78:1|79:1|80:1|81:2|82:1|83:2|84:226|85:1|93:1|97:1|103:2|105:1|109:1|115:1|120:1|125:1|132:1|135:1|141:1|142:2|143:2|145:1|146:2|147:1|149:1|150:1|151:1|153:1
+perfexp-stl-pall-na-na-na corpus-1-50-1.txt -1.0 text-import 2822 39986 0.07057470114540089 46:2817|47:1|48:1|49:1|99:1|128:1
+perfexp-stl-pall-na-na-na corpus-1-50-1.txt -1.0 ctor-dtor 2957 39986 0.07395088280898314 71:337|72:1|73:800|74:192|75:1|76:1|86:1619|87:1|88:2|144:1|148:1|152:1
+perfexp-stl-pall-na-na-na corpus-1-200-1.txt -1.0 other 7739 39998 0.19348467423371168 1:8|2:2|3:1|4:3|5:1|6:1|7:2|12:1|14:271|15:809|16:1|17:3|18:1|19:2|20:1|21:1|22:1|23:1|28:6545|29:3|30:2|31:1|32:1|37:1|38:5|39:3|40:3|41:1|42:7|43:3|44:2|45:4|46:3|47:7|48:5|49:5|50:3|53:1|63:1|64:1|65:1|67:2|68:1|72:2|75:1|80:1|83:1|85:1|94:1|99:2|104:1|108:2|115:1|118:1|124:1|126:1|140:1|141:1
+perfexp-stl-pall-na-na-na corpus-1-200-1.txt -1.0 harness-leaf 12349 39998 0.3087404370218511 8:1|13:10638|52:1684|66:1|69:1|70:3|71:1|82:2|86:1|88:1|90:1|92:2|93:1|97:1|100:1|103:1|106:1|107:1|111:1|113:1|114:2|116:1|120:1|122:1
+perfexp-stl-pall-na-na-na corpus-1-200-1.txt -1.0 text-import 7603 39998 0.19008450422521125 9:1|33:7579|34:1|35:1|36:2|73:1|76:1|77:2|81:1|84:1|89:2|91:1|95:1|98:1|102:1|105:1|109:1|112:1|121:1|123:2|125:1
+perfexp-stl-pall-na-na-na corpus-1-200-1.txt -1.0 malloc-free 9730 39998 0.2432621631081554 10:2|11:1|24:4005|25:1|26:1|27:800|51:333|57:4337|58:1|59:232|74:1|78:1|79:1|87:1|96:1|101:1|110:1|117:1|119:1|129:1|131:1|132:1|135:1|136:1|137:1|138:1|139:1
+perfexp-stl-pall-na-na-na corpus-1-200-1.txt -1.0 ctor-dtor 2577 39998 0.06442822141107056 54:251|55:844|56:155|60:1320|61:1|62:1|127:1|128:1|130:1|133:1|134:1
Index: doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-space-cfa.ssv
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-space-cfa.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-space-cfa.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,72 @@
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.02 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745895848348
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.05 0 -1 48 45 1 0 113934 44958 59934 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745895858437
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.1 0 -1 47 44 1 0 81918 28958 37588 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745895868505
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.2 0 -1 46 43 1 0 65902 20958 37588 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745895878576
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.4 0 -1 45 42 1 0 57886 16958 37588 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745895888661
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.5 0 -1 44 41 1 0 53870 14958 37588 24576 10485760 4706304 270336 135168 16384 8192 4096 0 15462400 1745895898719
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.9 0 -1 44 41 1 0 53870 14958 37588 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745895908789
+perfexp-cfa-pall-ll-share-na corpus-1-1-1.txt 0.98 0 -1 44 41 1 0 53870 14958 37588 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745895918863
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.02 0 -1 52 49 1 0 1073998 524958 779934 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745895928952
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.05 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745895939024
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.1 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745895949092
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.2 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745895959172
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.4 0 -1 48 45 1 0 113934 44958 59934 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745895969229
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.5 0 -1 48 45 1 0 113934 44958 59934 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745895979298
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.9 0 -1 47 44 1 0 81918 28958 37588 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745895989387
+perfexp-cfa-pall-ll-share-na corpus-1-10-1.txt 0.98 0 -1 47 44 1 0 81918 28958 37588 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745895999446
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.02 0 -1 56 53 1 0 16434062 8204958 12299934 24576 10485760 4706304 8466432 155648 16384 8192 4096 0 23658496 1745896009526
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.05 0 -1 54 51 1 0 4146030 2060958 3083934 24576 10485760 4706304 2322432 151552 16384 8192 4096 0 17514496 1745896019598
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.1 0 -1 53 50 1 0 2098014 1036958 1547934 24576 10485760 4706304 1298432 155648 16384 8192 4096 0 16490496 1745896029689
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.2 0 -1 52 49 1 0 1073998 524958 779934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745896039786
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.4 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745896049863
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.5 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745896059943
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.9 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745896070018
+perfexp-cfa-pall-ll-share-na corpus-1-100-1.txt 0.98 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 135168 16384 8192 4096 0 15462400 1745896080102
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.02 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745896090174
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.05 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896100243
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.1 0 -1 48 45 1 0 113934 44958 59934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745896110322
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.2 0 -1 47 44 1 0 81918 28958 37588 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896120403
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.4 0 -1 46 43 1 0 65902 20958 37588 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896130470
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.5 0 -1 45 42 1 0 57886 16958 37588 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745896140534
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.9 0 -1 45 42 1 0 57886 16958 37588 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745896150602
+perfexp-cfa-pall-ll-share-na corpus-1-2-1.txt 0.98 0 -1 45 42 1 0 57886 16958 37588 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745896160691
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.02 0 -1 53 50 1 0 2098014 1036958 1547934 24576 10485760 4706304 1298432 155648 16384 8192 4096 0 16490496 1745896170767
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.05 0 -1 52 49 1 0 1073998 524958 779934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745896180840
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.1 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745896190917
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.2 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745896200988
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.4 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745896211059
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.5 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745896221135
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.9 0 -1 48 45 1 0 113934 44958 59934 24576 10485760 4706304 270336 135168 16384 8192 4096 0 15462400 1745896231231
+perfexp-cfa-pall-ll-share-na corpus-1-20-1.txt 0.98 0 -1 48 45 1 0 113934 44958 59934 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896241323
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.02 0 -1 57 54 1 0 32818078 16396958 24587934 24576 10485760 4706304 16658432 155648 16384 8192 4096 0 31850496 1745896251395
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.05 0 -1 55 52 1 0 8242046 4108958 6155934 24576 10485760 4706304 4370432 155648 16384 8192 4096 0 19562496 1745896261478
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.1 0 -1 54 51 1 0 4146030 2060958 3083934 24576 10485760 4706304 2322432 155648 16384 8192 4096 0 17514496 1745896271531
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.2 0 -1 53 50 1 0 2098014 1036958 1547934 24576 10485760 4706304 1298432 155648 16384 8192 4096 0 16490496 1745896281605
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.4 0 -1 52 49 1 0 1073998 524958 779934 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745896291678
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.5 0 -1 52 49 1 0 1073998 524958 779934 24576 10485760 4706304 270336 135168 16384 8192 4096 0 15462400 1745896301752
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.9 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 135168 16384 8192 4096 0 15462400 1745896311804
+perfexp-cfa-pall-ll-share-na corpus-1-200-1.txt 0.98 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896321892
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.02 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745896331955
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.05 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745896342037
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.1 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 151552 16384 8192 4096 0 15462400 1745896352092
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.2 0 -1 48 45 1 0 113934 44958 59934 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745896362173
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.4 0 -1 47 44 1 0 81918 28958 37588 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745896372246
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.5 0 -1 47 44 1 0 81918 28958 37588 24576 10485760 4706304 270336 147456 16384 8192 4096 0 15462400 1745896382323
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.9 0 -1 46 43 1 0 65902 20958 37588 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896392340
+perfexp-cfa-pall-ll-share-na corpus-1-5-1.txt 0.98 0 -1 46 43 1 0 65902 20958 37588 24576 10485760 4706304 270336 135168 16384 8192 4096 0 15462400 1745896402448
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.02 0 -1 55 52 1 0 8242046 4108958 6155934 24576 10485760 4706304 4370432 155648 16384 8192 4096 0 19562496 1745896412524
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.05 0 -1 53 50 1 0 2098014 1036958 1547934 24576 10485760 4706304 1298432 151552 16384 8192 4096 0 16490496 1745896422602
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.1 0 -1 52 49 1 0 1073998 524958 779934 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745896432673
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.2 0 -1 51 48 1 0 561982 268958 395934 24576 10485760 4706304 270336 155648 16384 8192 4096 0 15462400 1745896442742
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.4 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 135168 16384 8192 4096 0 15462400 1745896452816
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.5 0 -1 50 47 1 0 305966 140958 203934 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896462898
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.9 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745896472973
+perfexp-cfa-pall-ll-share-na corpus-1-50-1.txt 0.98 0 -1 49 46 1 0 177950 76958 107934 24576 10485760 4706304 270336 143360 16384 8192 4096 0 15462400 1745896483047
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.02 0 -1 58 55 1 0 65586094 32780958 49163934 24576 10485760 4706304 33042432 151552 16384 8192 4096 0 48234496 1745896493119
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.05 0 -1 57 54 1 0 32818078 16396958 24587934 24576 10485760 4706304 16658432 151552 16384 8192 4096 0 31850496 1745896503205
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.1 0 -1 56 53 1 0 16434062 8204958 12299934 24576 10485760 4706304 8466432 147456 16384 8192 4096 0 23658496 1745896513279
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.2 0 -1 55 52 1 0 8242046 4108958 6155934 24576 10485760 4706304 4370432 151552 16384 8192 4096 0 19562496 1745896523338
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.4 0 -1 54 51 1 0 4146030 2060958 3083934 24576 10485760 4706304 2322432 151552 16384 8192 4096 0 17514496 1745896533433
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.5 0 -1 53 50 1 0 2098014 1036958 1547934 24576 10485760 4706304 1298432 139264 16384 8192 4096 0 16490496 1745896543508
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.9 0 -1 53 50 1 0 2098014 1036958 1547934 24576 10485760 4706304 1298432 151552 16384 8192 4096 0 16490496 1745896553583
+perfexp-cfa-pall-ll-share-na corpus-1-500-1.txt 0.98 0 -1 52 49 1 0 1073998 524958 779934 24576 10485760 4706304 270336 139264 16384 8192 4096 0 15462400 1745896563654
Index: doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-space-stl.ssv
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-space-stl.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-space-stl.ssv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,9 @@
+perfexp-stl-pall-na-na-na corpus-1-1-1.txt -1.0 0 -1 44 40 1 0 124574 86678 86678 24576 10485760 6897664 286720 143360 16384 8192 4096 0 17670144 1745896730367
+perfexp-stl-pall-na-na-na corpus-1-10-1.txt -1.0 0 -1 44 40 1 0 124574 86678 86678 24576 10485760 6897664 286720 135168 16384 8192 4096 0 17670144 1745896740450
+perfexp-stl-pall-na-na-na corpus-1-100-1.txt -1.0 0 -1 60043 60039 1 0 7144457 86678 202638 24576 10485760 6897664 286720 159744 16384 8192 4096 0 17670144 1745896752076
+perfexp-stl-pall-na-na-na corpus-1-2-1.txt -1.0 0 -1 44 40 1 0 124574 86678 86678 24576 10485760 6897664 286720 135168 16384 8192 4096 0 17670144 1745896762534
+perfexp-stl-pall-na-na-na corpus-1-20-1.txt -1.0 0 -1 60043 60039 1 0 2344537 86678 122638 24576 10485760 6897664 286720 159744 16384 8192 4096 0 17670144 1745896774170
+perfexp-stl-pall-na-na-na corpus-1-200-1.txt -1.0 0 -1 60043 60039 1 0 13144357 86678 302638 24576 10485760 6897664 286720 155648 16384 8192 4096 0 17670144 1745896786164
+perfexp-stl-pall-na-na-na corpus-1-5-1.txt -1.0 0 -1 44 40 1 0 124574 86678 86678 24576 10485760 6897664 286720 139264 16384 8192 4096 0 17670144 1745896796642
+perfexp-stl-pall-na-na-na corpus-1-50-1.txt -1.0 0 -1 60043 60039 1 0 4144507 86678 152638 24576 10485760 6897664 286720 155648 16384 8192 4096 0 17670144 1745896808237
+perfexp-stl-pall-na-na-na corpus-1-500-1.txt -1.0 0 -1 60043 60039 1 0 31144057 86678 602638 24576 10485760 6897664 286720 159744 16384 8192 4096 0 17670144 1745896820115
Index: doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-speed-cfa.csv
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-speed-cfa.csv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-speed-cfa.csv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,72 @@
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.02,xxx,1,1.000000,271859999,10.000315,8108
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.05,xxx,1,1.000000,267789999,10.000337,7986
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.1,xxx,1,1.000000,268969999,10.000179,8022
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.2,xxx,1,1.000000,264549999,10.000253,7890
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.4,xxx,1,1.000000,253529999,10.000107,7561
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.5,xxx,1,1.000000,219109999,10.000131,6533
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.9,xxx,1,1.000000,221149999,10.000419,6594
+perfexp-cfa-pall-ll-share-na,corpus-1-1-1.txt,0.98,xxx,1,1.000000,227899999,10.000287,6796
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.02,xxx,1,10.000000,269779999,10.000103,8046
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.05,xxx,1,10.000000,267789999,10.000051,7986
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.1,xxx,1,10.000000,265399999,10.000374,7915
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.2,xxx,1,10.000000,259169999,10.000259,7729
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.4,xxx,1,10.000000,248049999,10.000362,7397
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.5,xxx,1,10.000000,251179999,10.000207,7490
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.9,xxx,1,10.000000,208299999,10.000113,6210
+perfexp-cfa-pall-ll-share-na,corpus-1-10-1.txt,0.98,xxx,1,10.000000,203689999,10.000491,6073
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.02,xxx,1,100.000000,181959999,10.000130,5424
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.05,xxx,1,100.000000,176599999,10.000396,5264
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.1,xxx,1,100.000000,175669999,10.000425,5236
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.2,xxx,1,100.000000,169819999,10.000338,5062
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.4,xxx,1,100.000000,166239999,10.000295,4955
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.5,xxx,1,100.000000,168749999,10.000403,5030
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.9,xxx,1,100.000000,142579999,10.000088,4249
+perfexp-cfa-pall-ll-share-na,corpus-1-100-1.txt,0.98,xxx,1,100.000000,141419999,10.000556,4214
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.02,xxx,1,2.000000,267669999,10.000144,7983
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.05,xxx,1,2.000000,267249999,10.000075,7970
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.1,xxx,1,2.000000,259119999,10.000241,7727
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.2,xxx,1,2.000000,262449999,10.000036,7827
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.4,xxx,1,2.000000,257069999,10.000250,7666
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.5,xxx,1,2.000000,220879999,10.000077,6586
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.9,xxx,1,2.000000,224159999,10.000392,6684
+perfexp-cfa-pall-ll-share-na,corpus-1-2-1.txt,0.98,xxx,1,2.000000,228599999,10.000288,6816
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.02,xxx,1,20.000000,249709999,10.000052,7447
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.05,xxx,1,20.000000,248289999,10.000291,7404
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.1,xxx,1,20.000000,244289999,10.000079,7285
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.2,xxx,1,20.000000,239629999,10.000018,7146
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.4,xxx,1,20.000000,227269999,10.000276,6777
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.5,xxx,1,20.000000,230169999,10.000213,6863
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.9,xxx,1,20.000000,192409999,10.000384,5736
+perfexp-cfa-pall-ll-share-na,corpus-1-20-1.txt,0.98,xxx,1,20.000000,192229999,10.000129,5731
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.02,xxx,1,200.000000,136229999,10.000291,4059
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.05,xxx,1,200.000000,151389999,10.000176,4512
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.1,xxx,1,200.000000,147719999,10.000691,4402
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.2,xxx,1,200.000000,145439999,10.000356,4334
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.4,xxx,1,200.000000,142839999,10.000285,4256
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.5,xxx,1,200.000000,140079999,10.000543,4174
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.9,xxx,1,200.000000,123409999,10.000113,3676
+perfexp-cfa-pall-ll-share-na,corpus-1-200-1.txt,0.98,xxx,1,200.000000,123819999,10.000019,3689
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.02,xxx,1,5.000000,271809999,10.000364,8106
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.05,xxx,1,5.000000,274469999,10.000219,8186
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.1,xxx,1,5.000000,263839999,10.000241,7868
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.2,xxx,1,5.000000,261199999,10.000043,7790
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.4,xxx,1,5.000000,251839999,10.000236,7510
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.5,xxx,1,5.000000,252699999,10.000228,7536
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.9,xxx,1,5.000000,214729999,10.000191,6402
+perfexp-cfa-pall-ll-share-na,corpus-1-5-1.txt,0.98,xxx,1,5.000000,214379999,10.000258,6392
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.02,xxx,1,50.000000,232529999,10.000300,6934
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.05,xxx,1,50.000000,232389999,10.000139,6930
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.1,xxx,1,50.000000,228099999,10.000446,6802
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.2,xxx,1,50.000000,221149999,10.000112,6594
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.4,xxx,1,50.000000,211489999,10.000466,6306
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.5,xxx,1,50.000000,211619999,10.000036,6310
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.9,xxx,1,50.000000,175229999,10.000406,5223
+perfexp-cfa-pall-ll-share-na,corpus-1-50-1.txt,0.98,xxx,1,50.000000,174249999,10.000535,5194
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.02,xxx,1,500.000000,87729999,10.000374,2611
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.05,xxx,1,500.000000,86599999,10.000273,2578
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.1,xxx,1,500.000000,114539999,10.000199,3412
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.2,xxx,1,500.000000,112669999,10.000356,3356
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.4,xxx,1,500.000000,114079999,10.000033,3398
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.5,xxx,1,500.000000,107069999,10.000914,3189
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.9,xxx,1,500.000000,109299999,10.000249,3255
+perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.98,xxx,1,500.000000,85189999,10.000327,2536
Index: doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-speed-stl.csv
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-speed-stl.csv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/benchmarks/string/result-allocate-speed-stl.csv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,9 @@
+perfexp-stl-pall-na-na-na,corpus-1-1-1.txt,-1.0,xxx,1,1.000000,493359999,10.000081,14720
+perfexp-stl-pall-na-na-na,corpus-1-10-1.txt,-1.0,xxx,1,10.000000,338119999,10.000078,10086
+perfexp-stl-pall-na-na-na,corpus-1-100-1.txt,-1.0,xxx,1,100.000000,176849999,10.000302,5272
+perfexp-stl-pall-na-na-na,corpus-1-2-1.txt,-1.0,xxx,1,2.000000,407109999,10.000217,12145
+perfexp-stl-pall-na-na-na,corpus-1-20-1.txt,-1.0,xxx,1,20.000000,202969999,10.000127,6051
+perfexp-stl-pall-na-na-na,corpus-1-200-1.txt,-1.0,xxx,1,200.000000,164869999,10.000520,4914
+perfexp-stl-pall-na-na-na,corpus-1-5-1.txt,-1.0,xxx,1,5.000000,353059999,10.000206,10532
+perfexp-stl-pall-na-na-na,corpus-1-50-1.txt,-1.0,xxx,1,50.000000,202519999,10.000190,6038
+perfexp-stl-pall-na-na-na,corpus-1-500-1.txt,-1.0,xxx,1,500.000000,133359999,10.000720,3973
Index: doc/theses/mike_brooks_MMath/benchmarks/string/result-append-pbv.csv
===================================================================
--- doc/theses/mike_brooks_MMath/benchmarks/string/result-append-pbv.csv	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/benchmarks/string/result-append-pbv.csv	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -1,135 +1,270 @@
-perfexp-cfa-pta-ll-share-reuse,corpus-100-1-1.txt,100,100,1.000000,219460000,10.000260
-perfexp-cfa-pta-ll-share-reuse,corpus-100-10-1.txt,100,100,9.500000,180250000,10.000486
-perfexp-cfa-pta-ll-share-reuse,corpus-100-100-1.txt,100,100,106.370000,152790000,10.000441
-perfexp-cfa-pta-ll-share-reuse,corpus-100-2-1.txt,100,100,2.030000,206090000,10.000311
-perfexp-cfa-pta-ll-share-reuse,corpus-100-20-1.txt,100,100,22.960000,184330000,10.000328
-perfexp-cfa-pta-ll-share-reuse,corpus-100-200-1.txt,100,100,177.280000,125090000,10.000138
-perfexp-cfa-pta-ll-share-reuse,corpus-100-5-1.txt,100,100,5.270000,199130000,10.000180
-perfexp-cfa-pta-ll-share-reuse,corpus-100-50-1.txt,100,100,43.320000,167720000,10.000327
-perfexp-cfa-pta-ll-share-reuse,corpus-100-500-1.txt,100,100,557.260000,93560000,10.001058
-perfexp-cfa-pta-ll-share-fresh,corpus-100-1-1.txt,100,100,1.000000,225090000,10.000393
-perfexp-cfa-pta-ll-share-fresh,corpus-100-10-1.txt,100,100,9.500000,196300000,10.000221
-perfexp-cfa-pta-ll-share-fresh,corpus-100-100-1.txt,100,100,106.370000,150670000,10.000337
-perfexp-cfa-pta-ll-share-fresh,corpus-100-2-1.txt,100,100,2.030000,206600000,10.000182
-perfexp-cfa-pta-ll-share-fresh,corpus-100-20-1.txt,100,100,22.960000,188400000,10.000199
-perfexp-cfa-pta-ll-share-fresh,corpus-100-200-1.txt,100,100,177.280000,125880000,10.000489
-perfexp-cfa-pta-ll-share-fresh,corpus-100-5-1.txt,100,100,5.270000,185930000,10.000231
-perfexp-cfa-pta-ll-share-fresh,corpus-100-50-1.txt,100,100,43.320000,170660000,10.000491
-perfexp-cfa-pta-ll-share-fresh,corpus-100-500-1.txt,100,100,557.260000,91520000,10.000640
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-1-1.txt,100,100,1.000000,146200000,10.000520
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-10-1.txt,100,100,9.500000,114140000,10.000734
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-100-1.txt,100,100,106.370000,17630000,10.000889
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-2-1.txt,100,100,2.030000,139700000,10.000460
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-20-1.txt,100,100,22.960000,71910000,10.000768
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-200-1.txt,100,100,177.280000,8540000,10.009186
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-5-1.txt,100,100,5.270000,129810000,10.000379
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-50-1.txt,100,100,43.320000,45280000,10.000006
-perfexp-cfa-pta-ll-noshare-reuse,corpus-100-500-1.txt,100,100,557.260000,3300000,10.021088
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-1-1.txt,100,100,1.000000,146050000,10.000551
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-10-1.txt,100,100,9.500000,102800000,10.000490
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-100-1.txt,100,100,106.370000,17060000,10.001677
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-2-1.txt,100,100,2.030000,137470000,10.000361
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-20-1.txt,100,100,22.960000,69520000,10.001142
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-200-1.txt,100,100,177.280000,8830000,10.010528
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-5-1.txt,100,100,5.270000,117120000,10.000681
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-50-1.txt,100,100,43.320000,42960000,10.001950
-perfexp-cfa-pta-ll-noshare-fresh,corpus-100-500-1.txt,100,100,557.260000,3220000,10.010203
-perfexp-cfa-peq-ll-share-reuse,corpus-100-1-1.txt,100,100,1.000000,583560000,10.000070
-perfexp-cfa-peq-ll-share-reuse,corpus-100-10-1.txt,100,100,9.500000,451400000,10.000013
-perfexp-cfa-peq-ll-share-reuse,corpus-100-100-1.txt,100,100,106.370000,253260000,10.000275
-perfexp-cfa-peq-ll-share-reuse,corpus-100-2-1.txt,100,100,2.030000,483580000,10.000140
-perfexp-cfa-peq-ll-share-reuse,corpus-100-20-1.txt,100,100,22.960000,396550000,10.000060
-perfexp-cfa-peq-ll-share-reuse,corpus-100-200-1.txt,100,100,177.280000,199760000,10.000416
-perfexp-cfa-peq-ll-share-reuse,corpus-100-5-1.txt,100,100,5.270000,454790000,10.000069
-perfexp-cfa-peq-ll-share-reuse,corpus-100-50-1.txt,100,100,43.320000,339690000,10.000243
-perfexp-cfa-peq-ll-share-reuse,corpus-100-500-1.txt,100,100,557.260000,123840000,10.000724
-perfexp-cfa-peq-ll-share-fresh,corpus-100-1-1.txt,100,100,1.000000,577650000,10.000157
-perfexp-cfa-peq-ll-share-fresh,corpus-100-10-1.txt,100,100,9.500000,445260000,10.000186
-perfexp-cfa-peq-ll-share-fresh,corpus-100-100-1.txt,100,100,106.370000,259650000,10.000273
-perfexp-cfa-peq-ll-share-fresh,corpus-100-2-1.txt,100,100,2.030000,485650000,10.000026
-perfexp-cfa-peq-ll-share-fresh,corpus-100-20-1.txt,100,100,22.960000,386150000,10.000120
-perfexp-cfa-peq-ll-share-fresh,corpus-100-200-1.txt,100,100,177.280000,197690000,10.000077
-perfexp-cfa-peq-ll-share-fresh,corpus-100-5-1.txt,100,100,5.270000,443650000,10.000006
-perfexp-cfa-peq-ll-share-fresh,corpus-100-50-1.txt,100,100,43.320000,339190000,10.000037
-perfexp-cfa-peq-ll-share-fresh,corpus-100-500-1.txt,100,100,557.260000,122740000,10.000753
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-1-1.txt,100,100,1.000000,595700000,10.000119
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-10-1.txt,100,100,9.500000,452000000,10.000055
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-100-1.txt,100,100,106.370000,280570000,10.000281
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-2-1.txt,100,100,2.030000,501040000,10.000073
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-20-1.txt,100,100,22.960000,422280000,10.000131
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-200-1.txt,100,100,177.280000,235640000,10.000126
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-5-1.txt,100,100,5.270000,461250000,10.000197
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-50-1.txt,100,100,43.320000,369020000,10.000057
-perfexp-cfa-peq-ll-noshare-reuse,corpus-100-500-1.txt,100,100,557.260000,135050000,10.000682
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-1-1.txt,100,100,1.000000,529900000,10.000150
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-10-1.txt,100,100,9.500000,408530000,10.000108
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-100-1.txt,100,100,106.370000,217530000,10.000334
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-2-1.txt,100,100,2.030000,463860000,10.000166
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-20-1.txt,100,100,22.960000,360110000,10.000008
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-200-1.txt,100,100,177.280000,176490000,10.000131
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-5-1.txt,100,100,5.270000,424710000,10.000106
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-50-1.txt,100,100,43.320000,290930000,10.000172
-perfexp-cfa-peq-ll-noshare-fresh,corpus-100-500-1.txt,100,100,557.260000,90430000,10.000065
-perfexp-cfa-pbv-ll-share-na,corpus-100-1-1.txt,xxx,100,1.000000,578040000,10.000159
-perfexp-cfa-pbv-ll-share-na,corpus-100-10-1.txt,xxx,100,9.500000,573200000,10.000098
-perfexp-cfa-pbv-ll-share-na,corpus-100-100-1.txt,xxx,100,106.370000,575160000,10.000149
-perfexp-cfa-pbv-ll-share-na,corpus-100-2-1.txt,xxx,100,2.030000,573780000,10.000134
-perfexp-cfa-pbv-ll-share-na,corpus-100-20-1.txt,xxx,100,22.960000,574500000,10.000156
-perfexp-cfa-pbv-ll-share-na,corpus-100-200-1.txt,xxx,100,177.280000,577170000,10.000125
-perfexp-cfa-pbv-ll-share-na,corpus-100-5-1.txt,xxx,100,5.270000,577820000,10.000046
-perfexp-cfa-pbv-ll-share-na,corpus-100-50-1.txt,xxx,100,43.320000,578770000,10.000033
-perfexp-cfa-pbv-ll-share-na,corpus-100-500-1.txt,xxx,100,557.260000,579540000,10.000128
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-1-1.txt,xxx,100,1.000000,191420000,10.000232
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-10-1.txt,xxx,100,9.500000,186330000,10.000046
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-100-1.txt,xxx,100,106.370000,164610000,10.000463
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-2-1.txt,xxx,100,2.030000,182390000,10.000409
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-20-1.txt,xxx,100,22.960000,182280000,10.000252
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-200-1.txt,xxx,100,177.280000,149840000,10.000281
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-5-1.txt,xxx,100,5.270000,152370000,10.000284
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-50-1.txt,xxx,100,43.320000,177430000,10.000397
-perfexp-cfa-pbv-ll-noshare-na,corpus-100-500-1.txt,xxx,100,557.260000,113440000,10.000150
-perfexp-stl-pta-na-na-reuse,corpus-100-1-1.txt,100,100,1.000000,152870000,10.000280
-perfexp-stl-pta-na-na-reuse,corpus-100-10-1.txt,100,100,9.500000,98530000,10.000299
-perfexp-stl-pta-na-na-reuse,corpus-100-100-1.txt,100,100,106.370000,16690000,10.005783
-perfexp-stl-pta-na-na-reuse,corpus-100-2-1.txt,100,100,2.030000,136230000,10.000196
-perfexp-stl-pta-na-na-reuse,corpus-100-20-1.txt,100,100,22.960000,62110000,10.001423
-perfexp-stl-pta-na-na-reuse,corpus-100-200-1.txt,100,100,177.280000,8960000,10.005548
-perfexp-stl-pta-na-na-reuse,corpus-100-5-1.txt,100,100,5.270000,104790000,10.000889
-perfexp-stl-pta-na-na-reuse,corpus-100-50-1.txt,100,100,43.320000,39170000,10.000011
-perfexp-stl-pta-na-na-reuse,corpus-100-500-1.txt,100,100,557.260000,3100000,10.015093
-perfexp-stl-pta-na-na-fresh,corpus-100-1-1.txt,100,100,1.000000,154450000,10.000054
-perfexp-stl-pta-na-na-fresh,corpus-100-10-1.txt,100,100,9.500000,96570000,10.000834
-perfexp-stl-pta-na-na-fresh,corpus-100-100-1.txt,100,100,106.370000,16400000,10.000697
-perfexp-stl-pta-na-na-fresh,corpus-100-2-1.txt,100,100,2.030000,133450000,10.000440
-perfexp-stl-pta-na-na-fresh,corpus-100-20-1.txt,100,100,22.960000,62540000,10.001476
-perfexp-stl-pta-na-na-fresh,corpus-100-200-1.txt,100,100,177.280000,8960000,10.006817
-perfexp-stl-pta-na-na-fresh,corpus-100-5-1.txt,100,100,5.270000,106470000,10.000109
-perfexp-stl-pta-na-na-fresh,corpus-100-50-1.txt,100,100,43.320000,37460000,10.000100
-perfexp-stl-pta-na-na-fresh,corpus-100-500-1.txt,100,100,557.260000,3090000,10.000541
-perfexp-stl-peq-na-na-reuse,corpus-100-1-1.txt,100,100,1.000000,863350000,10.000092
-perfexp-stl-peq-na-na-reuse,corpus-100-10-1.txt,100,100,9.500000,471070000,10.000189
-perfexp-stl-peq-na-na-reuse,corpus-100-100-1.txt,100,100,106.370000,287660000,10.000105
-perfexp-stl-peq-na-na-reuse,corpus-100-2-1.txt,100,100,2.030000,669380000,10.000082
-perfexp-stl-peq-na-na-reuse,corpus-100-20-1.txt,100,100,22.960000,432290000,10.000131
-perfexp-stl-peq-na-na-reuse,corpus-100-200-1.txt,100,100,177.280000,241690000,10.000290
-perfexp-stl-peq-na-na-reuse,corpus-100-5-1.txt,100,100,5.270000,510990000,10.000082
-perfexp-stl-peq-na-na-reuse,corpus-100-50-1.txt,100,100,43.320000,396380000,10.000235
-perfexp-stl-peq-na-na-reuse,corpus-100-500-1.txt,100,100,557.260000,135830000,10.000603
-perfexp-stl-peq-na-na-fresh,corpus-100-1-1.txt,100,100,1.000000,785420000,10.000062
-perfexp-stl-peq-na-na-fresh,corpus-100-10-1.txt,100,100,9.500000,418030000,10.000094
-perfexp-stl-peq-na-na-fresh,corpus-100-100-1.txt,100,100,106.370000,225290000,10.000237
-perfexp-stl-peq-na-na-fresh,corpus-100-2-1.txt,100,100,2.030000,550120000,10.000151
-perfexp-stl-peq-na-na-fresh,corpus-100-20-1.txt,100,100,22.960000,386080000,10.000206
-perfexp-stl-peq-na-na-fresh,corpus-100-200-1.txt,100,100,177.280000,176890000,10.000155
-perfexp-stl-peq-na-na-fresh,corpus-100-5-1.txt,100,100,5.270000,441830000,10.000135
-perfexp-stl-peq-na-na-fresh,corpus-100-50-1.txt,100,100,43.320000,310200000,10.000299
-perfexp-stl-peq-na-na-fresh,corpus-100-500-1.txt,100,100,557.260000,90360000,10.000474
-perfexp-stl-pbv-na-na-na,corpus-100-1-1.txt,xxx,100,1.000000,1267670000,10.000039
-perfexp-stl-pbv-na-na-na,corpus-100-10-1.txt,xxx,100,9.500000,482210000,10.000013
-perfexp-stl-pbv-na-na-na,corpus-100-100-1.txt,xxx,100,106.370000,268680000,10.000097
-perfexp-stl-pbv-na-na-na,corpus-100-2-1.txt,xxx,100,2.030000,806650000,10.000104
-perfexp-stl-pbv-na-na-na,corpus-100-20-1.txt,xxx,100,22.960000,369490000,10.000159
-perfexp-stl-pbv-na-na-na,corpus-100-200-1.txt,xxx,100,177.280000,227020000,10.000244
-perfexp-stl-pbv-na-na-na,corpus-100-5-1.txt,xxx,100,5.270000,534150000,10.000061
-perfexp-stl-pbv-na-na-na,corpus-100-50-1.txt,xxx,100,43.320000,298950000,10.000190
-perfexp-stl-pbv-na-na-na,corpus-100-500-1.txt,xxx,100,557.260000,158310000,10.000104
+perfexp-cfa-pta-ll-share-reuse,corpus-100-1-1.txt,100,100,1.000000,220120000,10.000178
+perfexp-cfa-pta-ll-share-reuse,corpus-100-10-1.txt,100,100,9.500000,177430000,10.000414
+perfexp-cfa-pta-ll-share-reuse,corpus-100-100-1.txt,100,100,106.370000,142410000,10.000162
+perfexp-cfa-pta-ll-share-reuse,corpus-100-2-1.txt,100,100,2.030000,195500000,10.000161
+perfexp-cfa-pta-ll-share-reuse,corpus-100-20-1.txt,100,100,22.960000,164560000,10.000548
+perfexp-cfa-pta-ll-share-reuse,corpus-100-200-1.txt,100,100,177.280000,122260000,10.000279
+perfexp-cfa-pta-ll-share-reuse,corpus-100-5-1.txt,100,100,5.270000,193960000,10.000071
+perfexp-cfa-pta-ll-share-reuse,corpus-100-50-1.txt,100,100,43.320000,163430000,10.000175
+perfexp-cfa-pta-ll-share-reuse,corpus-100-500-1.txt,100,100,557.260000,87960000,10.001073
+perfexp-cfa-pta-ll-share-reuse,corpus-1-1-1.txt,100,1,1.000000,224420000,10.000135
+perfexp-cfa-pta-ll-share-reuse,corpus-1-10-1.txt,100,1,10.000000,223740000,10.000014
+perfexp-cfa-pta-ll-share-reuse,corpus-1-100-1.txt,100,1,100.000000,153300000,10.000091
+perfexp-cfa-pta-ll-share-reuse,corpus-1-2-1.txt,100,1,2.000000,223430000,10.000120
+perfexp-cfa-pta-ll-share-reuse,corpus-1-20-1.txt,100,1,20.000000,210640000,10.000385
+perfexp-cfa-pta-ll-share-reuse,corpus-1-200-1.txt,100,1,200.000000,129790000,10.000596
+perfexp-cfa-pta-ll-share-reuse,corpus-1-5-1.txt,100,1,5.000000,222850000,10.000361
+perfexp-cfa-pta-ll-share-reuse,corpus-1-50-1.txt,100,1,50.000000,201700000,10.000220
+perfexp-cfa-pta-ll-share-reuse,corpus-1-500-1.txt,100,1,500.000000,110000000,10.000407
+perfexp-cfa-pta-ll-share-fresh,corpus-100-1-1.txt,100,100,1.000000,225030000,10.000360
+perfexp-cfa-pta-ll-share-fresh,corpus-100-10-1.txt,100,100,9.500000,192640000,10.000254
+perfexp-cfa-pta-ll-share-fresh,corpus-100-100-1.txt,100,100,106.370000,143960000,10.000633
+perfexp-cfa-pta-ll-share-fresh,corpus-100-2-1.txt,100,100,2.030000,204500000,10.000450
+perfexp-cfa-pta-ll-share-fresh,corpus-100-20-1.txt,100,100,22.960000,185400000,10.000274
+perfexp-cfa-pta-ll-share-fresh,corpus-100-200-1.txt,100,100,177.280000,126420000,10.000791
+perfexp-cfa-pta-ll-share-fresh,corpus-100-5-1.txt,100,100,5.270000,194450000,10.000396
+perfexp-cfa-pta-ll-share-fresh,corpus-100-50-1.txt,100,100,43.320000,173140000,10.000364
+perfexp-cfa-pta-ll-share-fresh,corpus-100-500-1.txt,100,100,557.260000,92390000,10.000098
+perfexp-cfa-pta-ll-share-fresh,corpus-1-1-1.txt,100,1,1.000000,222210000,10.000426
+perfexp-cfa-pta-ll-share-fresh,corpus-1-10-1.txt,100,1,10.000000,209110000,10.000235
+perfexp-cfa-pta-ll-share-fresh,corpus-1-100-1.txt,100,1,100.000000,154750000,10.000076
+perfexp-cfa-pta-ll-share-fresh,corpus-1-2-1.txt,100,1,2.000000,222030000,10.000114
+perfexp-cfa-pta-ll-share-fresh,corpus-1-20-1.txt,100,1,20.000000,208680000,10.000050
+perfexp-cfa-pta-ll-share-fresh,corpus-1-200-1.txt,100,1,200.000000,133490000,10.000231
+perfexp-cfa-pta-ll-share-fresh,corpus-1-5-1.txt,100,1,5.000000,217740000,10.000425
+perfexp-cfa-pta-ll-share-fresh,corpus-1-50-1.txt,100,1,50.000000,200340000,10.000126
+perfexp-cfa-pta-ll-share-fresh,corpus-1-500-1.txt,100,1,500.000000,109570000,10.000365
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-1-1.txt,100,100,1.000000,146130000,10.000557
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-10-1.txt,100,100,9.500000,110430000,10.000456
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-100-1.txt,100,100,106.370000,17440000,10.003114
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-2-1.txt,100,100,2.030000,139540000,10.000128
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-20-1.txt,100,100,22.960000,70380000,10.000395
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-200-1.txt,100,100,177.280000,8670000,10.001712
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-5-1.txt,100,100,5.270000,127040000,10.000370
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-50-1.txt,100,100,43.320000,44250000,10.002214
+perfexp-cfa-pta-ll-noshare-reuse,corpus-100-500-1.txt,100,100,557.260000,3290000,10.007370
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-1-1.txt,100,1,1.000000,139870000,10.000356
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-10-1.txt,100,1,10.000000,115500000,10.000281
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-100-1.txt,100,1,100.000000,18830000,10.003277
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-2-1.txt,100,1,2.000000,144880000,10.000426
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-20-1.txt,100,1,20.000000,82050000,10.001071
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-200-1.txt,100,1,200.000000,8870000,10.002904
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-5-1.txt,100,1,5.000000,138400000,10.000130
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-50-1.txt,100,1,50.000000,38130000,10.002351
+perfexp-cfa-pta-ll-noshare-reuse,corpus-1-500-1.txt,100,1,500.000000,3890000,10.003849
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-1-1.txt,100,100,1.000000,143100000,10.000056
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-10-1.txt,100,100,9.500000,97990000,10.000081
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-100-1.txt,100,100,106.370000,16950000,10.004190
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-2-1.txt,100,100,2.030000,135210000,10.000137
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-20-1.txt,100,100,22.960000,69270000,10.000092
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-200-1.txt,100,100,177.280000,8840000,10.000491
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-5-1.txt,100,100,5.270000,112610000,10.000397
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-50-1.txt,100,100,43.320000,42480000,10.001402
+perfexp-cfa-pta-ll-noshare-fresh,corpus-100-500-1.txt,100,100,557.260000,3250000,10.027871
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-1-1.txt,100,1,1.000000,139830000,10.000681
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-10-1.txt,100,1,10.000000,102320000,10.000624
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-100-1.txt,100,1,100.000000,17610000,10.000917
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-2-1.txt,100,1,2.000000,134520000,10.000287
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-20-1.txt,100,1,20.000000,78150000,10.000982
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-200-1.txt,100,1,200.000000,8930000,10.010066
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-5-1.txt,100,1,5.000000,119920000,10.000537
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-50-1.txt,100,1,50.000000,38540000,10.001545
+perfexp-cfa-pta-ll-noshare-fresh,corpus-1-500-1.txt,100,1,500.000000,3900000,10.024468
+perfexp-cfa-peq-ll-share-reuse,corpus-100-1-1.txt,100,100,1.000000,580710000,10.000065
+perfexp-cfa-peq-ll-share-reuse,corpus-100-10-1.txt,100,100,9.500000,430790000,10.000116
+perfexp-cfa-peq-ll-share-reuse,corpus-100-100-1.txt,100,100,106.370000,247640000,10.000266
+perfexp-cfa-peq-ll-share-reuse,corpus-100-2-1.txt,100,100,2.030000,464050000,10.000189
+perfexp-cfa-peq-ll-share-reuse,corpus-100-20-1.txt,100,100,22.960000,377820000,10.000065
+perfexp-cfa-peq-ll-share-reuse,corpus-100-200-1.txt,100,100,177.280000,195030000,10.000477
+perfexp-cfa-peq-ll-share-reuse,corpus-100-5-1.txt,100,100,5.270000,430190000,10.000121
+perfexp-cfa-peq-ll-share-reuse,corpus-100-50-1.txt,100,100,43.320000,331580000,10.000295
+perfexp-cfa-peq-ll-share-reuse,corpus-100-500-1.txt,100,100,557.260000,123230000,10.000186
+perfexp-cfa-peq-ll-share-reuse,corpus-1-1-1.txt,100,1,1.000000,572750000,10.000172
+perfexp-cfa-peq-ll-share-reuse,corpus-1-10-1.txt,100,1,10.000000,558790000,10.000101
+perfexp-cfa-peq-ll-share-reuse,corpus-1-100-1.txt,100,1,100.000000,291780000,10.000230
+perfexp-cfa-peq-ll-share-reuse,corpus-1-2-1.txt,100,1,2.000000,571220000,10.000023
+perfexp-cfa-peq-ll-share-reuse,corpus-1-20-1.txt,100,1,20.000000,461020000,10.000045
+perfexp-cfa-peq-ll-share-reuse,corpus-1-200-1.txt,100,1,200.000000,220880000,10.000260
+perfexp-cfa-peq-ll-share-reuse,corpus-1-5-1.txt,100,1,5.000000,555180000,10.000153
+perfexp-cfa-peq-ll-share-reuse,corpus-1-50-1.txt,100,1,50.000000,433290000,10.000123
+perfexp-cfa-peq-ll-share-reuse,corpus-1-500-1.txt,100,1,500.000000,165210000,10.000260
+perfexp-cfa-peq-ll-share-fresh,corpus-100-1-1.txt,100,100,1.000000,591360000,10.000013
+perfexp-cfa-peq-ll-share-fresh,corpus-100-10-1.txt,100,100,9.500000,432580000,10.000103
+perfexp-cfa-peq-ll-share-fresh,corpus-100-100-1.txt,100,100,106.370000,253100000,10.000162
+perfexp-cfa-peq-ll-share-fresh,corpus-100-2-1.txt,100,100,2.030000,470710000,10.000018
+perfexp-cfa-peq-ll-share-fresh,corpus-100-20-1.txt,100,100,22.960000,381580000,10.000172
+perfexp-cfa-peq-ll-share-fresh,corpus-100-200-1.txt,100,100,177.280000,197910000,10.000400
+perfexp-cfa-peq-ll-share-fresh,corpus-100-5-1.txt,100,100,5.270000,437470000,10.000123
+perfexp-cfa-peq-ll-share-fresh,corpus-100-50-1.txt,100,100,43.320000,337150000,10.000065
+perfexp-cfa-peq-ll-share-fresh,corpus-100-500-1.txt,100,100,557.260000,127310000,10.000685
+perfexp-cfa-peq-ll-share-fresh,corpus-1-1-1.txt,100,1,1.000000,581300000,10.000103
+perfexp-cfa-peq-ll-share-fresh,corpus-1-10-1.txt,100,1,10.000000,566650000,10.000166
+perfexp-cfa-peq-ll-share-fresh,corpus-1-100-1.txt,100,1,100.000000,295340000,10.000202
+perfexp-cfa-peq-ll-share-fresh,corpus-1-2-1.txt,100,1,2.000000,579220000,10.000012
+perfexp-cfa-peq-ll-share-fresh,corpus-1-20-1.txt,100,1,20.000000,470040000,10.000180
+perfexp-cfa-peq-ll-share-fresh,corpus-1-200-1.txt,100,1,200.000000,223060000,10.000188
+perfexp-cfa-peq-ll-share-fresh,corpus-1-5-1.txt,100,1,5.000000,563440000,10.000100
+perfexp-cfa-peq-ll-share-fresh,corpus-1-50-1.txt,100,1,50.000000,438260000,10.000200
+perfexp-cfa-peq-ll-share-fresh,corpus-1-500-1.txt,100,1,500.000000,166830000,10.000225
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-1-1.txt,100,100,1.000000,603080000,10.000107
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-10-1.txt,100,100,9.500000,439540000,10.000078
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-100-1.txt,100,100,106.370000,279990000,10.000309
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-2-1.txt,100,100,2.030000,509720000,10.000099
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-20-1.txt,100,100,22.960000,405590000,10.000206
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-200-1.txt,100,100,177.280000,230400000,10.000124
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-5-1.txt,100,100,5.270000,454270000,10.000057
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-50-1.txt,100,100,43.320000,375090000,10.000225
+perfexp-cfa-peq-ll-noshare-reuse,corpus-100-500-1.txt,100,100,557.260000,134440000,10.000290
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-1-1.txt,100,1,1.000000,588100000,10.000124
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-10-1.txt,100,1,10.000000,577110000,10.000002
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-100-1.txt,100,1,100.000000,319990000,10.000151
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-2-1.txt,100,1,2.000000,586540000,10.000010
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-20-1.txt,100,1,20.000000,480940000,10.000047
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-200-1.txt,100,1,200.000000,300590000,10.000162
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-5-1.txt,100,1,5.000000,577530000,10.000120
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-50-1.txt,100,1,50.000000,454950000,10.000114
+perfexp-cfa-peq-ll-noshare-reuse,corpus-1-500-1.txt,100,1,500.000000,186210000,10.000221
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-1-1.txt,100,100,1.000000,546170000,10.000079
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-10-1.txt,100,100,9.500000,403120000,10.000222
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-100-1.txt,100,100,106.370000,214740000,10.000444
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-2-1.txt,100,100,2.030000,449080000,10.000157
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-20-1.txt,100,100,22.960000,351690000,10.000146
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-200-1.txt,100,100,177.280000,174630000,10.000540
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-5-1.txt,100,100,5.270000,419160000,10.000085
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-50-1.txt,100,100,43.320000,296590000,10.000200
+perfexp-cfa-peq-ll-noshare-fresh,corpus-100-500-1.txt,100,100,557.260000,78000000,10.000539
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-1-1.txt,100,1,1.000000,541890000,10.000021
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-10-1.txt,100,1,10.000000,511140000,10.000142
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-100-1.txt,100,1,100.000000,243680000,10.000252
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-2-1.txt,100,1,2.000000,532730000,10.000135
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-20-1.txt,100,1,20.000000,413610000,10.000113
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-200-1.txt,100,1,200.000000,192770000,10.000185
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-5-1.txt,100,1,5.000000,495980000,10.000162
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-50-1.txt,100,1,50.000000,367590000,10.000269
+perfexp-cfa-peq-ll-noshare-fresh,corpus-1-500-1.txt,100,1,500.000000,111560000,10.000455
+perfexp-cfa-pbv-ll-share-na,corpus-100-1-1.txt,xxx,100,1.000000,638780000,10.000008
+perfexp-cfa-pbv-ll-share-na,corpus-100-10-1.txt,xxx,100,9.500000,637840000,10.000004
+perfexp-cfa-pbv-ll-share-na,corpus-100-100-1.txt,xxx,100,106.370000,635130000,10.000003
+perfexp-cfa-pbv-ll-share-na,corpus-100-2-1.txt,xxx,100,2.030000,639810000,10.000140
+perfexp-cfa-pbv-ll-share-na,corpus-100-20-1.txt,xxx,100,22.960000,552670000,10.000089
+perfexp-cfa-pbv-ll-share-na,corpus-100-200-1.txt,xxx,100,177.280000,639550000,10.000019
+perfexp-cfa-pbv-ll-share-na,corpus-100-5-1.txt,xxx,100,5.270000,636230000,10.000044
+perfexp-cfa-pbv-ll-share-na,corpus-100-50-1.txt,xxx,100,43.320000,631470000,10.000125
+perfexp-cfa-pbv-ll-share-na,corpus-100-500-1.txt,xxx,100,557.260000,628330000,10.000127
+perfexp-cfa-pbv-ll-share-na,corpus-1-1-1.txt,xxx,1,1.000000,589760000,10.000044
+perfexp-cfa-pbv-ll-share-na,corpus-1-10-1.txt,xxx,1,10.000000,589790000,10.000151
+perfexp-cfa-pbv-ll-share-na,corpus-1-100-1.txt,xxx,1,100.000000,587540000,10.000128
+perfexp-cfa-pbv-ll-share-na,corpus-1-2-1.txt,xxx,1,2.000000,580790000,10.000102
+perfexp-cfa-pbv-ll-share-na,corpus-1-20-1.txt,xxx,1,20.000000,586470000,10.000154
+perfexp-cfa-pbv-ll-share-na,corpus-1-200-1.txt,xxx,1,200.000000,587510000,10.000005
+perfexp-cfa-pbv-ll-share-na,corpus-1-5-1.txt,xxx,1,5.000000,582120000,10.000163
+perfexp-cfa-pbv-ll-share-na,corpus-1-50-1.txt,xxx,1,50.000000,587990000,10.000127
+perfexp-cfa-pbv-ll-share-na,corpus-1-500-1.txt,xxx,1,500.000000,587590000,10.000046
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-1-1.txt,xxx,100,1.000000,218340000,10.000321
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-10-1.txt,xxx,100,9.500000,189550000,10.000174
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-100-1.txt,xxx,100,106.370000,169280000,10.000141
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-2-1.txt,xxx,100,2.030000,197840000,10.000383
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-20-1.txt,xxx,100,22.960000,182700000,10.000041
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-200-1.txt,xxx,100,177.280000,157120000,10.000522
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-5-1.txt,xxx,100,5.270000,155160000,10.000322
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-50-1.txt,xxx,100,43.320000,179110000,10.000218
+perfexp-cfa-pbv-ll-noshare-na,corpus-100-500-1.txt,xxx,100,557.260000,113620000,10.000140
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-1-1.txt,xxx,1,1.000000,216270000,10.000367
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-10-1.txt,xxx,1,10.000000,214390000,10.000157
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-100-1.txt,xxx,1,100.000000,165440000,10.000095
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-2-1.txt,xxx,1,2.000000,217150000,10.000044
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-20-1.txt,xxx,1,20.000000,216760000,10.000321
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-200-1.txt,xxx,1,200.000000,176930000,10.000100
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-5-1.txt,xxx,1,5.000000,200840000,10.000229
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-50-1.txt,xxx,1,50.000000,212960000,10.000273
+perfexp-cfa-pbv-ll-noshare-na,corpus-1-500-1.txt,xxx,1,500.000000,163340000,10.000196
+perfexp-stl-pta-na-na-reuse,corpus-100-1-1.txt,100,100,1.000000,151210000,10.000032
+perfexp-stl-pta-na-na-reuse,corpus-100-10-1.txt,100,100,9.500000,92400000,10.000662
+perfexp-stl-pta-na-na-reuse,corpus-100-100-1.txt,100,100,106.370000,16700000,10.003595
+perfexp-stl-pta-na-na-reuse,corpus-100-2-1.txt,100,100,2.030000,132700000,10.000666
+perfexp-stl-pta-na-na-reuse,corpus-100-20-1.txt,100,100,22.960000,61670000,10.001135
+perfexp-stl-pta-na-na-reuse,corpus-100-200-1.txt,100,100,177.280000,8950000,10.005903
+perfexp-stl-pta-na-na-reuse,corpus-100-5-1.txt,100,100,5.270000,105760000,10.000126
+perfexp-stl-pta-na-na-reuse,corpus-100-50-1.txt,100,100,43.320000,38020000,10.001290
+perfexp-stl-pta-na-na-reuse,corpus-100-500-1.txt,100,100,557.260000,3080000,10.009583
+perfexp-stl-pta-na-na-reuse,corpus-1-1-1.txt,100,1,1.000000,150070000,10.000505
+perfexp-stl-pta-na-na-reuse,corpus-1-10-1.txt,100,1,10.000000,96240000,10.000747
+perfexp-stl-pta-na-na-reuse,corpus-1-100-1.txt,100,1,100.000000,17380000,10.005677
+perfexp-stl-pta-na-na-reuse,corpus-1-2-1.txt,100,1,2.000000,136340000,10.000556
+perfexp-stl-pta-na-na-reuse,corpus-1-20-1.txt,100,1,20.000000,69290000,10.000979
+perfexp-stl-pta-na-na-reuse,corpus-1-200-1.txt,100,1,200.000000,9140000,10.005445
+perfexp-stl-pta-na-na-reuse,corpus-1-5-1.txt,100,1,5.000000,114030000,10.000605
+perfexp-stl-pta-na-na-reuse,corpus-1-50-1.txt,100,1,50.000000,33470000,10.000871
+perfexp-stl-pta-na-na-reuse,corpus-1-500-1.txt,100,1,500.000000,3760000,10.021431
+perfexp-stl-pta-na-na-fresh,corpus-100-1-1.txt,100,100,1.000000,151890000,10.000693
+perfexp-stl-pta-na-na-fresh,corpus-100-10-1.txt,100,100,9.500000,97910000,10.000289
+perfexp-stl-pta-na-na-fresh,corpus-100-100-1.txt,100,100,106.370000,16740000,10.000756
+perfexp-stl-pta-na-na-fresh,corpus-100-2-1.txt,100,100,2.030000,134890000,10.000666
+perfexp-stl-pta-na-na-fresh,corpus-100-20-1.txt,100,100,22.960000,61040000,10.000514
+perfexp-stl-pta-na-na-fresh,corpus-100-200-1.txt,100,100,177.280000,8950000,10.004888
+perfexp-stl-pta-na-na-fresh,corpus-100-5-1.txt,100,100,5.270000,101780000,10.000043
+perfexp-stl-pta-na-na-fresh,corpus-100-50-1.txt,100,100,43.320000,38440000,10.000510
+perfexp-stl-pta-na-na-fresh,corpus-100-500-1.txt,100,100,557.260000,3060000,10.007733
+perfexp-stl-pta-na-na-fresh,corpus-1-1-1.txt,100,1,1.000000,149360000,10.000168
+perfexp-stl-pta-na-na-fresh,corpus-1-10-1.txt,100,1,10.000000,98400000,10.000118
+perfexp-stl-pta-na-na-fresh,corpus-1-100-1.txt,100,1,100.000000,17440000,10.004379
+perfexp-stl-pta-na-na-fresh,corpus-1-2-1.txt,100,1,2.000000,130340000,10.000520
+perfexp-stl-pta-na-na-fresh,corpus-1-20-1.txt,100,1,20.000000,69280000,10.001377
+perfexp-stl-pta-na-na-fresh,corpus-1-200-1.txt,100,1,200.000000,9070000,10.004963
+perfexp-stl-pta-na-na-fresh,corpus-1-5-1.txt,100,1,5.000000,114390000,10.000315
+perfexp-stl-pta-na-na-fresh,corpus-1-50-1.txt,100,1,50.000000,34350000,10.001033
+perfexp-stl-pta-na-na-fresh,corpus-1-500-1.txt,100,1,500.000000,3720000,10.009015
+perfexp-stl-peq-na-na-reuse,corpus-100-1-1.txt,100,100,1.000000,867730000,10.000040
+perfexp-stl-peq-na-na-reuse,corpus-100-10-1.txt,100,100,9.500000,470370000,10.000155
+perfexp-stl-peq-na-na-reuse,corpus-100-100-1.txt,100,100,106.370000,287440000,10.000190
+perfexp-stl-peq-na-na-reuse,corpus-100-2-1.txt,100,100,2.030000,667180000,10.000145
+perfexp-stl-peq-na-na-reuse,corpus-100-20-1.txt,100,100,22.960000,430260000,10.000102
+perfexp-stl-peq-na-na-reuse,corpus-100-200-1.txt,100,100,177.280000,232720000,10.000418
+perfexp-stl-peq-na-na-reuse,corpus-100-5-1.txt,100,100,5.270000,515130000,10.000118
+perfexp-stl-peq-na-na-reuse,corpus-100-50-1.txt,100,100,43.320000,401280000,10.000122
+perfexp-stl-peq-na-na-reuse,corpus-100-500-1.txt,100,100,557.260000,135350000,10.000692
+perfexp-stl-peq-na-na-reuse,corpus-1-1-1.txt,100,1,1.000000,847560000,10.000010
+perfexp-stl-peq-na-na-reuse,corpus-1-10-1.txt,100,1,10.000000,641250000,10.000095
+perfexp-stl-peq-na-na-reuse,corpus-1-100-1.txt,100,1,100.000000,300130000,10.000199
+perfexp-stl-peq-na-na-reuse,corpus-1-2-1.txt,100,1,2.000000,680950000,10.000050
+perfexp-stl-peq-na-na-reuse,corpus-1-20-1.txt,100,1,20.000000,515190000,10.000051
+perfexp-stl-peq-na-na-reuse,corpus-1-200-1.txt,100,1,200.000000,271800000,10.000194
+perfexp-stl-peq-na-na-reuse,corpus-1-5-1.txt,100,1,5.000000,611640000,10.000133
+perfexp-stl-peq-na-na-reuse,corpus-1-50-1.txt,100,1,50.000000,483780000,10.000084
+perfexp-stl-peq-na-na-reuse,corpus-1-500-1.txt,100,1,500.000000,191470000,10.000243
+perfexp-stl-peq-na-na-fresh,corpus-100-1-1.txt,100,100,1.000000,779650000,10.000085
+perfexp-stl-peq-na-na-fresh,corpus-100-10-1.txt,100,100,9.500000,419300000,10.000184
+perfexp-stl-peq-na-na-fresh,corpus-100-100-1.txt,100,100,106.370000,224270000,10.000410
+perfexp-stl-peq-na-na-fresh,corpus-100-2-1.txt,100,100,2.030000,545330000,10.000073
+perfexp-stl-peq-na-na-fresh,corpus-100-20-1.txt,100,100,22.960000,385000000,10.000210
+perfexp-stl-peq-na-na-fresh,corpus-100-200-1.txt,100,100,177.280000,174520000,10.000360
+perfexp-stl-peq-na-na-fresh,corpus-100-5-1.txt,100,100,5.270000,443460000,10.000165
+perfexp-stl-peq-na-na-fresh,corpus-100-50-1.txt,100,100,43.320000,310460000,10.000174
+perfexp-stl-peq-na-na-fresh,corpus-100-500-1.txt,100,100,557.260000,92820000,10.000352
+perfexp-stl-peq-na-na-fresh,corpus-1-1-1.txt,100,1,1.000000,774230000,10.000110
+perfexp-stl-peq-na-na-fresh,corpus-1-10-1.txt,100,1,10.000000,554850000,10.000064
+perfexp-stl-peq-na-na-fresh,corpus-1-100-1.txt,100,1,100.000000,227540000,10.000041
+perfexp-stl-peq-na-na-fresh,corpus-1-2-1.txt,100,1,2.000000,616830000,10.000134
+perfexp-stl-peq-na-na-fresh,corpus-1-20-1.txt,100,1,20.000000,436800000,10.000038
+perfexp-stl-peq-na-na-fresh,corpus-1-200-1.txt,100,1,200.000000,185050000,10.000439
+perfexp-stl-peq-na-na-fresh,corpus-1-5-1.txt,100,1,5.000000,569030000,10.000125
+perfexp-stl-peq-na-na-fresh,corpus-1-50-1.txt,100,1,50.000000,387710000,10.000249
+perfexp-stl-peq-na-na-fresh,corpus-1-500-1.txt,100,1,500.000000,113890000,10.000075
+perfexp-stl-pbv-na-na-na,corpus-100-1-1.txt,xxx,100,1.000000,1267570000,10.000072
+perfexp-stl-pbv-na-na-na,corpus-100-10-1.txt,xxx,100,9.500000,476260000,10.000192
+perfexp-stl-pbv-na-na-na,corpus-100-100-1.txt,xxx,100,106.370000,271870000,10.000171
+perfexp-stl-pbv-na-na-na,corpus-100-2-1.txt,xxx,100,2.030000,807830000,10.000110
+perfexp-stl-pbv-na-na-na,corpus-100-20-1.txt,xxx,100,22.960000,373160000,10.000221
+perfexp-stl-pbv-na-na-na,corpus-100-200-1.txt,xxx,100,177.280000,233700000,10.000081
+perfexp-stl-pbv-na-na-na,corpus-100-5-1.txt,xxx,100,5.270000,536240000,10.000165
+perfexp-stl-pbv-na-na-na,corpus-100-50-1.txt,xxx,100,43.320000,297400000,10.000317
+perfexp-stl-pbv-na-na-na,corpus-100-500-1.txt,xxx,100,557.260000,159500000,10.000290
+perfexp-stl-pbv-na-na-na,corpus-1-1-1.txt,xxx,1,1.000000,1089370000,10.000024
+perfexp-stl-pbv-na-na-na,corpus-1-10-1.txt,xxx,1,10.000000,722490000,10.000040
+perfexp-stl-pbv-na-na-na,corpus-1-100-1.txt,xxx,1,100.000000,311250000,10.000116
+perfexp-stl-pbv-na-na-na,corpus-1-2-1.txt,xxx,1,2.000000,747630000,10.000103
+perfexp-stl-pbv-na-na-na,corpus-1-20-1.txt,xxx,1,20.000000,348820000,10.000149
+perfexp-stl-pbv-na-na-na,corpus-1-200-1.txt,xxx,1,200.000000,302220000,10.000223
+perfexp-stl-pbv-na-na-na,corpus-1-5-1.txt,xxx,1,5.000000,725430000,10.000110
+perfexp-stl-pbv-na-na-na,corpus-1-50-1.txt,xxx,1,50.000000,335730000,10.000280
+perfexp-stl-pbv-na-na-na,corpus-1-500-1.txt,xxx,1,500.000000,258380000,10.000052
Index: doc/theses/mike_brooks_MMath/pictures/ArrayOfPtr.fig
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/ArrayOfPtr.fig	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/pictures/ArrayOfPtr.fig	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,40 @@
+#FIG 3.2  Produced by xfig version 3.2.7b
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1500 1200 2250 1200 2250 1350 1500 1350 1500 1200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1650 1200 1650 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1800 1200 1800 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1950 1200 1950 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2100 1200 2100 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 60.00
+	 2175 1275 2175 1500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 60.00
+	 1575 1275 1575 1500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 60.00
+	 1725 1275 1725 1500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 60.00
+	 1875 1275 1875 1500
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 60.00
+	 2025 1275 2025 1500
+4 1 0 50 -1 4 12 0.0000 2 135 105 1575 1650 0\001
+4 1 0 50 -1 4 12 0.0000 2 135 105 1725 1650 1\001
+4 1 0 50 -1 4 12 0.0000 2 135 105 1875 1650 2\001
+4 1 0 50 -1 4 12 0.0000 2 135 105 2025 1650 3\001
+4 1 0 50 -1 4 12 0.0000 2 135 105 2175 1650 4\001
+4 2 0 50 -1 4 12 0.0000 2 150 210 1425 1325 ap\001
Index: doc/theses/mike_brooks_MMath/pictures/PtrToArray.fig
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/PtrToArray.fig	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/pictures/PtrToArray.fig	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,33 @@
+#FIG 3.2  Produced by xfig version 3.2.7b
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+6 1875 1200 2625 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2025 1200 2025 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2175 1200 2175 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2325 1200 2325 1350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2475 1200 2475 1350
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1875 1200 2625 1200 2625 1350 1875 1350 1875 1200
+4 1 0 50 -1 4 11 0.0000 2 135 105 2100 1335 1\001
+4 1 0 50 -1 4 11 0.0000 2 135 105 2250 1335 2\001
+4 1 0 50 -1 4 11 0.0000 2 135 105 2400 1335 3\001
+4 1 0 50 -1 4 11 0.0000 2 135 105 2550 1335 4\001
+4 1 0 50 -1 4 11 0.0000 2 135 105 1950 1335 0\001
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 1500 1200 1650 1200 1650 1350 1500 1350 1500 1200
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 45.00 60.00
+	 1575 1275 1875 1275
+4 2 0 50 -1 4 12 0.0000 2 150 210 1425 1325 pa\001
+4 0 0 50 -1 4 12 0.0000 2 105 105 2700 1325 a\001
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-allocn.csv
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-allocn.csv	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,37 +1,0 @@
-﻿run,test@corpus,test,corpus,heapGrowThreshold,concatsPerReset,corpusItemCount,corpusMeanLenChars, concatDoneActualCount , execTimeActualSec ,test-allvar,operation-idx,operation,sut,sut-platform,sut-cfa-level,suffix-cfa-sharing-alloc,sut-cfa-sharing,op-alloc,corpus-varsuffix,corpus-allvar,corpus-nstrs,corpus-varsuffix2,corpus-meanlen,corpus-runid,ops-per-sec,op-duration,memrowid,mem-amt,mem20,mem50,mem100,mem200,mem500
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-20-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-20-1.txt,0.02,xxx,1,20,, 10.0003450 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-20-1.txt,1-20-1,1,20-1,20,1,0.0,#DIV/0!,20-0.02,1035966,1035966,,,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-20-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-20-1.txt,0.05,xxx,1,20," 266,150,000 ", 10.0002880 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-20-1.txt,1-20-1,1,20-1,20,1,26614233.5,37.6,20-0.05,523966,523966,,,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-20-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-20-1.txt,0.1,xxx,1,20," 261,320,000 ", 10.0003420 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-20-1.txt,1-20-1,1,20-1,20,1,26131106.3,38.3,20-0.1,267966,267966,,,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-20-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-20-1.txt,0.2,xxx,1,20," 260,830,000 ", 10.0003730 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-20-1.txt,1-20-1,1,20-1,20,1,26082027.1,38.3,20-0.2,139966,139966,,,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-20-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-20-1.txt,0.5,xxx,1,20," 244,180,000 ", 10.0002010 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-20-1.txt,1-20-1,1,20-1,20,1,24417509.2,41.0,20-0.5,75966,75966,,,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-20-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-20-1.txt,0.9,xxx,1,20," 203,880,000 ", 10.0001060 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-20-1.txt,1-20-1,1,20-1,20,1,20387783.9,49.0,20-0.9,43966,43966,,,,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-50-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-50-1.txt,0.02,xxx,1,50,, 10.0000830 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-50-1.txt,1-50-1,1,50-1,50,1,0.0,#DIV/0!,50-0.02,4107966,,4107966,,,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-50-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-50-1.txt,0.05,xxx,1,50," 255,110,000 ", 10.0000460 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-50-1.txt,1-50-1,1,50-1,50,1,25510882.6,39.2,50-0.05,1035966,,1035966,,,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-50-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-50-1.txt,0.1,xxx,1,50," 250,770,000 ", 10.0003190 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-50-1.txt,1-50-1,1,50-1,50,1,25076200.1,39.9,50-0.1,523966,,523966,,,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-50-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-50-1.txt,0.2,xxx,1,50," 241,000,000 ", 10.0002030 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-50-1.txt,1-50-1,1,50-1,50,1,24099510.8,41.5,50-0.2,267966,,267966,,,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-50-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-50-1.txt,0.5,xxx,1,50," 227,630,000 ", 10.0002350 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-50-1.txt,1-50-1,1,50-1,50,1,22762465.1,43.9,50-0.5,139966,,139966,,,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-50-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-50-1.txt,0.9,xxx,1,50," 179,660,000 ", 10.0002830 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-50-1.txt,1-50-1,1,50-1,50,1,17965491.6,55.7,50-0.9,75966,,75966,,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-100-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-100-1.txt,0.02,xxx,1,100,, 10.0000150 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-100-1.txt,1-100-1,1,100-1,100,1,0.0,#DIV/0!,100-0.02,8203966,,,8203966,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-100-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-100-1.txt,0.05,xxx,1,100,, 10.0001890 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-100-1.txt,1-100-1,1,100-1,100,1,0.0,#DIV/0!,100-0.05,2059966,,,2059966,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-100-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-100-1.txt,0.1,xxx,1,100,200350000, 10.0001490 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-100-1.txt,1-100-1,1,100-1,100,1,20034701.5,49.9,100-0.1,1035966,,,1035966,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-100-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-100-1.txt,0.2,xxx,1,100,189490000, 10.0001740 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-100-1.txt,1-100-1,1,100-1,100,1,18948670.3,52.8,100-0.2,523966,,,523966,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-100-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-100-1.txt,0.5,xxx,1,100,177810000, 10.0004290 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-100-1.txt,1-100-1,1,100-1,100,1,17780237.2,56.2,100-0.5,267966,,,267966,,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-100-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-100-1.txt,0.9,xxx,1,100,145370000, 10.0005610 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-100-1.txt,1-100-1,1,100-1,100,1,14536184.5,68.8,100-0.9,139966,,,139966,,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-200-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-200-1.txt,0.02,xxx,1,200,, 10.0005350 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-200-1.txt,1-200-1,1,200-1,200,1,0.0,#DIV/0!,200-0.02,16395966,,,,16395966,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-200-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-200-1.txt,0.05,xxx,1,200,, 10.0005170 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-200-1.txt,1-200-1,1,200-1,200,1,0.0,#DIV/0!,200-0.05,4107966,,,,4107966,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-200-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-200-1.txt,0.1,xxx,1,200,165710000, 10.0001810 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-200-1.txt,1-200-1,1,200-1,200,1,16570700.1,60.3,200-0.1,2059966,,,,2059966,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-200-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-200-1.txt,0.2,xxx,1,200,160590000, 10.0001890 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-200-1.txt,1-200-1,1,200-1,200,1,16058696.5,62.3,200-0.2,1035966,,,,1035966,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-200-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-200-1.txt,0.5,xxx,1,200,150820000, 10.0006510 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-200-1.txt,1-200-1,1,200-1,200,1,15081018.2,66.3,200-0.5,523966,,,,523966,
-measurement-2022-02-02--22-33-38.csv,perfexp-cfa-pal-ll-share-na@corpus-1-200-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-200-1.txt,0.9,xxx,1,200,129830000, 10.0003600 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-200-1.txt,1-200-1,1,200-1,200,1,12982532.6,77.0,200-0.9,267966,,,,267966,
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-500-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-500-1.txt,0.02,xxx,1,500,, 10.0009100 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-500-1.txt,1-500-1,1,500-1,500,1,0.0,#DIV/0!,500-0.02,32779966,,,,,32779966
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-500-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-500-1.txt,0.05,xxx,1,500,, 10.0010940 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-500-1.txt,1-500-1,1,500-1,500,1,0.0,#DIV/0!,500-0.05,16395966,,,,,16395966
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-500-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-500-1.txt,0.1,xxx,1,500,, 10.0008590 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-500-1.txt,1-500-1,1,500-1,500,1,0.0,#DIV/0!,500-0.1,8203966,,,,,8203966
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-500-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-500-1.txt,0.2,xxx,1,500,, 10.0006990 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-500-1.txt,1-500-1,1,500-1,500,1,0.0,#DIV/0!,500-0.2,4107966,,,,,4107966
-,perfexp-cfa-pall-ll-share-na@corpus-1-500-1.txt,perfexp-cfa-pall-ll-share-na,corpus-1-500-1.txt,0.3,xxx,1,500," 116,530,000 ", 10.0008290 ,cfa-pall-ll-share-na,5,pal,cfal-ll-share-na,cfal,~na~,~na~,~na~,na,1-500-1.txt,1-500-1,1,500-1,500,1,11652034.0,85.8,500-0.3,2059966,,,,,2059966
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-500-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-500-1.txt,0.5,xxx,1,500,112530000, 10.0001000 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-500-1.txt,1-500-1,1,500-1,500,1,11252887.5,88.9,500-0.5,1035966,,,,,1035966
-measurement-2022-02-02--22-18-20.csv,perfexp-cfa-pal-ll-share-na@corpus-1-500-1.txt,perfexp-cfa-pal-ll-share-na,corpus-1-500-1.txt,0.99,xxx,1,500," 83,270,000 ", 10.0008190 ,cfa-pal-ll-share-na,5,pal,cfa-ll-share-na,cfa,ll,share-na,share,na,1-500-1.txt,1-500-1,1,500-1,500,1,8326318.1,120.1,500-0.99,523966,,,,,523966
-,,,,,,,,,,,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#VALUE!,#DIV/0!,#DIV/0!,#VALUE!,#VALUE!,,,,,
-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
-,,,,,,,,,,,,,,,,,,,,,,,,,,#VALUE!,,,,,,,
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-allocn.dat
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-allocn.dat	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,34 +1,0 @@
-"20"
-37.57387939	523966
-38.26856727	267966
-38.34057815	139966
-40.9542182	75966
-49.04897979	43966
-
-	
-"50"
-39.19895731	1035966
-39.87845037	523966
-41.49461826	267966
-43.93197294	139966
-55.66226762	75966
-
-	
-"100"
-49.91339656	1035966
-52.77415167	523966
-56.24221922	267966
-68.7938433	139966
-
-	
-"200"
-60.34748054	2059966
-62.27155489	1035966
-66.30852009	523966
-77.02657321	267966
-
-	
-"500"
-85.82192568	2059966
-88.86608016	1035966
-120.1011048	523966
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-pbv.csv
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-pbv.csv	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,18 +1,0 @@
-﻿operation,pbv,,,,
-sut-cfa-level,(Multiple Items),,,,
-op-alloc,(All),,,,
-sut-cfa-sharing,(All),,,,
-sut-platform,(All),,,,
-corpus-nstrs,(All),,,,
-,,,,,
-Average of op-duration,Column Labels,,,,
-Row Labels,cfa-ll-share-na,cfa-ll-noshare-na,stl-na-na-na,,
-1,17.7,181.9,7.9,,
-2,17.3,181.8,12.4,,
-5,17.1,183.9,20.8,,
-10,17.1,180.3,30.1,,
-20,17.7,185.4,51.1,,
-50,17.6,189.0,73.7,,1.441338888
-100,17.1,193.2,78.6,,1.066299805
-200,17.5,193.3,91.3,,1.16164566
-500,17.4,214.6,115.1,,1.261192388
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-pbv.dat
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-pbv.dat	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,34 +1,0 @@
-"{/Helvetica=15 C{/Symbol \42}} share"
-1	17.7		
-2	17.3		
-5	17.1		
-10	17.1		
-20	17.7		
-50	17.6
-100	17.1
-200	17.5
-500	17.4
-
-
-"{/Helvetica=15 C{/Symbol \42}} noshare"
-1	181.9		
-2	181.8		
-5	183.9		
-10	180.3		
-20	185.4		
-50	189.0
-100	193.2
-200	193.3
-500	214.6
-
-
-"STL"
-1	7.9		
-2	12.4		
-5	20.8		
-10	30.1		
-20	51.1		
-50	73.7
-100	78.6
-200	91.3
-500	115.1
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-peq-sharing.csv
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-peq-sharing.csv	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,20 +1,0 @@
-﻿operation,peq,,,,,,
-sut-cfa-level,(Multiple Items),,,,,,
-op-alloc,(All),,,,,,
-sut-cfa-sharing,(All),,,,,,
-sut-platform,(All),,,,,,
-,,,,,,,
-Average of op-duration,Column Labels,,,,,,
-Row Labels,cfa-ll-share-reuse,cfa-ll-share-fresh,stl-na-na-reuse,stl-na-na-fresh,,stlhi/cfa,cfa/stllo
-1,17.4,16.3,11.6,14.4,,0.88,1.50
-2,21.5,21.1,14.6,20.2,,0.96,1.47
-5,23.2,23.0,20.2,25.8,,1.12,1.15
-10,23.5,23.1,21.6,26.7,,1.15,1.09
-20,26.7,26.3,23.0,29.9,,1.14,1.16
-50,30.9,30.3,26.4,37.4,,1.23,1.17
-100,40.9,39.9,34.9,49.3,,1.23,1.17
-200,50.3,50.3,39.4,59.6,,1.18,1.28
-500,80.5,79.2,73.9,114.5,,1.45,1.09
-,,,,,,,
-,,,,,,,1.22
-,,,,,,,1.16
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-peq-sharing.dat
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-peq-sharing.dat	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,46 +1,0 @@
-"{/Helvetica=15 C{/Symbol \42} +=} share fresh"
-1	16.3
-2	21.1
-5	23.0
-10	23.1
-20	26.3
-50	30.3
-100	39.9
-200	50.3
-500	79.2
-
-
-"{/Helvetica=15 C{/Symbol \42} +=} share reuse"
-1	17.4
-2	21.5
-5	23.2
-10	23.5
-20	26.7
-50	30.9
-100	40.9
-200	50.3
-500	80.5
-
-
-"STL {/Helvetica=15 +=} fresh"
-1	14.4
-2	20.2
-5	25.8
-10	26.7
-20	29.9
-50	37.4
-100	49.3
-200	59.6
-500	114.5
-
-
-"STL {/Helvetica=15 +=} reuse"
-1	11.6
-2	14.6
-5	20.2
-10	21.6
-20	23.0
-50	26.4
-100	34.9
-200	39.4
-500	73.9
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-pta-sharing.csv
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-pta-sharing.csv	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,19 +1,0 @@
-﻿operation,(Multiple Items),,,,,,,,
-sut-cfa-level,(Multiple Items),,,,,,,,
-op-alloc,(All),,,,,,,,
-sut-cfa-sharing,(Multiple Items),,,,,,,,
-sut-platform,(All),,,,,,,,
-,,,,,,,,,
-Average of op-duration,Column Labels,,,,,,,,
-Row Labels,perfexp-cfa-peq-ll-share-fresh,perfexp-cfa-pta-ll-share-fresh,perfexp-stl-peq-na-na-fresh,perfexp-stl-peq-na-na-reuse,perfexp-stl-pta-na-na-fresh,,,,
-1,16.3,44.1,14.4,11.6,174.5,,15.03539756,,2.70809762
-2,21.1,49.1,20.2,14.6,189.3,,12.95232361,,2.327345335
-5,23.0,51.0,25.8,20.2,214.9,,10.61255155,,2.220045663
-10,23.1,50.8,26.7,21.6,223.7,,10.3603398,,2.19569664
-20,26.3,53.0,29.9,23.0,292.1,,12.72658742,,2.016743597
-50,30.3,56.6,37.4,26.4,404.7,,15.33322466,,1.864273381
-100,39.9,65.8,49.3,34.9,789.1,,22.63947672,,1.648192504
-200,50.3,77.4,59.6,39.4,1267.1,,32.13797349,,1.538439818
-500,79.2,110.7,114.5,73.9,3643.8,,49.28010714,,1.398650316
-,,,,,,,,,
-,,,,,,,17.44731936,,1.951050836
Index: doc/theses/mike_brooks_MMath/pictures/string-graph-pta-sharing.dat
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graph-pta-sharing.dat	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,58 +1,0 @@
-"{/Helvetica=15 C{/Symbol \42} +=} share fresh"
-1	16.3
-2	21.1
-5	23.0
-10	23.1
-20	26.3
-50	30.3
-100	39.9
-200	50.3
-500	79.2
-
-
-"{/Helvetica=15 C{/Symbol \42} x = x + y} share fresh"
-1	44.1
-2	49.1
-5	51.0
-10	50.8
-20	53.0
-50	56.6
-100	65.8
-200	77.4
-500	110.7
-
-
-"STL {/Helvetica=15 +=} fresh"
-1	14.4
-2	20.2
-5	25.8
-10	26.7
-20	29.9
-50	37.4
-100	49.3
-200	59.6
-500	114.5
-
-
-"STL {/Helvetica=15 x = x + y} fresh"
-1	174.5
-2	189.3
-5	214.9
-10	223.7
-20	292.1
-50	404.7
-100	789.1
-200	1267.1
-500	3643.8
-
-
-"STL {/Helvetica=15 +=} reuse"
-1	11.6
-2	14.6
-5	20.2
-10	21.6
-20	23.0
-50	26.4
-100	34.9
-200	39.4
-500	73.9
Index: doc/theses/mike_brooks_MMath/pictures/string-graphs-mapping.txt
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graphs-mapping.txt	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,6 +1,0 @@
-FIGURE				BOOK	SHEET
-string-graph-allocn		mem	simplified
-string-graph-pbv		speed	pbv
-string-graph-peq-cppemu		speed	peq-cppemu
-string-graph-peq-sharing	speed	peq-sharing
-string-graph-pta-sharing	speed	pta-sharing
Index: doc/theses/mike_brooks_MMath/pictures/string-graphs-speed.csv
===================================================================
--- doc/theses/mike_brooks_MMath/pictures/string-graphs-speed.csv	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,226 +1,0 @@
-﻿run,test@corpus,test,corpus,concatsPerReset,corpusItemCount,corpusMeanLenChars,concatDoneActualCount,execTimeActualSec,test-allvar,operation-idx,operation,sut,sut-platform,sut-cfa-level,suffix-cfa-sharing-alloc,sut-cfa-sharing,op-alloc,corpus-varsuffix,corpus-allvar,corpus-nstrs,corpus-varsuffix2,corpus-meanlen,corpus-runid,ops-per-sec,op-duration
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-1-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-1-1.txt,100,100,1," 46,670,000 ",10.001611,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,4666248.3,214.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-10-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-10-1.txt,100,100,9.5," 44,690,000 ",10.001209,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,4468459.8,223.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-100-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-100-1.txt,100,100,106.37," 42,650,000 ",10.001013,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,4264568.0,234.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-2-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-2-1.txt,100,100,2.03," 45,390,000 ",10.002069,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,4538061.1,220.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-20-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-20-1.txt,100,100,22.96," 45,070,000 ",10.000489,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,4506779.6,221.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-200-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-200-1.txt,100,100,177.28," 39,010,000 ",10.000491,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,3900808.5,256.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-5-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-5-1.txt,100,100,5.27," 47,050,000 ",10.001473,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,4704307.1,212.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-50-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-50-1.txt,100,100,43.32," 42,400,000 ",10.001664,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,4239294.6,235.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-reuse@corpus-100-500-1.txt,perfexp-cfa-pta-hl-share-reuse,corpus-100-500-1.txt,100,100,557.26," 34,310,000 ",10.001741,cfa-pta-hl-share-reuse,5,pta,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,3430402.8,291.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-1-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-1-1.txt,100,100,1," 46,210,000 ",10.000321,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,4620851.7,216.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-10-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-10-1.txt,100,100,9.5," 44,770,000 ",10.0008,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,4476641.9,223.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-100-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-100-1.txt,100,100,106.37," 41,020,000 ",10.000938,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,4101615.3,243.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-2-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-2-1.txt,100,100,2.03," 45,360,000 ",10.001512,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,4535314.3,220.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-20-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-20-1.txt,100,100,22.96," 44,250,000 ",10.002088,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,4424076.3,226.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-200-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-200-1.txt,100,100,177.28," 38,220,000 ",10.000376,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,3821856.3,261.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-5-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-5-1.txt,100,100,5.27," 45,540,000 ",10.001383,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,4553370.3,219.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-50-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-50-1.txt,100,100,43.32," 43,450,000 ",10.001057,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,4344540.8,230.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-share-fresh@corpus-100-500-1.txt,perfexp-cfa-pta-hl-share-fresh,corpus-100-500-1.txt,100,100,557.26," 34,310,000 ",10.001096,cfa-pta-hl-share-fresh,5,pta,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,3430624.0,291.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-1-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-1-1.txt,100,100,1," 14,790,000 ",10.00307,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,1478546.1,676.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-10-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-10-1.txt,100,100,9.5," 14,130,000 ",10.0003,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,1412957.6,707.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-100-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-100-1.txt,100,100,106.37," 5,680,000 ",10.009858,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,567440.6,1762.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-2-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-2-1.txt,100,100,2.03," 14,540,000 ",10.003868,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,1453437.8,688.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-20-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-20-1.txt,100,100,22.96," 11,250,000 ",10.004258,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,1124521.2,889.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-200-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-200-1.txt,100,100,177.28," 3,630,000 ",10.015228,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,362448.1,2759.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-5-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-5-1.txt,100,100,5.27," 14,010,000 ",10.000639,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,1400910.5,713.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-50-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-50-1.txt,100,100,43.32," 9,250,000 ",10.005358,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,924504.7,1081.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-reuse@corpus-100-500-1.txt,perfexp-cfa-pta-hl-noshare-reuse,corpus-100-500-1.txt,100,100,557.26," 1,480,000 ",10.025648,cfa-pta-hl-noshare-reuse,5,pta,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,147621.4,6774.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-1-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-1-1.txt,100,100,1," 14,600,000 ",10.002874,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,1459580.5,685.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-10-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-10-1.txt,100,100,9.5," 13,700,000 ",10.005982,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,1369181.0,730.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-100-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-100-1.txt,100,100,106.37," 5,450,000 ",10.005359,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,544708.1,1835.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-2-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-2-1.txt,100,100,2.03," 15,040,000 ",10.006349,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,1503045.7,665.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-20-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-20-1.txt,100,100,22.96," 11,250,000 ",10.00292,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,1124671.6,889.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-200-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-200-1.txt,100,100,177.28," 3,610,000 ",10.018511,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,360333.0,2775.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-5-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-5-1.txt,100,100,5.27," 13,820,000 ",10.001873,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,1381741.2,723.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-50-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-50-1.txt,100,100,43.32," 9,240,000 ",10.002466,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,923772.2,1082.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-hl-noshare-fresh@corpus-100-500-1.txt,perfexp-cfa-pta-hl-noshare-fresh,corpus-100-500-1.txt,100,100,557.26," 1,470,000 ",10.018583,cfa-pta-hl-noshare-fresh,5,pta,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,146727.3,6815.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-1-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-1-1.txt,100,100,1," 223,330,000 ",10.000148,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,22332669.5,44.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-10-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-10-1.txt,100,100,9.5," 188,630,000 ",10.000401,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,18862243.6,53.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-100-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-100-1.txt,100,100,106.37," 150,110,000 ",10.000033,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,15010950.5,66.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-2-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-2-1.txt,100,100,2.03," 203,980,000 ",10.000178,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,20397636.9,49.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-20-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-20-1.txt,100,100,22.96," 184,730,000 ",10.000371,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,18472314.7,54.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-200-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-200-1.txt,100,100,177.28," 126,510,000 ",10.000682,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,12650137.3,79.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-5-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-5-1.txt,100,100,5.27," 197,890,000 ",10.000471,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,19788068.0,50.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-50-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-50-1.txt,100,100,43.32," 167,390,000 ",10.000227,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,16738620.0,59.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-reuse@corpus-100-500-1.txt,perfexp-cfa-pta-ll-share-reuse,corpus-100-500-1.txt,100,100,557.26," 93,060,000 ",10.000195,cfa-pta-ll-share-reuse,5,pta,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,9305818.5,107.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-1-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-1-1.txt,100,100,1," 226,690,000 ",10.000003,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,22668993.2,44.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-10-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-10-1.txt,100,100,9.5," 196,970,000 ",10.000033,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,19696935.0,50.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-100-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-100-1.txt,100,100,106.37," 151,920,000 ",10.000368,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,15191441.0,65.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-2-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-2-1.txt,100,100,2.03," 203,810,000 ",10.000026,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,20380947.0,49.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-20-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-20-1.txt,100,100,22.96," 188,650,000 ",10.000508,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,18864041.7,53.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-200-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-200-1.txt,100,100,177.28," 129,210,000 ",10.000194,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,12920749.3,77.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-5-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-5-1.txt,100,100,5.27," 196,020,000 ",10.000091,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,19601821.6,51.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-50-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-50-1.txt,100,100,43.32," 176,760,000 ",10.000491,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,17675132.2,56.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-share-fresh@corpus-100-500-1.txt,perfexp-cfa-pta-ll-share-fresh,corpus-100-500-1.txt,100,100,557.26," 90,320,000 ",10.000081,cfa-pta-ll-share-fresh,5,pta,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,9031926.8,110.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-1-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-1-1.txt,100,100,1," 149,590,000 ",10.000607,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,14958092.0,66.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-10-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-10-1.txt,100,100,9.5," 109,750,000 ",10.000005,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,10974994.5,91.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-100-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-100-1.txt,100,100,106.37," 17,360,000 ",10.003413,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,1735407.7,576.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-2-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-2-1.txt,100,100,2.03," 139,960,000 ",10.000228,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,13995680.9,71.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-20-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-20-1.txt,100,100,22.96," 74,360,000 ",10.000214,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,7435840.9,134.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-200-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-200-1.txt,100,100,177.28," 8,660,000 ",10.002419,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,865790.6,1155.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-5-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-5-1.txt,100,100,5.27," 130,290,000 ",10.000347,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,13028547.9,76.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-50-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-50-1.txt,100,100,43.32," 44,300,000 ",10.001198,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,4429469.3,225.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-reuse@corpus-100-500-1.txt,perfexp-cfa-pta-ll-noshare-reuse,corpus-100-500-1.txt,100,100,557.26," 3,270,000 ",10.02177,cfa-pta-ll-noshare-reuse,5,pta,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,326289.7,3064.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-1-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-1-1.txt,100,100,1," 141,730,000 ",10.000482,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,14172316.9,70.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-10-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-10-1.txt,100,100,9.5," 95,240,000 ",10.000165,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,9523842.9,105.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-100-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-100-1.txt,100,100,106.37," 16,930,000 ",10.000692,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,1692882.9,590.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-2-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-2-1.txt,100,100,2.03," 129,810,000 ",10.000562,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,12980270.5,77.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-20-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-20-1.txt,100,100,22.96," 69,530,000 ",10.000309,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,6952785.2,143.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-200-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-200-1.txt,100,100,177.28," 8,820,000 ",10.007415,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,881346.5,1134.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-5-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-5-1.txt,100,100,5.27," 109,330,000 ",10.000458,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,10932499.3,91.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-50-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-50-1.txt,100,100,43.32," 41,860,000 ",10.000415,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,4185826.3,238.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pta-ll-noshare-fresh@corpus-100-500-1.txt,perfexp-cfa-pta-ll-noshare-fresh,corpus-100-500-1.txt,100,100,557.26," 3,220,000 ",10.009101,cfa-pta-ll-noshare-fresh,5,pta,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,321707.2,3108.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-1-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-1-1.txt,100,100,1," 570,080,000 ",10.000166,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,57007053.7,17.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-10-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-10-1.txt,100,100,9.5," 424,040,000 ",10.000131,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,42403444.5,23.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-100-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-100-1.txt,100,100,106.37," 248,850,000 ",10.00022,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,24884452.5,40.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-2-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-2-1.txt,100,100,2.03," 458,970,000 ",10.000032,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,45896853.1,21.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-20-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-20-1.txt,100,100,22.96," 372,450,000 ",10.000201,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,37244251.4,26.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-200-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-200-1.txt,100,100,177.28," 189,300,000 ",10.000141,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,18929733.1,52.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-5-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-5-1.txt,100,100,5.27," 432,540,000 ",10.000035,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,43253848.6,23.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-50-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-50-1.txt,100,100,43.32," 320,980,000 ",10.000059,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,32097810.6,31.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-reuse@corpus-100-500-1.txt,perfexp-cfa-peq-hl-share-reuse,corpus-100-500-1.txt,100,100,557.26," 123,900,000 ",10.000372,cfa-peq-hl-share-reuse,5,peq,cfa-hl-share-reuse,cfa,hl,share-reuse,share,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,12389539.1,80.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-1-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-1-1.txt,100,100,1," 551,530,000 ",10.000112,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,55152382.3,18.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-10-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-10-1.txt,100,100,9.5," 422,560,000 ",10.000055,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,42255767.6,23.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-100-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-100-1.txt,100,100,106.37," 242,150,000 ",10.000213,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,24214484.2,41.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-2-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-2-1.txt,100,100,2.03," 451,490,000 ",10.000152,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,45148313.7,22.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-20-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-20-1.txt,100,100,22.96," 363,500,000 ",10.000024,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,36349912.8,27.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-200-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-200-1.txt,100,100,177.28," 191,440,000 ",10.000187,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,19143642.0,52.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-5-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-5-1.txt,100,100,5.27," 426,180,000 ",10.000085,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,42617637.8,23.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-50-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-50-1.txt,100,100,43.32," 318,740,000 ",10.000085,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,31873729.1,31.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-share-fresh@corpus-100-500-1.txt,perfexp-cfa-peq-hl-share-fresh,corpus-100-500-1.txt,100,100,557.26," 119,660,000 ",10.000806,cfa-peq-hl-share-fresh,5,peq,cfa-hl-share-fresh,cfa,hl,share-fresh,share,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,11965035.6,83.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-1-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-1-1.txt,100,100,1," 579,020,000 ",10.000107,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,57901380.5,17.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-10-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-10-1.txt,100,100,9.5," 433,740,000 ",10.000191,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,43373171.6,23.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-100-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-100-1.txt,100,100,106.37," 264,930,000 ",10.00006,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,26492841.0,37.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-2-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-2-1.txt,100,100,2.03," 485,110,000 ",10.000203,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,48510015.2,20.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-20-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-20-1.txt,100,100,22.96," 395,760,000 ",10.000025,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,39575901.1,25.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-200-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-200-1.txt,100,100,177.28," 230,820,000 ",10.000276,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,23081363.0,43.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-5-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-5-1.txt,100,100,5.27," 440,040,000 ",10.000198,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,44003128.7,22.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-50-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-50-1.txt,100,100,43.32," 345,350,000 ",10.000252,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,34534129.7,29.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-reuse@corpus-100-500-1.txt,perfexp-cfa-peq-hl-noshare-reuse,corpus-100-500-1.txt,100,100,557.26," 131,890,000 ",10.000511,cfa-peq-hl-noshare-reuse,5,peq,cfa-hl-noshare-reuse,cfa,hl,noshare-reuse,noshare,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,13188326.1,75.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-1-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-1-1.txt,100,100,1," 429,210,000 ",10.000204,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,42920124.4,23.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-10-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-10-1.txt,100,100,9.5," 309,270,000 ",10.000019,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,30926941.2,32.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-100-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-100-1.txt,100,100,106.37," 175,550,000 ",10.000542,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,17554048.6,57.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-2-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-2-1.txt,100,100,2.03," 363,450,000 ",10.000031,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,36344887.3,27.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-20-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-20-1.txt,100,100,22.96," 284,840,000 ",10.000234,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,28483333.5,35.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-200-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-200-1.txt,100,100,177.28," 152,400,000 ",10.000008,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,15239987.8,65.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-5-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-5-1.txt,100,100,5.27," 324,130,000 ",10.000071,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,32412769.9,30.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-50-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-50-1.txt,100,100,43.32," 237,620,000 ",10.000397,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,23761056.7,42.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-hl-noshare-fresh@corpus-100-500-1.txt,perfexp-cfa-peq-hl-noshare-fresh,corpus-100-500-1.txt,100,100,557.26," 84,320,000 ",10.000124,cfa-peq-hl-noshare-fresh,5,peq,cfa-hl-noshare-fresh,cfa,hl,noshare-fresh,noshare,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,8431895.4,118.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-1-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-1-1.txt,100,100,1," 575,780,000 ",10.0001,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,57577424.2,17.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-10-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-10-1.txt,100,100,9.5," 426,130,000 ",10.000214,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,42612088.1,23.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-100-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-100-1.txt,100,100,106.37," 244,470,000 ",10.000263,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,24446357.1,40.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-2-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-2-1.txt,100,100,2.03," 465,740,000 ",10.00005,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,46573767.1,21.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-20-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-20-1.txt,100,100,22.96," 374,950,000 ",10.000198,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,37494257.6,26.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-200-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-200-1.txt,100,100,177.28," 198,630,000 ",10.000055,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,19862890.8,50.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-5-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-5-1.txt,100,100,5.27," 430,170,000 ",10.000137,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,43016410.7,23.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-50-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-50-1.txt,100,100,43.32," 323,550,000 ",10.000218,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,32354294.7,30.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-reuse@corpus-100-500-1.txt,perfexp-cfa-peq-ll-share-reuse,corpus-100-500-1.txt,100,100,557.26," 124,300,000 ",10.000022,cfa-peq-ll-share-reuse,5,peq,cfa-ll-share-reuse,cfa,ll,share-reuse,share,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,12429972.7,80.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-1-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-1-1.txt,100,100,1," 613,900,000 ",10.000025,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,61389846.5,16.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-10-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-10-1.txt,100,100,9.5," 432,490,000 ",10.000117,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,43248494.0,23.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-100-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-100-1.txt,100,100,106.37," 250,390,000 ",10.000232,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,25038419.1,39.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-2-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-2-1.txt,100,100,2.03," 474,340,000 ",10.000105,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,47433501.9,21.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-20-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-20-1.txt,100,100,22.96," 380,440,000 ",10.000017,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,38043935.3,26.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-200-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-200-1.txt,100,100,177.28," 198,780,000 ",10.000103,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,19877795.3,50.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-5-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-5-1.txt,100,100,5.27," 435,170,000 ",10.000014,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,43516939.1,23.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-50-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-50-1.txt,100,100,43.32," 329,520,000 ",10.000219,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,32951278.4,30.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-share-fresh@corpus-100-500-1.txt,perfexp-cfa-peq-ll-share-fresh,corpus-100-500-1.txt,100,100,557.26," 126,330,000 ",10.00039,cfa-peq-ll-share-fresh,5,peq,cfa-ll-share-fresh,cfa,ll,share-fresh,share,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,12632507.3,79.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-1-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-1-1.txt,100,100,1," 612,490,000 ",10.000031,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,61248810.1,16.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-10-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-10-1.txt,100,100,9.5," 450,620,000 ",10.000032,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,45061855.8,22.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-100-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-100-1.txt,100,100,106.37," 272,890,000 ",10.000079,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,27288784.4,36.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-2-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-2-1.txt,100,100,2.03," 521,140,000 ",10.000141,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,52113265.2,19.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-20-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-20-1.txt,100,100,22.96," 405,950,000 ",10.000168,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,40594318.0,24.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-200-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-200-1.txt,100,100,177.28," 236,820,000 ",10.000261,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,23681381.9,42.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-5-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-5-1.txt,100,100,5.27," 447,040,000 ",10.000027,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,44703879.3,22.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-50-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-50-1.txt,100,100,43.32," 358,630,000 ",10.000194,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,35862304.3,27.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-reuse@corpus-100-500-1.txt,perfexp-cfa-peq-ll-noshare-reuse,corpus-100-500-1.txt,100,100,557.26," 131,730,000 ",10.000617,cfa-peq-ll-noshare-reuse,5,peq,cfa-ll-noshare-reuse,cfa,ll,noshare-reuse,noshare,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,13172187.3,75.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-1-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-1-1.txt,100,100,1," 467,470,000 ",10.000207,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,46746032.4,21.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-10-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-10-1.txt,100,100,9.5," 319,800,000 ",10.000179,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,31979427.6,31.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-100-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-100-1.txt,100,100,106.37," 180,950,000 ",10.000065,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,18094882.4,55.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-2-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-2-1.txt,100,100,2.03," 377,740,000 ",10.000054,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,37773796.0,26.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-20-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-20-1.txt,100,100,22.96," 297,220,000 ",10.000166,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,29721506.6,33.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-200-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-200-1.txt,100,100,177.28," 157,070,000 ",10.000292,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,15706541.4,63.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-5-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-5-1.txt,100,100,5.27," 335,640,000 ",10.000054,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,33563818.8,29.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-50-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-50-1.txt,100,100,43.32," 241,920,000 ",10.000227,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,24191450.9,41.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-peq-ll-noshare-fresh@corpus-100-500-1.txt,perfexp-cfa-peq-ll-noshare-fresh,corpus-100-500-1.txt,100,100,557.26," 85,170,000 ",10.000207,cfa-peq-ll-noshare-fresh,5,peq,cfa-ll-noshare-fresh,cfa,ll,noshare-fresh,noshare,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,8516823.7,117.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-1-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-1-1.txt,xxx,100,1," 105,090,000 ",10.000019,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-1-1.txt,100-1-1,100,1-1,1,1,10508980.0,95.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-10-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-10-1.txt,xxx,100,9.5," 102,990,000 ",10.000833,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-10-1.txt,100-10-1,100,10-1,10,1,10298142.2,97.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-100-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-100-1.txt,xxx,100,106.37," 103,530,000 ",10.000936,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-100-1.txt,100-100-1,100,100-1,100,1,10352031.0,96.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-2-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-2-1.txt,xxx,100,2.03," 103,900,000 ",10.000758,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-2-1.txt,100-2-1,100,2-1,2,1,10389212.5,96.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-20-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-20-1.txt,xxx,100,22.96," 102,890,000 ",10.00044,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-20-1.txt,100-20-1,100,20-1,20,1,10288547.3,97.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-200-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-200-1.txt,xxx,100,177.28," 100,890,000 ",10.001054,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-200-1.txt,100-200-1,100,200-1,200,1,10087936.7,99.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-5-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-5-1.txt,xxx,100,5.27," 104,520,000 ",10.000406,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-5-1.txt,100-5-1,100,5-1,5,1,10451575.7,95.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-50-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-50-1.txt,xxx,100,43.32," 103,440,000 ",10.000669,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-50-1.txt,100-50-1,100,50-1,50,1,10343308.0,96.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-share-na@corpus-100-500-1.txt,perfexp-cfa-pbv-hl-share-na,corpus-100-500-1.txt,xxx,100,557.26," 108,150,000 ",10.000725,cfa-pbv-hl-share-na,5,pbv,cfa-hl-share-na,cfa,hl,share-na,share,na,100-500-1.txt,100-500-1,100,500-1,500,1,10814216.0,92.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-1-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-1-1.txt,xxx,100,1," 37,770,000 ",10.001796,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-1-1.txt,100-1-1,100,1-1,1,1,3776321.8,264.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-10-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-10-1.txt,xxx,100,9.5," 38,620,000 ",10.001125,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-10-1.txt,100-10-1,100,10-1,10,1,3861565.6,259.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-100-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-100-1.txt,xxx,100,106.37," 35,950,000 ",10.000424,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-100-1.txt,100-100-1,100,100-1,100,1,3594847.6,278.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-2-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-2-1.txt,xxx,100,2.03," 37,730,000 ",10.000005,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-2-1.txt,100-2-1,100,2-1,2,1,3772998.1,265.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-20-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-20-1.txt,xxx,100,22.96," 38,200,000 ",10.002448,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-20-1.txt,100-20-1,100,20-1,20,1,3819065.1,261.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-200-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-200-1.txt,xxx,100,177.28," 36,840,000 ",10.000258,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-200-1.txt,100-200-1,100,200-1,200,1,3683905.0,271.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-5-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-5-1.txt,xxx,100,5.27," 37,200,000 ",10.000216,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-5-1.txt,100-5-1,100,5-1,5,1,3719919.6,268.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-50-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-50-1.txt,xxx,100,43.32," 37,670,000 ",10.000601,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-50-1.txt,100-50-1,100,50-1,50,1,3766773.6,265.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-hl-noshare-na@corpus-100-500-1.txt,perfexp-cfa-pbv-hl-noshare-na,corpus-100-500-1.txt,xxx,100,557.26," 32,660,000 ",10.000949,cfa-pbv-hl-noshare-na,5,pbv,cfa-hl-noshare-na,cfa,hl,noshare-na,noshare,na,100-500-1.txt,100-500-1,100,500-1,500,1,3265690.1,306.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-1-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-1-1.txt,xxx,100,1," 564,690,000 ",10.000001,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-1-1.txt,100-1-1,100,1-1,1,1,56468994.4,17.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-10-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-10-1.txt,xxx,100,9.5," 584,490,000 ",10.000075,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-10-1.txt,100-10-1,100,10-1,10,1,58448561.6,17.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-100-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-100-1.txt,xxx,100,106.37," 583,880,000 ",10.000131,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-100-1.txt,100-100-1,100,100-1,100,1,58387235.1,17.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-2-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-2-1.txt,xxx,100,2.03," 578,310,000 ",10.000035,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-2-1.txt,100-2-1,100,2-1,2,1,57830797.6,17.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-20-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-20-1.txt,xxx,100,22.96," 565,640,000 ",10.000072,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-20-1.txt,100-20-1,100,20-1,20,1,56563592.7,17.7
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-200-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-200-1.txt,xxx,100,177.28," 571,650,000 ",10.000041,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-200-1.txt,100-200-1,100,200-1,200,1,57164765.6,17.5
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-5-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-5-1.txt,xxx,100,5.27," 584,750,000 ",10.000084,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-5-1.txt,100-5-1,100,5-1,5,1,58474508.8,17.1
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-50-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-50-1.txt,xxx,100,43.32," 567,370,000 ",10.000056,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-50-1.txt,100-50-1,100,50-1,50,1,56736682.3,17.6
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-share-na@corpus-100-500-1.txt,perfexp-cfa-pbv-ll-share-na,corpus-100-500-1.txt,xxx,100,557.26," 575,270,000 ",10.000033,cfa-pbv-ll-share-na,5,pbv,cfa-ll-share-na,cfa,ll,share-na,share,na,100-500-1.txt,100-500-1,100,500-1,500,1,57526810.2,17.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-1-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-1-1.txt,xxx,100,1," 54,990,000 ",10.000355,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-1-1.txt,100-1-1,100,1-1,1,1,5498804.8,181.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-10-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-10-1.txt,xxx,100,9.5," 55,450,000 ",10.00026,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-10-1.txt,100-10-1,100,10-1,10,1,5544855.8,180.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-100-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-100-1.txt,xxx,100,106.37," 51,770,000 ",10.001469,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-100-1.txt,100-100-1,100,100-1,100,1,5176239.6,193.2
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-2-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-2-1.txt,xxx,100,2.03," 55,020,000 ",10.000967,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-2-1.txt,100-2-1,100,2-1,2,1,5501468.0,181.8
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-20-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-20-1.txt,xxx,100,22.96," 53,940,000 ",10.000951,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-20-1.txt,100-20-1,100,20-1,20,1,5393487.1,185.4
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-200-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-200-1.txt,xxx,100,177.28," 51,750,000 ",10.001529,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-200-1.txt,100-200-1,100,200-1,200,1,5174208.9,193.3
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-5-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-5-1.txt,xxx,100,5.27," 54,380,000 ",10.000293,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-5-1.txt,100-5-1,100,5-1,5,1,5437840.7,183.9
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-50-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-50-1.txt,xxx,100,43.32," 52,920,000 ",10.000218,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-50-1.txt,100-50-1,100,50-1,50,1,5291884.6,189.0
-measurement-2022-02-23--13-15-42.csv,perfexp-cfa-pbv-ll-noshare-na@corpus-100-500-1.txt,perfexp-cfa-pbv-ll-noshare-na,corpus-100-500-1.txt,xxx,100,557.26," 46,600,000 ",10.001293,cfa-pbv-ll-noshare-na,5,pbv,cfa-ll-noshare-na,cfa,ll,noshare-na,noshare,na,100-500-1.txt,100-500-1,100,500-1,500,1,4659397.5,214.6
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-1-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-1-1.txt,100,100,1," 58,840,000 ",10.001257,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,5883260.5,170.0
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-10-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-10-1.txt,100,100,9.5," 46,120,000 ",10.001484,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,4611315.7,216.9
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-100-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-100-1.txt,100,100,106.37," 12,710,000 ",10.000025,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,1270996.8,786.8
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-2-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-2-1.txt,100,100,2.03," 53,460,000 ",10.000027,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,5345985.6,187.1
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-20-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-20-1.txt,100,100,22.96," 34,640,000 ",10.000799,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,3463723.2,288.7
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-200-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-200-1.txt,100,100,177.28," 7,920,000 ",10.004859,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,791615.4,1263.2
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-5-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-5-1.txt,100,100,5.27," 46,960,000 ",10.002011,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,4695055.8,213.0
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-50-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-50-1.txt,100,100,43.32," 25,180,000 ",10.003429,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,2517136.9,397.3
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-reuse@corpus-100-500-1.txt,perfexp-stl-pta-na-na-reuse,corpus-100-500-1.txt,100,100,557.26," 2,760,000 ",10.002492,stl-pta-na-na-reuse,5,pta,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,275931.2,3624.1
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-1-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-1-1.txt,100,100,1," 57,300,000 ",10.001271,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,5729271.8,174.5
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-10-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-10-1.txt,100,100,9.5," 44,710,000 ",10.000273,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,4470877.9,223.7
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-100-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-100-1.txt,100,100,106.37," 12,680,000 ",10.005341,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,1267323.1,789.1
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-2-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-2-1.txt,100,100,2.03," 52,830,000 ",10.00155,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,5282181.3,189.3
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-20-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-20-1.txt,100,100,22.96," 34,240,000 ",10.002102,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,3423280.4,292.1
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-200-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-200-1.txt,100,100,177.28," 7,900,000 ",10.010463,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,789174.3,1267.1
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-5-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-5-1.txt,100,100,5.27," 46,540,000 ",10.000186,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,4653913.4,214.9
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-50-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-50-1.txt,100,100,43.32," 24,710,000 ",10.000854,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,2470789.0,404.7
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pta-na-na-fresh@corpus-100-500-1.txt,perfexp-stl-pta-na-na-fresh,corpus-100-500-1.txt,100,100,557.26," 2,750,000 ",10.020578,stl-pta-na-na-fresh,5,pta,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,274435.3,3643.8
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-1-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-1-1.txt,100,100,1," 861,420,000 ",10.000014,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-1-1.txt,100-1-1,100,1-1,1,1,86141879.4,11.6
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-10-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-10-1.txt,100,100,9.5," 463,200,000 ",10.00004,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-10-1.txt,100-10-1,100,10-1,10,1,46319814.7,21.6
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-100-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-100-1.txt,100,100,106.37," 286,920,000 ",10.000163,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-100-1.txt,100-100-1,100,100-1,100,1,28691532.3,34.9
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-2-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-2-1.txt,100,100,2.03," 684,170,000 ",10.00007,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-2-1.txt,100-2-1,100,2-1,2,1,68416521.1,14.6
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-20-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-20-1.txt,100,100,22.96," 435,670,000 ",10.000074,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-20-1.txt,100-20-1,100,20-1,20,1,43566677.6,23.0
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-200-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-200-1.txt,100,100,177.28," 253,630,000 ",10.000212,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-200-1.txt,100-200-1,100,200-1,200,1,25362462.3,39.4
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-5-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-5-1.txt,100,100,5.27," 493,900,000 ",10.000021,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-5-1.txt,100-5-1,100,5-1,5,1,49389896.3,20.2
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-50-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-50-1.txt,100,100,43.32," 378,860,000 ",10.000221,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-50-1.txt,100-50-1,100,50-1,50,1,37885162.7,26.4
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-reuse@corpus-100-500-1.txt,perfexp-stl-peq-na-na-reuse,corpus-100-500-1.txt,100,100,557.26," 135,250,000 ",10.000592,stl-peq-na-na-reuse,5,peq,stl-na-na-reuse,stl,~na~,~na~,~na~,reuse,100-500-1.txt,100-500-1,100,500-1,500,1,13524199.4,73.9
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-1-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-1-1.txt,100,100,1," 695,860,000 ",10.000071,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-1-1.txt,100-1-1,100,1-1,1,1,69585505.9,14.4
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-10-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-10-1.txt,100,100,9.5," 374,640,000 ",10.000298,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-10-1.txt,100-10-1,100,10-1,10,1,37462883.6,26.7
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-100-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-100-1.txt,100,100,106.37," 202,970,000 ",10.000039,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-100-1.txt,100-100-1,100,100-1,100,1,20296920.8,49.3
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-2-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-2-1.txt,100,100,2.03," 494,160,000 ",10.000061,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-2-1.txt,100-2-1,100,2-1,2,1,49415698.6,20.2
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-20-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-20-1.txt,100,100,22.96," 334,250,000 ",10.00021,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-20-1.txt,100-20-1,100,20-1,20,1,33424298.1,29.9
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-200-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-200-1.txt,100,100,177.28," 167,900,000 ",10.000059,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-200-1.txt,100-200-1,100,200-1,200,1,16789900.9,59.6
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-5-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-5-1.txt,100,100,5.27," 387,940,000 ",10.000144,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-5-1.txt,100-5-1,100,5-1,5,1,38793441.4,25.8
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-50-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-50-1.txt,100,100,43.32," 267,350,000 ",10.000115,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-50-1.txt,100-50-1,100,50-1,50,1,26734692.6,37.4
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-peq-na-na-fresh@corpus-100-500-1.txt,perfexp-stl-peq-na-na-fresh,corpus-100-500-1.txt,100,100,557.26," 87,310,000 ",10.000966,stl-peq-na-na-fresh,5,peq,stl-na-na-fresh,stl,~na~,~na~,~na~,fresh,100-500-1.txt,100-500-1,100,500-1,500,1,8730156.7,114.5
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-1-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-1-1.txt,xxx,100,1," 1,266,970,000 ",10.000097,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-1-1.txt,100-1-1,100,1-1,1,1,126695771.1,7.9
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-10-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-10-1.txt,xxx,100,9.5," 331,830,000 ",10.000208,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-10-1.txt,100-10-1,100,10-1,10,1,33182309.8,30.1
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-100-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-100-1.txt,xxx,100,106.37," 127,260,000 ",10.000179,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-100-1.txt,100-100-1,100,100-1,100,1,12725772.2,78.6
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-2-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-2-1.txt,xxx,100,2.03," 808,880,000 ",10.000089,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-2-1.txt,100-2-1,100,2-1,2,1,80887280.1,12.4
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-20-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-20-1.txt,xxx,100,22.96," 195,590,000 ",10.000393,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-20-1.txt,100-20-1,100,20-1,20,1,19558231.4,51.1
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-200-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-200-1.txt,xxx,100,177.28," 109,550,000 ",10.000044,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-200-1.txt,100-200-1,100,200-1,200,1,10954951.8,91.3
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-5-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-5-1.txt,xxx,100,5.27," 481,830,000 ",10.000076,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-5-1.txt,100-5-1,100,5-1,5,1,48182633.8,20.8
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-50-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-50-1.txt,xxx,100,43.32," 135,700,000 ",10.000377,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-50-1.txt,100-50-1,100,50-1,50,1,13569488.4,73.7
-measurement-2022-02-23--13-15-42.csv,perfexp-stl-pbv-na-na-na@corpus-100-500-1.txt,perfexp-stl-pbv-na-na-na,corpus-100-500-1.txt,xxx,100,557.26," 86,870,000 ",10.000937,stl-pbv-na-na-na,5,pbv,stl-na-na-na,stl,~na~,~na~,~na~,na,100-500-1.txt,100-500-1,100,500-1,500,1,8686186.1,115.1
Index: doc/theses/mike_brooks_MMath/plot-allocn.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plot-allocn.gp	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,23 +1,0 @@
-set terminal pdf color enhanced size 6.0in,3.0in font "Times,17"
-#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
-#set terminal wxt size 950,1250
-
-DIR="pictures"
-SCALE=1024
-
-set macros
-set output "build/string-graph-allocn.pdf"
-#set pointsize 2.0
-set grid
-set key bottom right
-#set xtics (1,2,5,10,20,50,100,200,500)
-#set logscale x 2
-set logscale y 2
-set xlabel "Duration (ns)" offset 2,0
-set ylabel "Space Used (byte), x 1024"
-plot DIR."/string-graph-allocn.dat" \
-	   i 0 using 1:($2/SCALE) title columnheader(1) with linespoints lt rgb "blue"	pt  2  ps 1 lw 1, \
-	'' i 1 using 1:($2/SCALE) title columnheader(1) with linespoints lt rgb "red"	pt  3  ps 1 lw 1, \
-	'' i 2 using 1:($2/SCALE) title columnheader(1) with linespoints lt rgb "brown"	pt  6  ps 1 lw 1, \
-	'' i 3 using 1:($2/SCALE) title columnheader(1) with linespoints lt rgb "black"	pt  8  ps 1 lw 1, \
-	'' i 4 using 1:($2/SCALE) title columnheader(1) with linespoints lt rgb "magenta" pt  10  ps 1 lw 1
Index: doc/theses/mike_brooks_MMath/plot-pbv.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plot-pbv.gp	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,23 +1,0 @@
-set terminal pdf color enhanced size 6.0in,3.0in font "Times,17"
-#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
-#set terminal wxt size 950,1250
-
-DIR="pictures"
-
-set macros
-set output "build/string-graph-pbv.pdf"
-#set pointsize 2.0
-set grid
-set key bottom right
-#set key at screen 0.45, screen 0.8
-set xtics (1,2,5,10,20,50,100,200,500)
-set logscale x
-set logscale y 2
-set xlabel "String Length being passed (interp. varies)" offset 2,0
-set ylabel "Time per append (ns, mean), log_{2} scale"
-set linetype 3 dashtype 2
-set linetype 4 dashtype 2
-plot DIR."/string-graph-pbv.dat" \
-	   i 0 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  2  ps 1 lw 1, \
-	'' i 1 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  3  ps 1 lw 1, \
-	'' i 2 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  6  ps 1 lw 1
Index: doc/theses/mike_brooks_MMath/plot-peq-sharing.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plot-peq-sharing.gp	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,23 +1,0 @@
-set terminal pdf color enhanced size 6.0in,3.0in font "Times,17"
-#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
-#set terminal wxt size 950,1250
-
-DIR="pictures"
-
-set macros
-set output "build/string-graph-peq-sharing.pdf"
-#set pointsize 2.0
-set grid
-set key top left
-set xtics (1,2,5,10,20,50,100,200,500)
-set logscale x
-#set logscale y 2
-set xlabel "String Length being appended (mean, geo. dist.), log scale" offset 2,0
-set ylabel "Time per append (ns, mean)"
-set linetype 2 dashtype 2
-set linetype 4 dashtype 2
-plot DIR."/string-graph-peq-sharing.dat" \
-	   i 0 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  2  ps 1 lw 1, \
-	'' i 1 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  3  ps 1 lw 1, \
-	'' i 2 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  6  ps 1 lw 1, \
-	'' i 3  using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  8  ps 1 lw 1
Index: doc/theses/mike_brooks_MMath/plot-pta-sharing.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plot-pta-sharing.gp	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ 	(revision )
@@ -1,24 +1,0 @@
-set terminal pdf color enhanced size 6.0in,3.0in font "Times,17"
-#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
-#set terminal wxt size 950,1250
-
-DIR="pictures"
-
-set macros
-set output "build/string-graph-pta-sharing.pdf"
-#set pointsize 2.0
-set grid
-set key top left
-set xtics (1,2,5,10,20,50,100,200,500)
-set logscale x
-set logscale y 2
-set xlabel "String Length being appended (mean, geo. dist.), log scale" offset 2,0
-set ylabel "Time per append (ns, mean), log_{2} scale"
-set linetype 5 dashtype 2
-#show colornames
-plot DIR."/string-graph-pta-sharing.dat" \
-	   i 0 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  2  ps 1 lw 1, \
-	'' i 1 using 1:2 title columnheader(1) with linespoints lt rgb "dark-green" pt  4  ps 1 lw 1, \
-	'' i 2 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  6  ps 1 lw 1, \
-	'' i 3  using 1:2 title columnheader(1) with linespoints lt rgb "dark-green" pt  12  ps 1 lw 1, \
-	'' i 4  using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  8  ps 1 lw 1
Index: doc/theses/mike_brooks_MMath/plots/common.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/common.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/common.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,113 @@
+import pandas as pd
+import numpy as np
+import sys
+import os
+
+def parseTestCorpus(dt):
+    dt[['test-slug',
+        'sut-platform',
+        'operation',
+        'sut-cfa-level',
+        'sut-cfa-sharing',
+        'op-alloc']] = dt['test'].str.strip().str.split('-', expand=True)
+    dt['sut'] = dt[['sut-platform',
+                        'sut-cfa-level',
+                        'sut-cfa-sharing',
+                        'op-alloc']].agg('-'.join, axis=1)
+
+    dt[['corpus-basename',
+        'corpus-ext']] = dt['corpus'].str.strip().str.split('.', expand=True)
+    dt[['corpus-slug',
+        'corpus-nstrs',
+        'corpus-meanlen',
+        'corpus-runid']] = dt['corpus-basename'].str.strip().str.split('-', expand=True)
+    dt["corpus-nstrs"] = pd.to_numeric(dt["corpus-nstrs"])
+    dt["corpus-meanlen"] = pd.to_numeric(dt["corpus-meanlen"])
+    dt["corpus-runid"] = pd.to_numeric(dt["corpus-runid"])
+
+def loadParseTimingData( infileLocal, xClasNames=[], xClasDtypes={}, xFactNames=[], xFactDtypes={} ):
+
+    infile = os.path.dirname(os.path.abspath(__file__)) + '/../benchmarks/string/' + infileLocal
+
+    timings = pd.read_csv(
+        infile,
+        names=['test', 'corpus'] + xClasNames + [ 'concatsPerReset', 'corpusItemCount', 'corpusMeanLenChars', 'concatDoneActualCount', 'execTimeActualSec'] + xFactNames,
+        dtype={**xClasDtypes, **xFactDtypes, **{
+            'test':                  str,
+            'corpus':                str,
+            'concatsPerReset':       'Int64', # allows missing; https://stackoverflow.com/a/70626154
+            'corpusItemCount':       np.int64,
+            'corpusMeanLenChars':    np.float64,
+            'concatDoneActualCount': np.int64,
+            'execTimeActualSec':     np.float64,
+            'Q': np.int64}},
+
+        na_values=['xxx'],
+    )
+    # print(timings.head())
+
+
+    # project: parse executable and corpus names
+
+    parseTestCorpus(timings)
+
+    # project: calculate fact
+
+    timings['op-duration-s'] = timings['execTimeActualSec'] / timings['concatDoneActualCount']
+    timings['op-duration-ns'] = timings['op-duration-s'] * 1000 * 1000 * 1000
+
+    return timings
+
+def loadParseSizingData( infileLocal, xClasNames=[], xClasDtypes={}, xFactNames=[], xFactDtypes={} ):
+
+    infile = os.path.dirname(os.path.abspath(__file__)) + '/../benchmarks/string/' + infileLocal
+
+    sizings = pd.read_csv(
+        infile,
+        sep=' ',
+        names=['test', 'corpus'] + xClasNames + ['ppid', 'pid', 'malloc_count', 'free_count',
+            'calloc_count', 'realloc_count',
+            'requsted_mem(B)', 'current_req_mem(B)', 'hw_cur_req_mem(B)', 'text', 'heap', 'mmap_so', 'mmap',
+            'stack', 'vvar', 'vdso', 'vsyscall', 'unfigured', 'total_dynamic',
+            'epoch_timestamp(ms)'] + xFactNames,
+        dtype={**xClasDtypes, **xFactDtypes, **{
+            'test':                  str,
+            'corpus':                str,
+            'ppid': np.int64, 'pid': np.int64, 'malloc_count': np.int64, 'free_count': np.int64,
+            'calloc_count': np.int64, 'realloc_count': np.int64,
+            'requsted_mem(B)': np.int64, 'current_req_mem(B)': np.int64,
+            'hw_cur_req_mem(B)': np.int64, 'text': np.int64, 'heap': np.int64,
+            'mmap_so': np.int64, 'mmap': np.int64,
+            'stack': np.int64, 'vvar': np.int64, 'vdso': np.int64, 'vsyscall': np.int64, 'unfigured': np.int64, 'total_dynamic': np.int64,
+            'epoch_timestamp(ms)': np.int64}}
+    )
+
+    parseTestCorpus(sizings)
+
+    return sizings
+
+
+def loadParseAttribData( infileLocal ):
+
+    infile = os.path.dirname(os.path.abspath(__file__)) + '/../benchmarks/string/' + infileLocal
+
+    attribs = pd.read_csv(
+        infile,
+        sep=' ',
+        names=[
+            "test", "corpus", "expansion", "category", "samples_in_category", "total_samples",
+            "fraction", "sources"],
+        dtype={
+            "test": str,
+            "corpus": str,
+            "expansion": np.float64,
+            "category": str,
+            "samples_in_category": np.int64,
+            "total_samples": np.int64,
+            "fraction": np.float64,
+            "sources": str}
+    )
+
+    parseTestCorpus(attribs)
+
+    return attribs
Index: doc/theses/mike_brooks_MMath/plots/string-allocn-attrib.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-allocn-attrib.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-allocn-attrib.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,56 @@
+# Read thesis-append-pbv.csv
+# Output for string-graph-peq-sharing.dat
+
+# Project details
+# Filter operation=peq
+# Split "series" goups of sut; only those in the "pretty" list
+# Assert one row per string-length
+# output:
+# string-len op-duration
+# in chunks, each headed by pertty(sut)
+
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from common import *
+
+sizes_i_want = [50, 200] # [20, 50, 100, 200]
+
+# assume CFA threshold only run at default value
+
+cfatimings = loadParseTimingData('result-allocate-speed-cfa.csv',
+                xClasNames=['expansion'], xClasDtypes={'expansion':'Float64'},
+                xFactNames=['topIters'], xFactDtypes={'topIters':np.int64})
+
+cfaattribs = loadParseAttribData('result-allocate-attrib-cfa.ssv')
+
+stltimings = loadParseTimingData('result-allocate-speed-stl.csv',
+                xClasNames=['expansion'], xClasDtypes={'expansion':'Float64'},
+                xFactNames=['topIters'], xFactDtypes={'topIters':np.int64})
+
+stlattribs = loadParseAttribData('result-allocate-attrib-stl.ssv')
+
+timings = pd.concat([cfatimings, stltimings])
+attribs = pd.concat([cfaattribs, stlattribs])
+
+combined = pd.merge(
+    left=timings[['sut-platform', 'corpus-meanlen','expansion', 'op-duration-ns']],
+    right=attribs[['sut-platform', 'corpus-meanlen','expansion', 'category', 'fraction']],
+    on=['sut-platform', 'corpus-meanlen','expansion']
+)
+
+combined['cat-duration-ns'] = combined['op-duration-ns'] * combined['fraction']
+combined.drop(columns=['expansion', 'op-duration-ns', 'fraction'], inplace=True)
+
+pvt = combined.pivot( columns='category', values='cat-duration-ns', index=['corpus-meanlen', 'sut-platform'] )
+
+desired_dcol_order = ["ctor-dtor", "gc", "malloc-free", "text-import", "harness-leaf", "other"]
+pvt = pvt[desired_dcol_order]
+
+filtered = pvt.loc[pvt.index.get_level_values('corpus-meanlen').isin(sizes_i_want)]
+
+print(filtered.to_csv(header=True, index=True, sep='\t', na_rep="0"))
+
Index: doc/theses/mike_brooks_MMath/plots/string-allocn.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-allocn.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-allocn.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,8 @@
+plots/string-allocn.gp.INPUTS: build/plot-string-allocn.dat
+plots/string-allocn.gp.INPUTS: build/plot-string-allocn-attrib.dat
+plots/string-allocn.py.INPUTS: benchmarks/string/result-allocate-space-cfa.ssv
+plots/string-allocn.py.INPUTS: benchmarks/string/result-allocate-space-stl.ssv
+plots/string-allocn.py.INPUTS: benchmarks/string/result-allocate-speed-cfa.csv
+plots/string-allocn.py.INPUTS: benchmarks/string/result-allocate-speed-stl.csv
+plots/string-allocn-attrib.py.INPUTS: benchmarks/string/result-allocate-attrib-stl.ssv
+plots/string-allocn-attrib.py.INPUTS: benchmarks/string/result-allocate-attrib-cfa.ssv
Index: doc/theses/mike_brooks_MMath/plots/string-allocn.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-allocn.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-allocn.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,108 @@
+set terminal pdf color enhanced size 6.0in,4.0in font "Times,17"
+#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
+#set terminal wxt size 950,1250
+
+INDIR="build"
+OUTDIR="build"
+
+SCALE=1024
+
+# common to all
+set macros
+set output OUTDIR."/plot-string-allocn.pdf"
+set multiplot layout 1, 3 ;
+set key outside top center horizontal
+set grid
+
+# common to only first two graphs
+set logscale x 2
+#set mxtics 3                      # 3 steps within each doubling (e.g. 3 steps of of 32 between 32 and 128 => tick on 32s in there)
+set xlabel "Heap Used (B)"
+set logscale y 10
+
+#
+# CFA multisize
+#
+
+set ylabel "Duration (ns)" offset 2,0
+set yrange[35:125]
+set ytics add (40, 50, 60, 70, 80, 90, 110, 120)
+
+set xrange[32:4096]
+set xtics rotate by -90
+set xtics ("" 32, "64 k" 64, "" 128, "256 k" 256, "" 512, "1 M" 1024, "" 2048, "4 M" 4096)
+
+# First each curve, then each default-expansion point
+plot INDIR."/plot-string-allocn.dat" \
+	   i 0 using ($3/SCALE):2 title columnheader(1) with linespoints lt rgb "blue"    pt  2   ps 1 lw 1, \
+	'' i 1 using ($3/SCALE):2 title columnheader(1) with linespoints lt rgb "red"     pt  3   ps 1 lw 1, \
+	'' i 2 using ($3/SCALE):2 title columnheader(1) with linespoints lt rgb "brown"   pt  8   ps 1 lw 1, \
+	'' i 3 using ($3/SCALE):2 title columnheader(1) with linespoints lt rgb "black"   pt  10  ps 1 lw 1, \
+	'' i 4 using ($3/SCALE):2 title columnheader(1) with linespoints lt rgb "magenta" pt  12  ps 1 lw 1, \
+	'' i 0 using ( ($4 == 1) ? ($3/SCALE) : 1/0 ):2 notitle with points lt rgb "blue"    pt  66 ps 2, \
+	'' i 1 using ( ($4 == 1) ? ($3/SCALE) : 1/0 ):2 notitle with points lt rgb "red"     pt  66 ps 2, \
+	'' i 2 using ( ($4 == 1) ? ($3/SCALE) : 1/0 ):2 notitle with points lt rgb "brown"   pt  66 ps 2, \
+	'' i 3 using ( ($4 == 1) ? ($3/SCALE) : 1/0 ):2 notitle with points lt rgb "black"   pt  66 ps 2, \
+	'' i 4 using ( ($4 == 1) ? ($3/SCALE) : 1/0 ):2 notitle with points lt rgb "magenta" pt  66 ps 2
+
+unset ylabel
+
+unset xtics
+unset ytics
+unset yrange
+unset xrange
+
+
+#
+# STL comparison
+#
+
+
+set yrange[40:85]
+set ytics add (40, 45, 50, 55, 60, 65, 70, 75, 80, 85)
+set mytics 90                     # 90 steps within each decade (e.g. 90 steps of of 1 between 10 and 100 => tick on 1s in there)
+
+set xrange[64:4096]
+set xtics rotate by -90
+set xtics ("64 k" 64, "128 k" 128, "256 k" 256, "512 k" 512, "1 M" 1024, "2 M" 2048, "4 M" 4096)
+
+# skullduggeries:
+# hardcoding chunk index and assuming data in the chunk (by hardcoding only the stl series title)
+# series order is meaningless but important: achieves z-order readability and legend order acceptability
+
+plot INDIR."/plot-string-allocn.dat" \
+	   i 8 using                          ($3/SCALE)        :2 title "tradeoff"      with lines       lt rgb "#77000000"  dt (2,2)       lw 8, \
+	'' i 1 using                          ($3/SCALE)        :2 title columnheader(1) with linespoints lt rgb "red"        pt  3    ps 1  lw 1, \
+	'' i 6 using ( (strcol(4) eq "cfa") ? ($3/SCALE) : 1/0 ):2 notitle               with points      lt rgb "red"        pt 66    ps 2,       \
+	'' i 6 using                          ($3/SCALE)        :2 notitle               with lines       lt rgb "#77000000"  dt (2,2)       lw 8, \
+	'' i 6 using ( (strcol(4) eq "stl") ? ($3/SCALE) : 1/0 ):2 title "stl, len=50"   with points      lt rgb "red"        pt 5     ps 1,       \
+	'' i 3 using                          ($3/SCALE)        :2 title columnheader(1) with linespoints lt rgb "black"      pt  10   ps 1  lw 1, \
+	'' i 8 using ( (strcol(4) eq "stl") ? ($3/SCALE) : 1/0 ):2 title "stl, len=200"  with points      lt rgb "black"      pt 5     ps 1,       \
+	'' i 8 using ( (strcol(4) eq "cfa") ? ($3/SCALE) : 1/0 ):2 notitle               with points      lt rgb "black"      pt 66    ps 2
+
+
+unset mytics
+unset ytics
+unset yrange
+unset xrange
+
+
+
+# common to first two graphs
+unset logscale
+unset xlabel
+unset mxtics
+
+#
+# Attribution
+#
+
+set style data histogram
+set ytics auto
+set style histogram clustered gap 1 rowstacked
+set style fill solid border -1
+set boxwidth 0.8
+set xtics rotate by -45
+
+plot for [col=3:8] \
+    INDIR.'/plot-string-allocn-attrib.dat' using col:xticlabels(stringcolumn(2).", len=".stringcolumn(1)) index 0 title columnheader(col)
Index: doc/theses/mike_brooks_MMath/plots/string-allocn.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-allocn.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-allocn.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,97 @@
+# Read thesis-append-pbv.csv
+# Output for string-graph-peq-sharing.dat
+
+# Project details
+# Filter operation=peq
+# Split "series" goups of sut; only those in the "pretty" list
+# Assert one row per string-length
+# output:
+# string-len op-duration
+# in chunks, each headed by pertty(sut)
+
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from common import *
+
+# re: apparent cherrypicking
+# The system's response to the liveness threshold is not smooth.
+# The system only uses the threshold to decide whether it will double the text heap again or not.
+# The system's speed for a given string size in a given amount of memory is not affected by the specific value of the liveness threshold.
+# Goals with this selection are
+#  - showing one speed result per <string size, memory usage amount>
+#  - cropping diminishing or negative returns for large memory sizes
+#    - diminishing is obvious, already shown past chosen sweet spot in this selection
+#    - negative caused by overflowing llc, not relevant to sting impl
+favSizes = {20:[-1.0, 0.05, 0.1, 0.2, 0.5, 0.9],
+            50:[-1.0, 0.05, 0.1, 0.2, 0.5, 0.9],
+            100:[-1.0, 0.1, 0.2, 0.5, 0.9],
+            200:[-1.0, 0.1, 0.2, 0.5, 0.9],
+            500:[-1.0, 0.4, 0.9, 0.98]}
+
+defaultExpansions = [-1, 0.2]
+
+cfatimings = loadParseTimingData('result-allocate-speed-cfa.csv',
+                xClasNames=['expansion'], xClasDtypes={'expansion':'Float64'},
+                xFactNames=['topIters'], xFactDtypes={'topIters':np.int64})
+
+cfasizings = loadParseSizingData('result-allocate-space-cfa.ssv', xClasNames=['expansion'], xClasDtypes={'expansion':'Float64'})
+
+stltimings = loadParseTimingData('result-allocate-speed-stl.csv',
+                xClasNames=['expansion'], xClasDtypes={'expansion':'Float64'},
+                xFactNames=['topIters'], xFactDtypes={'topIters':np.int64})
+
+stlsizings = loadParseSizingData('result-allocate-space-stl.ssv', xClasNames=['expansion'], xClasDtypes={'expansion':'Float64'})
+
+timings = pd.concat([cfatimings, stltimings])
+sizings = pd.concat([cfasizings, stlsizings])
+
+combined = pd.merge(
+    left=timings,
+    right=sizings[['sut', 'corpus','expansion','hw_cur_req_mem(B)']],
+    on=['sut', 'corpus','expansion']
+)
+
+combined['is-default'] = np.isin(combined['expansion'], defaultExpansions).astype(int)
+
+# print ('!!')
+# print(combined)
+
+
+# Emit
+
+# First, for the CFA curves
+sut = "cfa"
+sutGroup = combined.groupby('sut-platform').get_group(sut)
+
+groupedSize = sutGroup.groupby('corpus-meanlen')
+
+for sz, szgroup in groupedSize:
+
+    if sz in favSizes.keys():
+            szgroup_sorted = szgroup.sort_values(by='expansion')
+
+            print('"{sut}, len={len}"'.format(sut=sut, len=sz))
+            # print(szgroup_sorted)  ##
+            # print(szgroup_sorted['expansion'], 'isin', favSizes[sz]) ##
+            favoured = szgroup_sorted.loc[szgroup_sorted['expansion'].isin(favSizes[sz])]
+            # print('!') ##
+            # print(favoured) ##
+            text = favoured[['expansion', 'op-duration-ns', 'hw_cur_req_mem(B)', 'is-default']].to_csv(header=False, index=False, sep='\t')
+            print(text)
+            print()
+
+# Again, for the STL-comparisons, default expansion only
+
+atDefaults = combined.groupby('is-default').get_group(1)
+
+for sz, szgroup in atDefaults.groupby('corpus-meanlen'):
+
+    if sz in favSizes.keys():
+            print(sz)
+            text = szgroup[['expansion', 'op-duration-ns', 'hw_cur_req_mem(B)', 'sut-platform']].to_csv(header=False, index=False, sep='\t')
+            print(text)
+            print()
Index: doc/theses/mike_brooks_MMath/plots/string-pbv-fixcorp.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-pbv-fixcorp.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-pbv-fixcorp.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,48 @@
+# Read thesis-append-pbv.csv
+# Output for string-graph-peq-sharing.dat
+
+# Project details
+# Filter operation=peq
+# Split "series" goups of sut; only those in the "pretty" list
+# Assert one row per string-length
+# output:
+# string-len op-duration
+# in chunks, each headed by pertty(sut)
+
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from common import *
+
+prettyFieldNames = {
+    "cfa-ll-share-na": "{/Helvetica=15 C{/Symbol \\42}} share",
+    "stl-na-na-na": "STL",
+}
+
+timings = loadParseTimingData('result-append-pbv.csv')
+
+
+# Filter operation=pbv, corpus=1-*-1
+
+timings = timings.groupby('operation').get_group('pbv')
+timings = timings.groupby('corpus-nstrs').get_group(1)
+timings = timings.groupby('corpus-runid').get_group(1)
+
+
+# Emit in groups
+
+groupedSut = timings.groupby('sut')
+
+for sut, sgroup in groupedSut:
+
+    if sut in prettyFieldNames:
+
+        sgroup_sorted = sgroup.sort_values(by='corpus-meanlen')
+
+        print('"{header}"'.format(header=prettyFieldNames[sut]))
+        text = sgroup_sorted[['corpus-meanlen', 'op-duration-ns']].to_csv(header=False, index=False, sep='\t')
+        print(text)
+        print()
Index: doc/theses/mike_brooks_MMath/plots/string-pbv-varcorp.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-pbv-varcorp.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-pbv-varcorp.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,48 @@
+# Read thesis-append-pbv.csv
+# Output for string-graph-peq-sharing.dat
+
+# Project details
+# Filter operation=peq
+# Split "series" goups of sut; only those in the "pretty" list
+# Assert one row per string-length
+# output:
+# string-len op-duration
+# in chunks, each headed by pertty(sut)
+
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from common import *
+
+prettyFieldNames = {
+    "cfa-ll-share-na": "{/Helvetica=15 C{/Symbol \\42}} share",
+    "stl-na-na-na": "STL",
+}
+
+timings = loadParseTimingData('result-append-pbv.csv')
+
+
+# Filter operation=pbv, corpus=100-*-1
+
+timings = timings.groupby('operation').get_group('pbv')
+timings = timings.groupby('corpus-nstrs').get_group(100)
+timings = timings.groupby('corpus-runid').get_group(1)
+
+
+# Emit in groups
+
+groupedSut = timings.groupby('sut')
+
+for sut, sgroup in groupedSut:
+
+    if sut in prettyFieldNames:
+
+        sgroup_sorted = sgroup.sort_values(by='corpus-meanlen')
+
+        print('"{header}"'.format(header=prettyFieldNames[sut]))
+        text = sgroup_sorted[['corpus-meanlen', 'op-duration-ns']].to_csv(header=False, index=False, sep='\t')
+        print(text)
+        print()
Index: doc/theses/mike_brooks_MMath/plots/string-pbv.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-pbv.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-pbv.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,3 @@
+plots/string-pbv.gp.INPUTS: build/plot-string-pbv-varcorp.dat build/plot-string-pbv-fixcorp.dat | build
+plots/string-pbv-varcorp.py.INPUTS: benchmarks/string/result-append-pbv.csv
+plots/string-pbv-fixcorp.py.INPUTS: benchmarks/string/result-append-pbv.csv
Index: doc/theses/mike_brooks_MMath/plots/string-pbv.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-pbv.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-pbv.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,36 @@
+set terminal pdf color enhanced size 6.0in,3.0in font "Times,17"
+#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
+#set terminal wxt size 950,1250
+
+INDIR="build"
+OUTDIR="build"
+
+set macros
+set output OUTDIR."/plot-string-pbv.pdf"
+
+set multiplot layout 1, 2 ;
+
+
+#set pointsize 2.0
+set grid
+set key bottom right
+#set key at screen 0.45, screen 0.8
+set xtics (1,2,5,10,20,50,100,200,500)
+set logscale x
+set logscale y 2
+set xlabel "String length passed, varying (mean)"
+set ylabel "Time per pass (ns, mean), log_{2} scale"
+set yrange [4:64]
+set linetype 3 dashtype 2
+set linetype 4 dashtype 2
+plot INDIR."/plot-string-pbv-varcorp.dat" \
+	   i 0 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  3  ps 1 lw 1, \
+	'' i 1 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  6  ps 1 lw 1
+
+set xlabel "String length passed, fixed"
+set ylabel
+plot INDIR."/plot-string-pbv-fixcorp.dat"  \
+	   i 0 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  3  ps 1 lw 1, \
+	'' i 1 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  6  ps 1 lw 1
+
+unset multiplot
Index: doc/theses/mike_brooks_MMath/plots/string-peq-cppemu.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-peq-cppemu.gp	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/plots/string-peq-cppemu.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -13,6 +13,6 @@
 set xtics (1,2,5,10,20,50,100,200,500)
 set logscale x
-set logscale y
-set yrange [10:200]
+#set logscale y
+set yrange [0:115]
 set xlabel "String Length being appended (mean, geo. dist.), log scale" offset 2,0
 set ylabel "Time per append (ns, mean)"
Index: doc/theses/mike_brooks_MMath/plots/string-peq-cppemu.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-peq-cppemu.py	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/plots/string-peq-cppemu.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -12,7 +12,9 @@
 import pandas as pd
 import numpy as np
+import sys
 import os
 
-infile = os.path.dirname(os.path.abspath(__file__)) + '/../benchmarks/string/result-append-pbv.csv'
+sys.path.insert(0, os.path.dirname(__file__))
+from common import *
 
 prettyFieldNames = {
@@ -23,58 +25,15 @@
 }
 
-timings = pd.read_csv(
-    infile,
-    names=['test', 'corpus', 'concatsPerReset', 'corpusItemCount', 'corpusMeanLenChars', 'concatDoneActualCount', 'execTimeActualSec'],
-    dtype={'test':                  str,
-           'corpus':                str,
-           'concatsPerReset':       'Int64', # allows missing; https://stackoverflow.com/a/70626154
-           'corpusItemCount':       np.int64,
-           'corpusMeanLenChars':    np.float64,
-           'concatDoneActualCount': np.int64,
-           'execTimeActualSec':     np.float64},
-    na_values=['xxx'],
-)
-# print(timings.head())
+timings = loadParseTimingData('result-append-pbv.csv')
 
+# Filter operation=peq, corpus=100-*-1
 
-# project: parse executable and corpus names
-
-timings[['test-slug',
-     'sut-platform',
-     'operation',
-     'sut-cfa-level',
-     'sut-cfa-sharing',
-     'op-alloc']] = timings['test'].str.strip().str.split('-', expand=True)
-timings['sut'] = timings[['sut-platform',
-                    'sut-cfa-level',
-                    'sut-cfa-sharing',
-                    'op-alloc']].agg('-'.join, axis=1)
-
-timings[['corpus-basename',
-     'corpus-ext']] = timings['corpus'].str.strip().str.split('.', expand=True)
-timings[['corpus-slug',
-     'corpus-nstrs',
-     'corpus-meanlen',
-     'corpus-runid']] = timings['corpus-basename'].str.strip().str.split('-', expand=True)
-timings["corpus-nstrs"] = pd.to_numeric(timings["corpus-nstrs"])
-timings["corpus-meanlen"] = pd.to_numeric(timings["corpus-meanlen"])
-timings["corpus-runid"] = pd.to_numeric(timings["corpus-runid"])
-
-
-# project: calculate fact
-
-timings['op-duration-s'] = timings['execTimeActualSec'] / timings['concatDoneActualCount']
-timings['op-duration-ns'] = timings['op-duration-s'] * 1000 * 1000 * 1000
-
-
-# Filter operation=peq
-
-groupedOp = timings.groupby('operation')
-tgtOpTimings = groupedOp.get_group('peq')
-
+timings = timings.groupby('operation').get_group('peq')
+timings = timings.groupby('corpus-nstrs').get_group(100)
+timings = timings.groupby('corpus-runid').get_group(1)
 
 # Emit in groups
 
-groupedSut = tgtOpTimings.groupby('sut')
+groupedSut = timings.groupby('sut')
 
 for sut, sgroup in groupedSut:
Index: doc/theses/mike_brooks_MMath/plots/string-peq-sharing.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-peq-sharing.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-peq-sharing.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,2 @@
+plots/string-peq-sharing.gp.INPUTS: build/plot-string-peq-sharing.dat | build
+plots/string-peq-sharing.py.INPUTS: benchmarks/string/result-append-pbv.csv
Index: doc/theses/mike_brooks_MMath/plots/string-peq-sharing.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-peq-sharing.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-peq-sharing.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,25 @@
+set terminal pdf color enhanced size 6.0in,3.0in font "Times,17"
+#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
+#set terminal wxt size 950,1250
+
+INDIR="build"
+OUTDIR="build"
+
+set macros
+set output OUTDIR."/plot-string-peq-sharing.pdf"
+#set pointsize 2.0
+set grid
+set key top left
+set xtics (1,2,5,10,20,50,100,200,500)
+set logscale x
+#set logscale y
+set yrange [10:115]
+set xlabel "String Length being appended (mean, geo. dist.), log scale" offset 2,0
+set ylabel "Time per append (ns, mean)"
+set linetype 2 dashtype 2
+set linetype 4 dashtype 2
+plot INDIR."/plot-string-peq-sharing.dat" \
+	   i 0 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  2  ps 1 lw 1, \
+	'' i 1 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  3  ps 1 lw 1, \
+	'' i 2 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  6  ps 1 lw 1, \
+	'' i 3  using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  8  ps 1 lw 1
Index: doc/theses/mike_brooks_MMath/plots/string-peq-sharing.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-peq-sharing.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-peq-sharing.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,50 @@
+# Read thesis-append-pbv.csv
+# Output for string-graph-peq-sharing.dat
+
+# Project details
+# Filter operation=peq
+# Split "series" goups of sut; only those in the "pretty" list
+# Assert one row per string-length
+# output:
+# string-len op-duration
+# in chunks, each headed by pertty(sut)
+
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from common import *
+
+prettyFieldNames = {
+    "cfa-ll-share-fresh": "{/Helvetica=15 C{/Symbol \\42} +=} share fresh",
+    "cfa-ll-share-reuse": "{/Helvetica=15 C{/Symbol \\42} +=} share reuse",
+    "stl-na-na-fresh": "STL {/Helvetica=15 +=} fresh",
+    "stl-na-na-reuse": "STL {/Helvetica=15 +=} reuse",
+}
+
+timings = loadParseTimingData('result-append-pbv.csv')
+
+
+# Filter operation=peq, corpus=100-*-1
+
+timings = timings.groupby('operation').get_group('peq')
+timings = timings.groupby('corpus-nstrs').get_group(100)
+timings = timings.groupby('corpus-runid').get_group(1)
+
+
+# Emit in groups
+
+groupedSut = timings.groupby('sut')
+
+for sut, sgroup in groupedSut:
+
+    if sut in prettyFieldNames:
+
+        sgroup_sorted = sgroup.sort_values(by='corpus-meanlen')
+
+        print('"{header}"'.format(header=prettyFieldNames[sut]))
+        text = sgroup_sorted[['corpus-meanlen', 'op-duration-ns']].to_csv(header=False, index=False, sep='\t')
+        print(text)
+        print()
Index: doc/theses/mike_brooks_MMath/plots/string-pta-sharing.d
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-pta-sharing.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-pta-sharing.d	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,2 @@
+plots/string-pta-sharing.gp.INPUTS: build/plot-string-pta-sharing.dat | build
+plots/string-pta-sharing.py.INPUTS: benchmarks/string/result-append-pbv.csv
Index: doc/theses/mike_brooks_MMath/plots/string-pta-sharing.gp
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-pta-sharing.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-pta-sharing.gp	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,24 @@
+set terminal pdf color enhanced size 6.0in,3.0in font "Times,17"
+#set terminal postscript portrait enhanced size 7.5, 10. color solid 9.5;
+#set terminal wxt size 950,1250
+
+INDIR="build"
+OUTDIR="build"
+
+set macros
+set output OUTDIR."/plot-string-pta-sharing.pdf"
+#set pointsize 2.0
+set grid
+set key top left
+set xtics (1,2,5,10,20,50,100,200,500)
+set logscale x
+set yrange [8:4096]
+set logscale y 2
+set xlabel "String Length being appended (mean, geo. dist.), log scale" offset 2,0
+set ylabel "Time per append (ns, mean), log_{2} scale"
+#show colornames
+plot INDIR."/plot-string-pta-sharing.dat" \
+	   i 0 using 1:2 title columnheader(1) with linespoints lt rgb "red"	pt  2  ps 1 lw 1, \
+	'' i 1 using 1:2 title columnheader(1) with linespoints lt rgb "dark-green" pt  4  ps 1 lw 1, \
+	'' i 2 using 1:2 title columnheader(1) with linespoints lt rgb "blue"	pt  6  ps 1 lw 1, \
+	'' i 3  using 1:2 title columnheader(1) with linespoints lt rgb "dark-green" pt  12  ps 1 lw 1
Index: doc/theses/mike_brooks_MMath/plots/string-pta-sharing.py
===================================================================
--- doc/theses/mike_brooks_MMath/plots/string-pta-sharing.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/plots/string-pta-sharing.py	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,57 @@
+# Read thesis-append-pbv.csv
+# Output for string-graph-pta-sharing.dat
+
+# Project details
+# Filter operation=peq
+# Split "series" goups of sut; only those in the "pretty" list
+# Assert one row per string-length
+# output:
+# string-len op-duration
+# in chunks, each headed by pertty(sut)
+
+import pandas as pd
+import numpy as np
+import os
+import sys
+
+sys.path.insert(0, os.path.dirname(__file__))
+from common import *
+
+prettyFieldNames = {
+    "peq": {
+        "cfa-ll-share-fresh": "{/Helvetica=15 C{/Symbol \\42} x += y} share fresh",
+        "stl-na-na-fresh": "STL {/Helvetica=15 x += y} fresh",
+    },
+    "pta": {
+        "cfa-ll-share-fresh": "{/Helvetica=15 C{/Symbol \\42} x = x + y} share fresh",
+        "stl-na-na-fresh": "STL {/Helvetica=15  x = x + y} fresh",
+    }
+}
+
+timings = loadParseTimingData('result-append-pbv.csv')
+
+
+# Filter corpus=100-*-1
+
+timings = timings.groupby('corpus-nstrs').get_group(100)
+timings = timings.groupby('corpus-runid').get_group(1)
+
+# Emit in groups
+
+groupedSut = timings.groupby('sut')
+
+for sut, sgroup in groupedSut:
+    groupedOp = sgroup.groupby('operation')
+    for op,opPretty in prettyFieldNames.items():
+
+        if op in groupedOp.groups:
+            tgtOpTimings = groupedOp.get_group(op)
+
+            if sut in opPretty:
+
+                sgroup_sorted = tgtOpTimings.sort_values(by='corpus-meanlen')
+
+                print('"{header}"'.format(header=opPretty[sut]))
+                text = sgroup_sorted[['corpus-meanlen', 'op-duration-ns']].to_csv(header=False, index=False, sep='\t')
+                print(text)
+                print()
Index: doc/theses/mike_brooks_MMath/programs/bkgd-cfa-arrayinteract.cfa
===================================================================
--- doc/theses/mike_brooks_MMath/programs/bkgd-cfa-arrayinteract.cfa	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/programs/bkgd-cfa-arrayinteract.cfa	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -3,5 +3,5 @@
 
 struct tm { int x; };
-forall (T*) T* alloc();
+forall( T * ) T * alloc();
 
 int main () {
Index: doc/theses/mike_brooks_MMath/programs/hello-accordion.cfa
===================================================================
--- doc/theses/mike_brooks_MMath/programs/hello-accordion.cfa	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/programs/hello-accordion.cfa	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -31,9 +31,9 @@
 int getPref( @School( C, S ) & school@, int is, int pref ) {
 	for ( ic; C ) {
-		int curPref = @school.preferences@[ic][is];   $\C{// offset calculation implicit}$
-		if ( curPref == pref ) return ic;
+		if ( pref == @school.preferences@[ic][is]; ) return ic; $\C{// offset calculation implicit}$
 	}
 	assert( false );
 }
+
 
 
@@ -91,5 +91,5 @@
 		sout | school.student_ids[is] | ": " | nonl;
 		for ( pref; 1 ~= nc ) {
-			int ic = getPref(school, is, pref);
+			int ic = getPref( school, is, pref );
 			sout | school.course_codes[ ic ] | nonl;
 		}
Index: doc/theses/mike_brooks_MMath/string.tex
===================================================================
--- doc/theses/mike_brooks_MMath/string.tex	(revision 7d02d35a7f30abbea5194b398c84870163fbe5dd)
+++ doc/theses/mike_brooks_MMath/string.tex	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -17,19 +17,19 @@
 \begin{cquote}
 \begin{tabular}{@{}l|l|l|l@{}}
-C @char [ ]@			&  \CC @string@			& Java @String@     & \CFA @string@	\\
+C @char [ ]@			&  \CC @string@			& Java @String@	& \CFA @string@	\\
 \hline
-@strcpy@, @strncpy@		& @=@					& @=@               & @=@	\\
-@strcat@, @strncat@		& @+@, @+=@				& @+@, @+=@         & @+@, @+=@	\\
+@strcpy@, @strncpy@		& @=@					& @=@			& @=@	\\
+@strcat@, @strncat@		& @+@, @+=@				& @+@, @+=@		& @+@, @+=@	\\
 @strcmp@, @strncmp@		& @==@, @!=@, @<@, @<=@, @>@, @>=@
-                                                & @equals@, @compareTo@
-																	& @==@, @!=@, @<@, @<=@, @>@, @>=@ \\
-@strlen@				& @length@, @size@	 	& @length@			& @size@ 	\\
-@[ ]@					& @[ ]@				 	& @charAt@          & @[ ]@	\\
-@strncpy@				& @substr@			 	& @substring@       & @( )@, on RHS of @=@	\\
-@strncpy@				& @replace@				& @replace@         & @( )@, on LHS of @=@ \\
-@strstr@				& @find@				& @indexOf@         & @find@ \\
-@strcspn@				& @find_first_of@		& @matches@         & @include@ \\
-@strspn@				& @find_first_not_of@	& @matches@         & @exclude@ \\
-n/a						& @c_str@, @data@		& n/a               & @strcpy@, @strncpy@ \\
+												& @equals@, @compareTo@
+																& @==@, @!=@, @<@, @<=@, @>@, @>=@ \\
+@strlen@				& @length@, @size@	 	& @length@		& @size@ 	\\
+@[ ]@					& @[ ]@				 	& @charAt@		& @[ ]@	\\
+@strncpy@				& @substr@			 	& @substring@	& @( )@, on RHS of @=@	\\
+@strncpy@				& @replace@				& @replace@		& @( )@, on LHS of @=@ \\
+@strstr@				& @find@				& @indexOf@		& @find@ \\
+@strcspn@				& @find_first_of@		& @matches@		& @include@ \\
+@strspn@				& @find_first_not_of@	& @matches@		& @exclude@ \\
+N/A						& @c_str@, @data@		& N/A			& @strcpy@, @strncpy@ \\
 \end{tabular}
 \end{cquote}
@@ -53,5 +53,5 @@
 
 
-\section{\CFA \lstinline{string} type}
+\section{\CFA \lstinline{string} Type}
 \label{s:stringType}
 
@@ -272,6 +272,6 @@
 ch = ch + 'b'; $\C[2in]{// LHS disambiguate, add character values}$
 s = 'a' + 'b'; $\C{// LHS disambiguate, concatenate characters}$
-printf( "%c\n", @'a' + 'b'@ ); $\C[2in]{// no LHS information, ambiguous}$
-printf( "%c\n", @(return char)@('a' + 'b') ); $\C{// disambiguate with ascription cast}$
+printf( "%c\n", @'a' + 'b'@ ); $\C{// no LHS information, ambiguous}$
+printf( "%c\n", @(return char)@('a' + 'b') ); $\C{// disambiguate with ascription cast}\CRT$
 \end{cfa}
 The ascription cast, @(return T)@, disambiguates by stating a (LHS) type to use during expression resolution (not a conversion).
@@ -319,6 +319,6 @@
 ch = ch * 3; $\C[2in]{// LHS disambiguate, multiply character values}$
 s = 'a' * 3; $\C{// LHS disambiguate, concatenate characters}$
-printf( "%c\n", @'a' * 3@ ); $\C[2in]{// no LHS information, ambiguous}$
-printf( "%c\n", @(return char)@('a' * 3) ); $\C{// disambiguate with ascription cast}$
+printf( "%c\n", @'a' * 3@ ); $\C{// no LHS information, ambiguous}$
+printf( "%c\n", @(return char)@('a' * 3) ); $\C{// disambiguate with ascription cast}\CRT$
 \end{cfa}
 Fortunately, character multiplication without LHS information is even rarer than addition, so repurposing the operator @*@ for @string@ types is not a problem.
@@ -600,5 +600,5 @@
 &
 \begin{cfa}
-for ( ;; ) {
+for () {
 	size_t posn = exclude( line, alpha );
   if ( posn == len( line ) ) break;
@@ -722,5 +722,5 @@
 \end{tabular}
 \end{cquote}
-Input text can be gulped, including whitespace, from the current point to an arbitrary delimiter character using @getline@.
+Input text can be \emph{gulped}, including whitespace, from the current point to an arbitrary delimiter character using @getline@.
 
 The \CFA philosophy for input is that, for every constant type in C, these constants should be usable as input.
@@ -760,5 +760,5 @@
 \end{tabular}
 \end{cquote}
-Note, the ability to read in quoted strings to match with program string constants.
+Note, the ability to read in quoted strings with whitespace to match with program string constants.
 The @nl@ at the end of an input ignores the rest of the line.
 
@@ -845,5 +845,5 @@
 					& Laxed: The target's type is anything string-like; it may have a different status concerning ownership.
 								& Strict: The target's type is the same as the source; both strings are equivalent peers concerning ownership.
-											& n/a		& no	& yes	& yes \\
+											& N/A		& no	& yes	& yes \\
 \hline
 Referent
@@ -863,5 +863,5 @@
 	The C ``string'' is @char *@, under the conventions of @<string.h>@. Because this type does not manage a text allocation, symmetry does not apply.
 \item
-	The Java @String@ class is analyzed; its @StringBuffer@ class behaves similarly to @C++@.
+	The Java @String@ class is analyzed; its @StringBuffer@ class behaves similarly to \CC.
 \end{itemize}
 \caption{Comparison of languages' strings, storage management perspective.}
@@ -869,20 +869,19 @@
 \end{figure}
 
-In C, these declarations give very different things.
+In C, these declarations are very different.
 \begin{cfa}
 char x[$\,$] = "abcde";
 char * y = "abcde";
 \end{cfa}
-Both associate the declared name with fixed-six contiguous bytes, filled as @{'a', 'b', 'c', 'd', 'e', 0}@.
-But @x@ gets them allocated in the active stack frame (with values filled in as control passes the declaration), while @y@ refers into the executable's read-only data section.
+Both associate the declared name with the fixed, six contiguous bytes: @{'a', 'b', 'c', 'd', 'e', 0}@.
+But @x@ is allocated on the stack (with values filled at the declaration), while @y@ refers to the executable's read-only data-section.
 With @x@ representing an allocation, it offers information in @sizeof(x)@ that @y@ does not.
-But this extra information is second-class, as it can only be used in the immediate lexical context, \ie it cannot be passed on to string operations or user functions.
+But this extra information is second-class, as it can only be used in the immediate lexical context, \ie it cannot be passed to string operations or user functions.
 Only pointers to text buffers are first-class, and discussed further.
-
 \begin{cfa}
 char * s = "abcde";
-char * s1 = s;  $\C{// alias state, n/a symmetry, variable-constrained referent}$
-char * s2 = &s[1];  $\C{// alias state, n/a symmetry, variable-constrained referent}\CRT$
-char * s3 = &s2[1];  $\C{// alias state, n/a symmetry, variable-constrained referent}
+char * s1 = s;  $\C[2.25in]{// alias state, N/A symmetry, variable-constrained referent}$
+char * s2 = &s[1];  $\C{// alias state, N/A symmetry, variable-constrained referent}$
+char * s3 = &s2[1];  $\C{// alias state, N/A symmetry, variable-constrained referent}\CRT$
 printf( "%s %s %s %s\n", s, s1, s2, s3 );
 $\texttt{\small abcde abcde bcde cde}$
@@ -904,10 +903,10 @@
 string & s5 = s.substr(2,4);  $\C{// error: cannot point to temporary}\CRT$
 \end{cfa}
-The @s1@ lax symmetry reflects how its validity of depends on the lifetime of @s@.
+The @s1@ lax symmetry reflects how its validity depends on the lifetime of @s@.
 It is common practice in \CC to use the @s1@-style for a by-reference function parameter.
 Doing so assumes that the callee only uses the referenced string for the duration of the call, \ie no storing the parameter (as a reference) for later.
 So, when the called function is a constructor, its definition typically uses an @s2@-style copy-initialization.
 Exceptions to this pattern are possible, but require the programmer to assure safety where the type system does not.
-The @s3@ initialization must copy the substring because it must support a subsequent @c_str@ call, which provides a null-termination, generally at a different position than the source string's.
+The @s3@ initialization must copy the substring to support a subsequent @c_str@ call, which provides null-termination, generally at a different position than the source string's.
 @s2@ assignment could be made fast, by reference-counting the text area and using copy-on-write, but would require an implementation upgrade.
 
@@ -929,5 +928,5 @@
 With @s2@, the case for fast-copy is more subtle.
 Certainly, its value is not pointer-equal to @s@, implying at least a further allocation.
-But because Java is not constrained to use a null-terminated representation, a standard-library implementation is free to refer to the source characters in-place.
+But because Java is \emph{not} constrained to use a null-terminated representation, a standard-library implementation is free to refer to the source characters in-place.
 Java does not meet the aliasing requirement because immutability makes it impossible to modify.
 Java's @StringBuffer@ provides aliasing (see @replace@ example on \VPageref{p:JavaReplace}), though without supporting symmetric treatment of a fragment referent, \eg @substring@ of a @StringBuffer@ is a @String@;
@@ -960,36 +959,50 @@
 
 
-
-\subsection{Logical overlap}
+\subsection{Logical Overlap}
 
 It may be unfamiliar to combine \VRef[Figure]{f:StrSemanticCompare}'s alias state and fragment referent in one API, or at the same time.
 This section shows the capability in action.
 
-In summary, the metaphor of a GUI text editor is intended.
-Selecting a consecutive block of text using the mouse defines an aliased substring within the file.
-Typing in this state overwrites what was there before, replacing the originally selected text with more or less text.
-But the \emph{whole file} grows or shrinks as a result, not just the selection.
-This action models assigning to an aliased substring when the two strings overlap by total containment: one string is the selection, the other is the whole file.
-
-Now extend the metaphor to a multi-user online editor.
-If Alice selects a range of text at the bottom of the file, wile Bob is rewriting a paragraph at the top, Alice's selection holds onto the logical characters initially selected, unaffected by Bob making the total file grow/shrink, and unaffectd by Bob causing the start index of Alice's selction to vary.
-This action models assigning to an aliased substring when the two strings do not overlap at all: one string is Alice's selection, the other is Bob's.
-
-If a third office worker were also watching Alice's and Bob's actions on the whole file (a string with ``all the text'' is kept around), then two further single-user-edit cases give the semantics of the individual edits flowing into the whole.
-But, departing from the document analogy, it is not necessary to keep a such a third string:
-no one has to resource-manage ``the document.''
-When an original string, from which both the Alice- and Bob-parts came, ceases to exist, Alice and Bob are left with two independent strings.
-They are independent because Alice and Bob have no API for growing the bounds of a string to subsume text that may once have been around it.
-
-Edge cases, notably ``Venn-diagram overlap,'' had to have handlings chosen.
-The intent in fleshing out these details was to achieve the above story, with a single API, while keeping the rest as simple as possible.
-The remainder of this section shows the resulting decisions, played out at the API level.
-
-\CFA uses the marker @`share@ as a dynamic mechanism to indicate alias (mutations shared) \vs snapshot (not quite an immutable result, but one with subsequent mutations isolated).
+\begin{comment}
+The metaphor of a GUI text-editor is used to illustrate combining these features.
+Most editors allow selecting a consecutive block of text (highlighted) to define an aliased substring within a document.
+Typing in this area overwrites the prior text, replacing the selected text with less, same, or more text.
+Importantly, the document also changes size, not just the selection.
+%This alias model is assigning to an aliased substring for two strings overlapping by total containment: one is the selected string, the other is the document.
+Extend the metaphor to two selected areas, where one area can be drag-and-dropped into another, changing the text in the drop area and correspondingly changing the document.
+When the selected areas are indenpendent, the semantics of the drag-and-drop are straightforward.
+However, for overlapping selections, either partial or full, there are multiple useful semantics.
+For example, two areas overlap at the top, or bottom, or a block at a corner, where one areas is dropped into the other.
+For selecting a smaller area within a larger, and dropping the smaller area into the larger to replace it.
+In both cases, meaningful semantics must be constructed or the operation precluded.
+However, without this advanced capability, certain operations become multi-step, possible requiring explicit temporaries.
+\end{comment}
+
+A GUI text-editor provides a metaphor.
+Selecting a block of text using the mouse defines an aliased substring within a document.
+Typing in this area overwrites what was there, replacing the originally selected text with more or less text.
+But the \emph{containing document} also grows or shrinks, not just the selection.
+This action models assigning to an aliased substring when one string is completely contained in the other.
+
+Extend the metaphor to a multi-user editor.
+If Alice selects a range of text at the bottom, while Bob is rewriting a paragraph at the top, Alice's selection holds onto the characters initially selected, unaffected by Bob making the document grow/shrink even though Alice's start index in the document is changing.
+This action models assigning to an aliased substring when the two strings do not overlap.
+
+Logically, Alice's and Bob's actions on the whole document are like two single-user-edit cases, giving the semantics of the individual edits flowing into a whole.
+But, there is no need to have two separate document strings.
+Even if a third selection removes all the text, both Alice's and Bob's strings remain.
+The independence of their selections assumes that the editor API does not allow the selection to be enlarged, \ie adding text from the containing environment, which may have disappeared.
+
+This leaves the ``Venn-diagram overlap'' cases, where Alice's and Bob's selections overlap at the top, bottom, or corner.
+In this case, the selection areas are dependent, and so, changes in content and size in one may have an affect in the other.
+There are multiple possible semantics for this case.
+The remainder of this section shows the chosen semantics for all of the cases.
+
+String sharing is expressed using the @`share@ marker to indicate aliasing (mutations shared) \vs snapshot (not quite an immutable result, but one with subsequent mutations isolated).
 This aliasing relationship is a sticky property established at initialization.
 For example, here strings @s1@ and @s1a@ are in an aliasing relationship, while @s2@ is in a copy relationship.
 \input{sharing1.tex}
 Here, the aliasing (@`share@) causes partial changes (subscripting) to flow in both directions.
-(In the following examples, watch how @s1@ and @s1a@ change together, and @s2@ is independent.)
+(In the following examples, note how @s1@ and @s1a@ change together, and @s2@ is independent.)
 \input{sharing2.tex}
 Similarly for complete changes.
@@ -999,5 +1012,5 @@
 \input{sharing4.tex}
 
-Now, consider string @s1_mid@ being an alias in the middle of @s1@, along with @s2@, made by a simple copy from the middle of @s1@.
+Now, consider string @s1_mid@ being an alias in the middle of @s1@, along with @s2@, made by a copy from the middle of @s1@.
 \input{sharing5.tex}
 Again, @`share@ passes changes in both directions; copy does not.
@@ -1020,7 +1033,7 @@
 When @s1_bgn@'s size increases by 3, @s1_mid@'s starting location moves from 1 to 4 and @s1_end@'s from 3 to 6,
 
-When changes happens on an aliasing substring that overlap.
+When changes happen on an aliasing substring that overlap.
 \input{sharing10.tex}
-Strings @s1_crs@ and @s1_mid@ overlap at character 4, @j@ because the substrings are 3,2 and 4,2.
+Strings @s1_crs@ and @s1_mid@ overlap at character 4, @j@, because the substrings are 3,2 and 4,2.
 When @s1_crs@'s size increases by 1, @s1_mid@'s starting location moves from 4 to 5, but the overlapping character remains, changing to @'+'@.
 
@@ -1079,6 +1092,5 @@
 
 
-
-\section{Storage management}
+\section{Storage Management}
 
 This section discusses issues related to storage management of strings.
@@ -1099,10 +1111,9 @@
 const string s1 = "abc";
 \end{cfa}
-the @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 can be mutable, unless some other designation is specified, such as Java's global immutable rule.
-
-
-
-\subsection{General implementation}
+@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 and its underlying string is mutable, unless some other designation is specified, such as Java's global immutable rule.
+
+
+\subsection{General Implementation}
 \label{string-general-impl}
 
@@ -1113,10 +1124,10 @@
 A string is a smart pointer into this buffer.
 
-This cycle of frequent cheap allocations, interspersed with infrequent expensive compactions, has obvious similarities to a general-purpose memory manager based on garbage collection (GC).
+This cycle of frequent cheap allocations, interspersed with infrequent expensive compactions, has obvious similarities to a general-purpose memory-manager based on garbage collection (GC).
 A few differences are noteworthy.
 First, in a general purpose manager, the allocated objects may contain pointers to other objects, making the transitive reachability of these objects a crucial property.
 Here, the allocations are text, so one allocation never keeps another alive.
 Second, in a general purpose manager, the handle that keeps an allocation alive is a bare pointer.
-For strings, a fatter representation is acceptable because this pseudo-pointer is only used for enty into the string-heap, not for general data-sub-structure linking around the general heap.
+For strings, a fatter representation is acceptable because this pseudo-pointer is only used for entry into the string-heap, not for general data-substructure linking around the general heap.
 
 \begin{figure}
@@ -1128,10 +1139,10 @@
 \VRef[Figure]{f:memmgr-basic} shows the representation.
 The heap header and text buffer define a sharing context.
-Normally, one global sharing context is appropriate for an entire program;
-concurrent exceptions are discussed in \VRef{s:ControllingImplicitSharing}.
-A string is a handle into the buffer and node within a linked list.
+Normally, one global context is appropriate for an entire program;
+concurrency is discussed in \VRef{s:ControllingImplicitSharing}.
+A string is a handle to a node in a linked list containing a information about a string text in the buffer.
 The list is doubly linked for $O(1)$ insertion and removal at any location.
 Strings are ordered in the list by text start address.
-The header maintains a next-allocation pointer, @alloc@, pointing to the last live allocation in the buffer.
+The heap header maintains a next-allocation pointer, @alloc@, pointing to the last live allocation in the buffer.
 No external references point into the buffer and the management procedure relocates the text allocations as needed.
 A string handle references a containing string, while its string is contiguous and not null terminated.
@@ -1139,11 +1150,11 @@
 String handles can be allocated in the stack or heap, and represent the string variables in a program.
 Normal C life-time rules apply to guarantee correctness of the string linked-list.
-The text buffer is large enough with good management so that often only one dynamic allocation is necessary during program execution.
+The text buffer is large enough with good management so that often only one dynamic allocation is necessary during program execution, but not so large as to cause program bloat.
 % During this period, strings can vary in size dynamically.
 
 When the text buffer fills, \ie the next new string allocation causes @alloc@ to point beyond the end of the buffer, the strings are compacted.
 The linked handles define all live strings in the buffer, which indirectly defines the allocated and free space in the buffer.
-Since the string handles are in sorted order, the handle list can be traversed, copying the first live text to the start of the buffer, and subsequent strings after each other.
-If, upon compaction, the amount of free storage would still be less than the new string allocation, a larger text buffer is heap-allocated, the current buffer is copied into the new buffer, and the original buffer is freed.
+The string handles are maintained in sorted order, so the handle list can be traversed, copying the first live text to the start of the buffer, and subsequent strings after each other.
+After compaction, if free storage is still be less than the new string allocation, a larger text buffer is heap-allocated, the current buffer is copied into the new buffer, and the original buffer is freed.
 Note, the list of string handles is structurally unaffected during a compaction;
 only the text pointers in the handles are modified to new buffer locations.
@@ -1157,8 +1168,8 @@
 Both string initialization styles preserve the string module's internal invariant that the linked-list order matches the buffer order.
 For string destruction, handles are removed from the list.
-As a result, once a last handle using a run of buffer characters is destroyed, that buffer space gets excluded from the next compaction, making its character-count available in the compacted buffer.
-
-Certain string operations can result in a substring of another string.
-The resulting handle is then placed in the correct sorted position in the list, possible with a short linear search to locate the position.
+Once the last handle using a run of buffer characters is destroyed, that buffer space is excluded from use until the next compaction.
+
+Certain string operations result in a substring of another string.
+The resulting handle is then placed in the correct sorted position in the list, possible requiring a short linear search to locate the position.
 For string operations resulting in a new string, that string is allocated at the end of the buffer.
 For shared-edit strings, handles that originally referenced containing locations need to see the new value at the new buffer location.
@@ -1175,9 +1186,9 @@
 
 
-\subsection{RAII limitations}
+\subsection{RAII Limitations}
 \label{string-raii-limit}
 
 Earlier work on \CFA~\cite[ch.~2]{Schluntz17} implemented object constructors and destructors for all types (basic and user defined).
-A constructor is a user-defined function run implicitly \emph{after} an object's storage is allocated, and a destructor is a user-defined function run \emph{before} an object's storage is deallcated.
+A constructor is a user-defined function run implicitly \emph{after} an object's storage is allocated, and a destructor is a user-defined function run \emph{before} an object's storage is deallocated.
 This feature, called Resource Acquisition Is Initialization (RAII)~\cite[p.~389]{Stroustrup94}, helps guarantee invariants for users before accessing an object and for the programming environment after an object terminates.
 
@@ -1213,19 +1224,20 @@
 \end{cfa}
 A module providing the @T@ type can traverse @all_T@ at relevant times, to keep the objects ``good.''
-Hence, declaring a @T@ not only ensures that it begins with an initially ``good'' value, but it also provides an implicit subscription to a service that keeps the value ``good'' in the future.
+Hence, declaring a @T@ not only ensures that it begins with an initially ``good'' value, but it also provides an implicit subscription to a service that keeps the value ``good'' during its lifetime.
 Again, both \CFA and \CC support this usage style.
 
 A third capability concerns \emph{implicitly} requested copies.
 When stack-allocated objects are used as parameter and return values, a sender's version exists in one stack frame and a receiver's version exists in another.
-In the parameter direction, the language's function-call handling must arrange for a copy-constructor call to happen\footnote{
-	\CC also offers move constructors and return-value optimization~\cite{RVO20}.
-	These features help reduce unhelpful copy-constructor calls, which, for types like the example \lstinline{S}, would lead to extra memory allocations.
-	\CFA does not currently have these features; adding similarly-intended features to \CFA is desirable.
-	However, this section is about a problem in the realization of features that \CFA already supports.
-	To understand the problem presented, the appropriate comparison is with classic versions of \CC that treated such copy-constructor calls as necessary.}
-at a time near the control transfer into the callee, with the source as the caller's (sender's) version and the target as the callee's (receiver's) version.
-(In the return direction, the roles are reversed and the copy-constructor call happens near the return of control.)
-\CC supports this capability without qualification.
-\CFA offers limited support here; simple examples work, but implicit copying does not combine successfully with the other RAII capabilities discussed.
+In the parameter direction, the language's function-call handling must arrange for a copy-constructor call to happen, at a time near the control transfer into the callee. %, with the source as the caller's (sender's) version and the target as the callee's (receiver's) version.
+In the return direction, the roles are reversed and the copy-constructor call happens near the return of control.
+\CC supports this capability.% without qualification.
+\CFA offers limited support;
+simple examples work, but implicit copying does not combine successfully with the other RAII capabilities discussed.
+
+\CC also offers move constructors and return-value optimization~\cite{RVO20}.
+These features help reduce unhelpful copy-constructor calls, which, for types like the @S@ example, would lead to extra memory allocations.
+\CFA does not currently have these features; adding similarly-intended features to \CFA is desirable.
+However, this section is about a problem in the realization of features that \CFA already supports.
+Hence, the comparison continues with the classic version of \CC that treated such copy-constructor calls as necessary.
 
 To summarize the unsupported combinations, the relevant features are:
@@ -1243,5 +1255,5 @@
 At that time, adhering to a principal of minimal intervention, this code could always be treated as passthrough:
 \begin{cfa}
-struct U {...};
+struct U { ... };
 // RAII to go here
 void f( U u ) { F_BODY(u) }
@@ -1249,29 +1261,35 @@
 f( x );
 \end{cfa}
-But adding custom RAII (at ``...here'') changes things.
-The common C++ lowering~\cite[Sec. 3.1.2.3]{cxx:raii-abi} proceeds differently than the present CFA lowering.
-
-\noindent
-\begin{tabular}{l|l}
-\begin{cfa}
-// C++, likely CFA to be
+But adding custom RAII (at ``...go here'') changes things.
+The common \CC lowering~\cite[Sec. 3.1.2.3]{cxx:raii-abi} proceeds differently than the present \CFA lowering.
+\begin{cquote}
+\setlength{\tabcolsep}{15pt}
+\begin{tabular}{@{}l|l@{}}
+\begin{cfa}
+$\C[0.0in]{// \CC, \CFA future}\CRT$
 struct U {...};
 // RAII elided
 void f( U * __u_orig ) {
 	U u = * __u_orig;  // call copy ctor
-	F_BODY(u)
+	F_BODY( u );
 	// call dtor, u
 }
 U x; // call default ctor
-f( & x ) ;
+
+
+f( &x ) ;
+
+
 // call dtor, x
 \end{cfa}
 &
 \begin{cfa}
-// CFA today
+$\C[0.0in]{// \CFA today}\CRT$
 struct U {...};
 // RAII elided
 void f( U u ) {
-	F_BODY(u)
+
+	F_BODY( u );
+
 }
 U x; // call default ctor
@@ -1284,12 +1302,13 @@
 \end{cfa}
 \end{tabular}
-
-In the CFA-today scheme, the lowered form is still using a by-value C call.
-C does a @memcpy@ on structs passed by value.
-And so, @F_BDY@ sees the bits of @__u_for_f@ occurring at an address that has never been presented to the @U@ lifecycle functions.
-If @U@ is trying to have a style-\#2 invariant, it shows up broken in @F_BDY@: references that are supposed to be to @u@ are actually to the different location @__u_for_f@.
-The \CC scheme does not have this problem because it constructs the for-@f@ copy in the correct location.
-
-Yet, the \CFA-today scheme is sufficient to deliver style-\#1 invariants (in this style-\#3 use case) because this scheme still does the correct number of lifecycle calls, using correct values, at correct times.  So, reference-counting or simple ownership applications get their invariants respected under call/return-by-value.
+\end{cquote}
+The current \CFA scheme is still using a by-value C call.
+C does a @memcpy@ on structures passed by value.
+And so, @F_BODY@ sees the bits of @__u_for_f@ occurring at an address that has never been presented to the @U@ lifecycle functions.
+If @U@ is trying to have a style-\#2 invariant, it shows up broken in @F_BODY@: references supposedly to @u@ are actually to @__u_for_f@.
+The \CC scheme does not have this problem because it constructs the for @f@ copy in the correct location within @f@.
+
+Yet, the current \CFA scheme is sufficient to deliver style-\#1 invariants (in this style-\#3 use case) because this scheme still does the correct number of lifecycle calls, using correct values, at correct times.
+So, reference-counting or simple ownership applications get their invariants respected under call/return-by-value.
 
 % [Mike is not currently seeing how distinguishing initialization from assignment is relevant]
@@ -1325,30 +1344,31 @@
 % The following discusses the consequences of this semantics with respect to lifetime management of \CFA strings.
 
-
-The string API offers style \#3's pass-by-value in, for example, in the return of @"a" + "b"@.
+The string API offers style \#3's pass-by-value in, \eg in the return of @"a" + "b"@.
 Its implementation uses the style-\#2 invariant of the string handles being linked to each other, helping to achieve high performance.
-Since these two RAII styles cannont coexist, a workaround splits the API into two layers: one that provides pass-by-value, built upon the other with inter-linked handles.
+Since these two RAII styles cannot coexist, a workaround splits the API into two layers: one that provides pass-by-value, built upon the other with inter-linked handles.
 The layer with pass-by-value incurs a performance penalty, while the layer without delivers the desired runtime performance.
-The slower, friendlier High Level API (HL, type @string@) wrapps the faster, more primitive Low Level API (LL, type @string_res@, abbreviating ``resource'').
+The slower, friendlier High Level API (HL, type @string@) wraps the faster, more primitive Low Level API (LL, type @string_res@, abbreviating ``resource'').
 Both APIs present the same features, up to return-by-value operations being unavailable in LL and implemented via the workaround in HL.
 The intention is for most future code to target HL.
-When the RAII issue is fixed, the full HL feature set will be acheivable using the LL-style lifetime management.
-So then, there will be no need for two API levels; HL will be removed; LL's type will be renamed to @string@; programs written for current HL will run faster.
+When the RAII issue is fixed, the full HL feature set will be achievable using the LL-style lifetime management.
+Then, HL will be removed;
+LL's type will be renamed @string@ and programs written for current HL will run faster.
 In the meantime, performance-critical sections of applications must use LL.
 Subsequent performance experiments \see{\VRef{s:PerformanceAssessment}} use the LL API when comparing \CFA to other languages.
 This measurement gives a fair estimate of the goal state for \CFA.
 A separate measure of the HL overhead is also included.
-
-\VRef[Section]{string-general-impl} described the goal state for \CFA.  In present state, the type @string_res@ replaces its mention of @string@ as inter-linked handle.
-
-To use LL, a programmer rewrites invocations that used pass-by-value APIs into invocations where the resourcing is more explicit.
-Many invocations are unaffected, notably including assignment and comparison.
-Of the capabilities listed in \VRef[Figure]{f:StrApiCompare}, only the following three cases have revisions.
-
-\noindent
+hence, \VRef[Section]{string-general-impl} us describing the goal state for \CFA.
+In present state, the type @string_res@ replaces its mention of @string@ as inter-linked handle.
+
+To use LL, a programmer rewrites invocations using pass-by-value APIs into invocations where resourcing is more explicit.
+Many invocations are unaffected, notably assignment and comparison.
+Of the capabilities listed in \VRef[Figure]{f:StrApiCompare}, only the following three cases need revisions.
+\begin{cquote}
+\setlength{\tabcolsep}{15pt}
 \begin{tabular}{ll}
 HL & LL \\
 \hline
 \begin{cfa}
+
 string s = "a" + "b";
 \end{cfa}
@@ -1363,4 +1383,5 @@
 string s = "abcde";
 string s2 = s(2, 3); // s2 == "cde"
+
 s(2,3) = "x"; // s == "abx" && s2 == "cde"
 \end{cfa}
@@ -1376,4 +1397,5 @@
 \begin{cfa}
 string s = "abcde";
+
 s[2] = "xxx";  // s == "abxxxde"
 \end{cfa}
@@ -1385,14 +1407,12 @@
 \end{cfa}
 \end{tabular}
-
+\end{cquote}
 The actual HL workaround is having @string@ wrap a pointer to a uniquely owned, heap-allocated @string_res@.  This arrangement has @string@ being style-\#1 RAII, which is compatible with pass-by-value.
 
 
-
-\subsection{Sharing implementation}
+\subsection{Sharing Implementation}
 \label{sharing-impl}
 
-The \CFA string module has two mechanisms to handle the case when string handles share a run of text.
-
+The \CFA string module has two mechanisms to deal with string handles sharing text.
 In the first type of sharing, the user requests that both string handles be views of the same logical, modifiable string.
 This state is typically produced by the substring operation.
@@ -1404,6 +1424,6 @@
 $\texttt{\small axcde xc}$
 \end{cfa}
-In a typical substring call, the source string-handle is referencing an entire string, and the resulting, newly made, string handle is referencing a portion of the original.
-In this state, a subsequent modification made by either is visible in both.
+Here, the source string-handle is referencing an entire string, and the resulting, newly made, string handle is referencing a contained portion of the original.
+In this state, a modification made in the overlapping area is visible in both strings.
 
 The second type of sharing happens when the system implicitly delays the physical execution of a logical \emph{copy} operation, as part of its copy-on-write optimization.
@@ -1418,5 +1438,5 @@
 In this state, a subsequent modification done on one handle triggers the deferred copy action, leaving the handles referencing different text within the buffer, holding distinct values.
 
-A further abstraction, in the string module's implementation, helps distinguish the two senses of sharing.
+A further abstraction helps distinguish the two senses of sharing.
 A share-edit set (SES) is an equivalence class over string handles, being the reflexive, symmetric and transitive closure of the relationship of one string being constructed from another, with the ``share'' option given.
 The SES is represented by a second linked list among the handles.
@@ -1427,5 +1447,5 @@
 
 
-\subsection{Controlling implicit sharing}
+\subsection{Controlling Implicit Sharing}
 \label{s:ControllingImplicitSharing}
 
@@ -1434,14 +1454,4 @@
 In detail, string sharing has inter-linked string handles, so managing one string is also managing the neighbouring strings, and from there, a data structure of the ``set of all strings.''
 Therefore, it is useful to toggle this capability on or off when it is not providing any application benefit.
-
-\begin{figure}
-    \begin{tabular}{ll}
-        \lstinputlisting[language=CFA, firstline=10, lastline=55]{sharectx.run.cfa}
-        &
-        \raisebox{-0.17\totalheight}{\includegraphics{string-sharectx.pdf}} % lower
-    \end{tabular}
-	\caption{Controlling copying vs sharing of strings using \lstinline{string_sharectx}.}
-	\label{fig:string-sharectx}
-\end{figure}
 
 The \CFA string library provides the type @string_sharectx@ to control an ambient sharing context.
@@ -1456,14 +1466,22 @@
 Executing the example does not produce an interesting outcome, but the comments in the picture indicate when the logical copy operation runs with
 \begin{description}
-    \item[share:] the copy being deferred, as described through the rest of this section (fast), or
-    \item[copy:] the copy performed eagerly (slow).
+	\item[share:] the copy being deferred, as described through the rest of this section (fast), or
+	\item[copy:] the copy performed eagerly (slow).
 \end{description}
 Only eager copies can cross @string_sharectx@ boundaries.
 The intended use is with stack-managed lifetimes, in which the established context lasts until the current function returns, and affects all functions called that do not create their own contexts.
 
-[ TODO: true up with ``is thread local'' (implement that and expand this discussion to give a concurrent example, or adjust this wording) ]
-
-
-\subsection{Sharing and threading}
+\begin{figure}
+	\begin{tabular}{ll}
+		\lstinputlisting[language=CFA, firstline=10, lastline=55]{sharectx.run.cfa}
+		&
+		\raisebox{-0.17\totalheight}{\includegraphics{string-sharectx.pdf}} % lower
+	\end{tabular}
+	\caption{Controlling copying vs sharing of strings using \lstinline{string_sharectx}.}
+	\label{fig:string-sharectx}
+\end{figure}
+
+
+\subsection{Sharing and Threading}
 
 The \CFA string library provides no thread safety, the same as \CC string, providing similar performance goals.
@@ -1474,50 +1492,8 @@
 
 
-\subsection{Future work}
-
-Implementing the small-string optimization is straightforward, as a string header contains a pointer to the string text in the buffer.
-This pointer could be marked with a flag and contain a small string.
-However, there is now a conditional check required on the fast-path to switch between small and large string operations.
-
-It might be possible to pack 16- or 32-bit Unicode characters within the same string buffer as 8-bit characters.
-Again, locations for identification flags must be found and checked along the fast path to select the correct actions.
-Handling utf8 (variable length), is more problematic because simple pointer arithmetic cannot be used to stride through the variable-length characters.
-Trying to use a secondary array of fixed-sized pointers/offsets to the characters is possible, but raises the question of storage management for the utf8 characters themselves.
-
-
-\section{Performance assessment}
-\label{s:PerformanceAssessment}
-
-I assessed the \CFA string library's speed and memory usage against strings in \CC STL.
-
-Overall, this analysis shows that adding support for the features shown earlier in the chapter comes at no substantial cost in the performance of featrues common to both APIs.
-
-Moreover, the results support the \CFA string's position as a high-level enabler of simplified text processing.
-STL makes its user think about memory management.
-When the user does, and is successful, STL's performance can be very good.
-But when the user fails to think through the consequences of the STL representation, performance becomes poor.
-The \CFA string lets the user work at the level of just putting the right text into right variables, with corresponding performance degradations reduced or eliminated.
-
-% The final test shows the overall win of the \CFA text-sharing mechanism.
-% It exercises several operations together, showing \CFA enabling clean user code to achieve performance that STL requires less-clean user code to achieve.
-
-
-\subsection{Methodology}
-
-These tests use a \emph{corpus} of strings.
-Their lengths are important; the specific characters occurring in them are immaterial.
-In a result graph, a corpus's mean string length is often the independent variable shown on the X axis.
-
-When a corpus contains strings of different lenghths, the lengths are drawn from a geometric distribution.
-Therefore, strings much longer than the mean occur nontrivially and strings slightly shorter than the mean occur most often.
-A corpus's string sizes are one of:
-\begin{description}
-	\item [Fixed-size] all string lengths are of the stated size.
-	\item [Varying 1 and up] the string lengths are drawn from the geometric distribution with a stated mean and all lengths occur.
-	\item [Varying 16 and up] string lengths are drawn from the geometric distribution with the stated mean, but only lengths 16 and above occur; thus, the stated mean is above 16.  \PAB{Is this one unused?  May have just been for ``normalize.''}
-\end{description}
-The special treatment of length 16 deals with the short-string optimization (SSO) in STL @string@, currently not implemented in \CFA, though a fine future improvement to \CFA.
-In the general case, an STL string handle is a pointer (to separately allocated text) and a length.
-But when the text is shorter than this representation, the optimization repurposes the handle's storage to eliminate using the heap.
+\subsection{Short-String Optimization}
+
+\CC implements a short-string ($\le$16) optimization (SSO).
+As a string header contains a pointer to the string text, this pointer can be tagged and used to contain a short string, removing a dynamic memory allocation/deallocation.
 \begin{c++}
 class string {
@@ -1529,67 +1505,95 @@
 		char sstr[sizeof(lstr)]; $\C{// short string <16 characters, text in situ}$
 	};
-	$\C{// tagging for kind (short or long) elided}$
+	// some tagging for short or long strings
 };
 \end{c++}
-
+However, there is now a conditional check required on the fast-path to switch between short and long string operations.
+
+It might be possible to pack 16- or 32-bit Unicode characters within the same string buffer as 8-bit characters.
+Again, locations for identification flags must be found and checked along the fast path to select the correct actions.
+Handling utf8 (variable length), is more problematic because simple pointer arithmetic cannot be used to stride through the variable-length characters.
+Trying to use a secondary array of fixed-sized pointers/offsets to the characters is possible, but raises the question of storage management for the utf8 characters themselves.
+
+
+\section{Performance Assessment}
+\label{s:PerformanceAssessment}
+
+I assessed the \CFA string library's speed and memory usage against strings in \CC STL.
+Overall, this analysis shows that adding support for the features shown earlier in the chapter comes at no substantial cost in the performance of features common to both APIs.
+
+Moreover, the results support the \CFA string's position as a high-level enabler of simplified text processing.
+STL makes its user think about memory management.
+When the user does, and is successful, STL's performance can be very good.
+But when the user fails to think through the consequences of the STL representation, performance becomes poor.
+The \CFA string lets the user work at the level of just putting the right text into the right variables, with corresponding performance degradations reduced or eliminated.
+
+% The final test shows the overall win of the \CFA text-sharing mechanism.
+% It exercises several operations together, showing \CFA enabling clean user code to achieve performance that STL requires less-clean user code to achieve.
+
+
+\subsection{Methodology}
+
+These tests use a \emph{corpus} of strings.
+Their lengths are important; the specific characters occurring in them are immaterial.
+In a result graph, a corpus's mean string length is often the independent variable shown on the X axis.
+
+When a corpus contains strings of different lengths, the lengths are drawn from a geometric distribution.
+Therefore, strings much longer than the mean occur less often and strings slightly shorter than the mean occur most often.
+A corpus's string sizes are one of:
+\begin{description}
+	\item [Fixed-size] all string lengths are of the stated size.
+	\item [Varying 1 and up] the string lengths are drawn from the geometric distribution with a stated mean and all lengths occur.
+	\item [Varying 16 and up] string lengths are drawn from the geometric distribution with the stated mean, but only lengths 16 and above occur; thus, the stated mean is above 16.
+\end{description}
+The special treatment of length 16 deals with the SSO in STL @string@, currently not implemented in \CFA.
 A fixed-size or from-16 distribution ensures that \CC's extra-optimized cases are isolated within, or removed from, the comparison.
-
 In all experiments that use a corpus, its text is generated and loaded into the system under test before the timed phase begins.
-
 To ensure comparable results, a common memory allocator is used for \CFA and \CC.
-\CFA runs the llheap allocator~\cite{Zulfiqar22}; the test rig plugs this same allocator into \CC.
+\CFA runs the llheap allocator~\cite{Zulfiqar22}, which is also plugged into \CC.
 
 The operations being measured take dozens of nanoseconds, so a succession of many invocations is run and timed as a group.
-The experiments run with fixed duration (targeting approximately 5 seconds), stopping upon passing a goal time, as determined by re-checking @clock()@ every 10,000 invocations, which is never more often than once per 80 ms.
-Timing outcomes reprt mean nanoseconds per invocation, which includes harness overhead and the targeted string API execution.
+The experiments run for a fixed duration (5 seconds), as determined by re-checking @clock()@ every 10,000 invocations, which is never more often than once per 80 ms.
+Timing outcomes report mean nanoseconds per invocation, which includes harness overhead and the targeted string API execution.
 
 \PAB{To discuss: hardware and such}
 
-As discussed in \VRef[Section]{string-raii-limit}, general performance comparisons are made using \CFA's faster, low-level string API, whose string type is named @string_res@.
-
-\VRef{s:ControllingImplicitSharing} presents an operational mode where \CFA string sharing is turned off.  In this mode, the \CFA string operates similarly to \CC's, by using a distinct heap allocation for each string's text.
-Some experiments include measurements in this mode for baselining purposes.
-It is called ``\CC emulation mode'' or ``nosharing'' here.
-
+As discussed in \VRef[Section]{string-raii-limit}, general performance comparisons are made using \CFA's faster, low-level string API, named @string_res@.
+\VRef{s:ControllingImplicitSharing} presents an operational mode where \CFA string sharing is turned off.
+In this mode, the \CFA string operates similarly to \CC's, by using a heap allocation for string text.
+Some experiments include measurements in this mode for baselining purposes, called ``\CC emulation mode'' or ``nosharing''.
 
 
 \subsection{Test: Append}
 
-These tests measure the speed of appending strings from the corpus onto a larger, growing string.  They show \CFA performing comparably to \CC overall, though with reduced penalties for simple API misuses for which \CC programmers may not know to watch out.
-
+These tests measure the speed of appending strings from the corpus onto a larger, growing string.
+They show \CFA performing comparably to \CC overall, though with penalties for simple API misuses.
 The basic harness is:
-\begin{cquote}
-\setlength{\tabcolsep}{20pt}
-\begin{cfa}
-START_TIMER
-for ( ... ) {
-	string_res accum;
-	for ( i; 100 ) {
-		accum += corpus[ f(i) ]; // importing from char * here
-		COUNT_ONE_OP_DONE
+\begin{cfa}
+// set alarm duration
+for ( ... ) { $\C[1.5in]{// loop for duration}$
+	for ( i; N ) { $\C{// perform multiple appends (concatenations)}$
+		accum += corpus[ f( i ) ];
 	}
+	count += N; $\C{// count number of appends}\CRT$
 }
-STOP_TIMER
-\end{cfa}
-\end{cquote}
-The harness's outer loop executes until a sample-worthy amount of execution has happened.
-The inner loop builds up the desired-length string with successive appends, before the outer makes it start over from a blank accumulator.
-Each harness run targets a specific (mean) corpus string length and produces one data point on the result graph.
-
+\end{cfa}
+The harness's outer loop executes for the experiment duration.
+The string is reset to empty before appending (not shown).
+The inner loop builds up a growing-length string with successive appends.
+Each run targets a specific (mean) corpus string length and produces one data point on the result graph.
 Three specific comparisons are made with this harness.
 Each picks its own independent-variable basis of comparison.
-
-All three comparisons use the varying-from-1 corpus construction, \ie they allow the STL to show its advantage from small-string optimization.
+All three comparisons use the varying-from-1 corpus construction, \ie they allow the STL to show its advantage for SSO.
 
 
 \subsubsection{Fresh vs Reuse in \CC, Emulation Baseline}
 
-The first experiment compares \CFA with \CC, with \CFA operating in nosharing mode (and \CC having no other mode).
-This experiment simply baselines how \CFA modestly lags \CC's optimization/tuning level generally, yet reproduces a coarser phenomenon.
-
-This experiment also introduces the first \CC coding pitfall, which the next experiment will show is helped by turning on \CFA sharing.  By this pitfall, a \CC programmer must pay attention to string variable reuse.
-
-\begin{cquote}
-\setlength{\tabcolsep}{20pt}
+The first experiment compares \CFA with \CC, with \CFA operating in nosharing mode and \CC having no other mode, hence both string package are using @malloc@/@free@.
+% This experiment establishes a baseline for other experiments.
+This experiment also introduces the first \CC coding pitfall, which the next experiment shows is helped by turning on \CFA sharing.
+% This pitfall shows, a \CC programmer must pay attention to string variable reuse.
+In the following, both programs are doing the same thing: start with @accum@ empty and build it up by appending @N@ strings (type @string@ in \CC and the faster @string_res@ in \CFA).
+\begin{cquote}
+\setlength{\tabcolsep}{40pt}
 \begin{tabular}{@{}ll@{}}
 % \multicolumn{1}{c}{\textbf{fresh}} & \multicolumn{1}{c}{\textbf{reuse}} \\
@@ -1597,7 +1601,7 @@
 
 for ( ... ) {
-	@string_res accum;@       // fresh
-	for ( ... )
-		accum @+=@ ...
+	@string_res accum;@	$\C[1.5in]{// fresh}$
+	for ( N )
+		accum @+=@ ...  $\C{// append}\CRT$
 }
 \end{cfa}
@@ -1606,19 +1610,16 @@
 string_res accum;
 for ( ... ) {
-	@accum = "";@  $\C[1in]{// reuse\CRT}$
-	for ( ... )
-		accum @+=@ ...
+	@accum = "";@  $\C[1.5in]{// reuse}$
+	for ( N )
+		accum @+=@ ...  $\C{// append}\CRT$
 }
 \end{cfa}
 \end{tabular}
 \end{cquote}
-
-Both programs are doing the same thing: start with @x@ empty and build it up by appending the same chunks.
-A programmer should not have to consider this difference.
-But from under the covers, each string being an individual allocation leaks through.
-While the inner loop is appending text to an @x@ that had not yet grown to have a large capacity, the program is, naturally, paying to extend the variable-length allocation, occasionally.
-This capacity stretching is a sticky property that survives assigning a (short, empty-string) value into an existing initialization.
-So, the ``reuse'' version benefits from not growing the allocation on subsequent runs of the inner loop.
-Yet, the ``fresh'' version is constantly restarting from a small buffer.
+The difference is creating a new or reusing an existing string variable.
+The pitfall is that most programmers do not consider this difference.
+However, creating a new variable implies deallocating the previous string storage and allocating new empty storage.
+As the string grows, further deallocations/allocations are required to release the previous and extend the current string storage.
+So, the fresh version is constantly restarting with zero string storage, while the reuse version benefits from having its prior large storage from the last append sequence.
 
 \begin{figure}
@@ -1626,39 +1627,72 @@
 	\includegraphics{plot-string-peq-cppemu.pdf}
 %	\includegraphics[width=\textwidth]{string-graph-peq-cppemu.png}
-	\caption{Fresh vs Reuse in \CC, Emulation Baseline.  Average time per iteration with one \lstinline{x += y} invocation (lower is better).  Comparing \CFA's STL emulation mode with STL implementations, and comparing the ``fresh'' with ``reused'' reset styles.}
+	\caption{Fresh vs Reuse in \CC, Emulation Baseline.
+	Average time per iteration with one \lstinline{x += y} invocation (lower is better).
+	Comparing \CFA's STL emulation mode with STL implementations, and comparing the fresh with reused reset styles.}
 	\label{fig:string-graph-peq-cppemu}
-\end{figure}
-
-\VRef[Figure]{fig:string-graph-peq-cppemu} shows the resulting performance.
-The fresh \vs reuse penalty is the dominant difference.
-The cost is 40\% averaged over the cases shown and minimally 24\%.
-It shows up consistently on both the \CFA and STL implementations, and this cost is more prominent with larger strings.
-
-The lesser \CFA \vs STL difference shows \CFA reproducing STL's performance, up to a 15\% penalty averaged over the cases shown, diminishing with larger strings, and 50\% in the worst case.
-This penalty characterizes implementation fine tuning done with STL and not done yet done with \CFA.
-
-
-\subsubsection{\CFA's Fresh-Reuse Compromise}
-
-This comparison has the same setup as the last one, except that the \CFA implementation is switched to use its sharing mode.  The outcome is that the fresh/reuse difference vanishes in \CFA, with \CFA consistently delivering performance that compromises between the two \CC cases.
-
-\begin{figure}
-\centering
-	\includegraphics{string-graph-peq-sharing.pdf}
+	\bigskip
+	\bigskip
+	\includegraphics{plot-string-peq-sharing.pdf}
 %	\includegraphics[width=\textwidth]{string-graph-peq-sharing.png}
-	\caption{\CFA Compromise for Fresh \vs Reuse.  Average time per iteration with one \lstinline{x += y} invocation (lower is better).  Comparing \CFA's sharing mode with STL, and comparing the ``fresh'' with ``reused'' reset styles.  The \CC results are repeated from \ref{fig:string-graph-peq-cppemu}.}
+	\caption{\CFA Compromise for Fresh \vs Reuse.
+	Average time per iteration with one \lstinline{x += y} invocation (lower is better).
+	Comparing \CFA's sharing mode with STL, and comparing the fresh with reused reset styles.
+	The \CC results are repeated from \VRef[Figure]{fig:string-graph-peq-cppemu}.}
 	\label{fig:string-graph-peq-sharing}
 \end{figure}
 
-\VRef[Figure]{fig:string-graph-peq-sharing} has the result.
-At append lengths 5 and above, \CFA not only splits the two STL cases, but its slowdown of 16\% over STL with user-managed reuse is close to the baseline \CFA-v-STL implementation difference seen with \CFA in STL-emulation mode.
-
-
-\subsubsection{\CFA's low overhead for misusing \lstinline{+}}
-
-A further pitfall occurs when the user writes @x = x + y@, rather than @x += y@.  Again, they are logically equivalent.
+\VRef[Figure]{fig:string-graph-peq-cppemu} shows the resulting performance.
+The two fresh (solid) lines and the two reuse (dash) lines are identical, except for lengths $\le$10, where the \CC SSO has a 40\% average and minimally 24\% advantage.
+The gap between the fresh and reuse lines is the removal of the dynamic memory allocates and reuse of prior storage, \eg 100M allocations for fresh \vs 100 allocations for reuse across all experiments.
+While allocation reduction is huge, data copying dominates the cost, so the lines are still reasonably close together.
+
+
+\subsubsection{\CFA's Sharing Mode}
+
+This comparison is the same as the last one, except the \CFA implementation is using sharing mode.
+Hence, both \CFA's fresh and reuse versions have no memory allocations, and as before, only for reuse does \CC have no memory allocations.
+\VRef[Figure]{fig:string-graph-peq-sharing} shows the resulting performance.
+For fresh at append lengths 5 and above, \CFA is now closer to the \CC reuse performance, because of removing the dynamic allocations.
+However, for reuse, \CFA has slowed down slightly, to performance matching the new fresh version, as the two versions are now implemented virtually the same.
+The reason for the \CFA reuse slow-down is the overhead of managing the sharing scheme (primarily maintaining the list of handles), without gaining any benefit.
+
+\begin{comment}
+FIND A HOME!!!
+The potential benefits of the sharing scheme do not give \CFA an edge over \CC when appending onto a reused string, though the first one helps \CFA win at going onto a fresh string.  These abilities are:
+\begin{itemize}
+\item
+To grow a text allocation repeatedly without copying it elsewhere.
+This ability is enabled by \CFA's most-recently modified string being located immediately before the text buffer's \emph{shared} bump-pointer area, \ie often a very large greenfield, relative to the \emph{individual} string being grown.
+With \CC-reuse, this benefit is already reaped by the user's reuse of a pre-stretched allocation.
+Yet \CC-fresh pays the higher cost because its room to grow for free is at most a constant times the original string's length.
+\item
+To share an individual text allocation across multiple related strings.
+This ability is not applicable to appending with @+=@.
+It in play in [xref sub-experiment pta] and [xref experiment pbv].
+\item
+To share a text arena across unrelated strings, sourcing disparate allocations from a common place.
+That is, always allocating from a bump pointer, and never maintaining free lists.
+This ability is not relevant to running any append scenario on \CFA with sharing, because appending modifies an existing allocation and is not driving several allocations.
+This ability is assessed in [xref experiment allocn].
+\end{itemize}
+This cost, of slowing down append-with-reuse, is \CFA paying the piper for other scenarios done well.
+\CFA prioritizes the fresh use case because it is more natural.
+The \emph{user-invoked} reuse scheme is an unnatural programming act because it deliberately misuses lexical scope: a variable (@accum@) gets its lifetime extended beyond the scope in which it is used.
+
+A \CFA user needing the best performance on an append scenario can still access the \CC-like speed by invoking noshare.
+This (indirect) resource management is memory-safe, as compared to that required in \CC to use @string&@, where knowledge of another string's lifetime comes into play.
+This abstraction opt-out is also different from invoking the LL API-level option.
+In fact, these considerations are orthogonal.
+But the key difference is that invoking the LL API would be a temporary measure, to use a workaround of a known \CFA language issue; choosing to exempt a string from sharing is a permanent act of program tuning.
+Beyond these comparisons, opting for noshare actually provides program ``eye candy,'' indicating that under-the-hood thinking is becoming relevant here.
+\end{comment}
+
+
+\subsubsection{Misusing Concatenation}
+
+A further pitfall occurs writing the apparently equivalent @x = x + y@ \vs @x += y@.
 For numeric types, the generated code is equivalent, giving identical performance.
 However, for string types there can be a significant difference.
-This pitfall is a particularly likely hazard for beginners.
+This pitfall is a particularly likely for beginners.
 
 In earlier experiments, the choice of \CFA API among HL and LL had no impact on the functionality being tested.
@@ -1708,27 +1742,29 @@
 \end{tabular}
 \end{cquote}
-Note that this ``Goal'' code functions today in HL.
+Note, the goal code functions today in HL but with slower performance.
 
 \begin{figure}
 \centering
-	\includegraphics{string-graph-pta-sharing.pdf}
+	\includegraphics{plot-string-pta-sharing.pdf}
 %	\includegraphics[width=\textwidth]{string-graph-pta-sharing.png}
-	\caption{CFA's low overhead for misusing \lstinline{+}.  Average time per iteration with one \lstinline{x += y} invocation (lower is better). Comparing \CFA (having implicit sharing activated) with STL, and comparing the \lstinline{+}-then-\lstinline{=} with the \lstinline{+=} append styles.  The \lstinline{+=} results are repeated from \VRef[Figure]{fig:string-graph-peq-sharing}.}
+	\caption{CFA's low overhead for misusing concatenation.  Average time per iteration with one \lstinline{x += y} invocation (lower is better). Comparing \CFA (having implicit sharing activated) with STL, and comparing the \lstinline{+}-then-\lstinline{=} with the \lstinline{+=} append styles.  The \lstinline{+=} results are repeated from \VRef[Figure]{fig:string-graph-peq-sharing}.}
 	\label{fig:string-graph-pta-sharing}
 \end{figure}
 
-\VRef[Figure]{fig:string-graph-pta-sharing} gives the outcome.  The STL's penalty is $8 \times$ while \CFA's is only $2 \times$, averaged across the cases shown here.
+\VRef[Figure]{fig:string-graph-pta-sharing} gives the outcome, where the Y-axis is log scale because of the large differences.
+The STL's penalty is $8 \times$ while \CFA's is only $2 \times$, averaged across the cases shown here.
 Moreover, the STL's gap increases with string size, while \CFA's converges.
 So again, \CFA helps users who just want to treat strings as values, and not think about the resource management under the covers.
 
-While not a design goal, and not graphed out, \CFA in STL-emulation mode heppened to outperform STL in this case.  User-managed allocation reuse did not affect either implementation in this case; only ``fresh'' results are shown.
-
-
-\subsection{Test: Pass argument}
+While not a design goal, and not graphed, \CFA in STL-emulation mode outperformed STL in this case.
+User-managed allocation reuse did not affect either implementation in this case; only ``fresh'' results are shown.
+
+
+\subsection{Test: Pass Argument}
 
 STL has a penalty for passing a string by value, which forces users to think about memory management when communicating values with a function.
-The key \CFA value-add is that a user can think of a string simply as a value; this test shows that \CC charges a stiff penalty for thining this way, while \CFA does not.
+The key \CFA value-add is that a user can think of a string simply as a value; this test shows that \CC charges a stiff penalty for thinking this way, while \CFA does not.
 This test illustrates a main advantage of the \CFA sharing algorithm (in one case).
-It shows STL's small-string optimization providing a successful mitigation (in the other case).
+It shows STL's SSO providing a successful mitigation (in the other case).
 
 The basic operation considered is:
@@ -1749,10 +1785,8 @@
 
 }
-START_TIMER
-for ( i; ... ) {
-	helper( corpus[ f(i) ] ); // imported from char * previously
-	COUNT_ONE_OP_DONE
+for ( ... ) { // loop for duration
+	helper( corpus[ f( i ) ] );
+	count += 1;
 }
-STOP_TIMER
 \end{cfa}
 &
@@ -1761,39 +1795,34 @@
 	string_res q = { qref, COPY_VALUE };
 }
-// rest same, elided
-
-
-
-
-
-\end{cfa}
-\end{tabular}
-\end{cquote}
-The Goal (HL) version gives the simplest sketch of the test harness.
-It uses a single level of looping.
-Each iteration uses a corpus item as the argument to a function call.
+
+
+
+
+\end{cfa}
+\end{tabular}
+\end{cquote}
+The goal (HL) version gives the modified test harness, with a single loop.
+Each iteration uses a corpus item as the argument to the function call.
 These corpus items were imported to the string heap before beginning the timed run.
-
 
 \begin{figure}
 \centering
-	\includegraphics{string-graph-pbv.pdf}
+	\includegraphics{plot-string-pbv.pdf}
 %	\includegraphics[width=\textwidth]{string-graph-pbv.png}
+	\begin{tabularx}{\linewidth}{>{\centering\arraybackslash}X >{\centering\arraybackslash}X} (a) & (b) \end{tabularx}
 	\caption{Average time per iteration (lower is better) with one call to a function that takes a by-value string argument, comparing \CFA (having implicit sharing activated) with STL.
-(a) With \emph{Varying-from-1} corpus construction, in which the STL-only benefit of small-string optimization occurs, in varying degrees, at all string sizes.
-(b) With \emph{Fixed-size} corpus construction, in which this benefit applies exactly to strings with length below 16.
-[TODO: show version (b)]}
+(a) With \emph{Varying-from-1} corpus construction, in which the STL-only benefit of SSO optimization occurs, in varying degrees, at all string sizes.
+(b) With \emph{Fixed-size} corpus construction, in which this benefit applies exactly to strings with length below 16.}
 	\label{fig:string-graph-pbv}
 \end{figure}
 
-
 \VRef[Figure]{fig:string-graph-pbv} shows the costs for calling a function that receives a string argument by value.
-STL's performance worsens as string length increases, while \CFA has the same performance at all sizes.
-
+STL's performance worsens uniformly as string length increases, while \CFA has the same performance at all sizes.
+Although the STL is better than \CFA until string length 10 because of the SSO.
 While improved, the \CFA cost to pass a string is still nontrivial.
 The contributor is adding and removing the callee's string handle from the global list.
-This cost is $1.5 \times$ to $2 \times$ over STL's when small-string optimization applies, though this cost should be avoidable in the same case, upon a \CFA realization of this optimization.
-At the larger sizes, when STL has to manage storage for the string, STL runs more than $3 \times$ slower, mainly due to time spent in the general-purpose memory allocator.
-\PAB{Need to check that.  Expecting copying to dominate.}
+This cost is $1.5 \times$ to $2 \times$ over STL's when SSO applies, but is avoidable once \CFA realizes this optimization.
+At the larger sizes, the STL runs more than $3 \times$ slower, because it has to allocation/deallocate storage for the parameter and copy the argument string to the parameter.
+If the \CC string is passed by reference, the results are better and flat across string lengths like \CFA.
 
 
@@ -1805,6 +1834,7 @@
 
 A garbage collector, afforded the freedom of managed memory (where it knows about all the pointers and is allowed to modify them), often runs faster than malloc-free in an amortized analysis, even though it must occasionally stop to collect.
-The sppedup happens because GC is able to use its collection time to move objects.
-(In the case of the mini-allocator powering the \CFA string library, objects are runs of text.)  Moving objects lets fresh allocations consume from a large contiguous store of available memory; the ``bump pointer'' bookkeeping for such a scheme is very light.
+The speedup happens because GC is able to use its collection time to move objects.
+(In the case of the mini-allocator powering the \CFA string library, objects are runs of text.)
+Moving objects lets fresh allocations consume from a large contiguous store of available memory; the ``bump pointer'' bookkeeping for such a scheme is very light.
 A malloc-free implementation without the freedom to move objects must, in the general case, allocate in the spaces between existing objects; doing so entails the heavier bookkeeping of maintaining a linked structure of freed allocations and/or coalescing freed allocations.
 
@@ -1862,5 +1892,5 @@
 \begin{figure}
 \centering
-  \includegraphics{string-graph-allocn.pdf}
+  \includegraphics{plot-string-allocn.pdf}
 % \includegraphics[width=\textwidth]{string-graph-allocn.png}
   \caption{Space and time performance, under varying fraction-live targets, for the five string lengths shown, at \emph{Fixed-size} corpus construction.
Index: doc/theses/mike_brooks_MMath/word.cc
===================================================================
--- doc/theses/mike_brooks_MMath/word.cc	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/word.cc	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,23 @@
+#include <string>
+#include <iostream>
+using namespace std;
+int main() {
+	string line, alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
+	size_t i;
+
+	for ( ; getline( cin, line ); ) {
+		for ( ;; ) {									// scan words off line
+			string::size_type posn = line.find_first_of( alpha );// find position of 1st alphabetic character
+		  if ( posn == string::npos ) break;			// any characters left ?
+			line = line.substr( posn );					// remove leading whitespace
+			posn = line.find_first_not_of( alpha );		// find position of 1st non-alphabetic character
+			if ( posn != string::npos ) {
+				cout << line.substr( 0, posn ) << endl;	// extract word from start of line
+				line = line.substr( posn );				// delete word from line
+			} else {
+				cout << line << endl;					// extract word from start of line
+				line = "";
+			}
+		} // for
+	} // for
+}
Index: doc/theses/mike_brooks_MMath/word.cfa
===================================================================
--- doc/theses/mike_brooks_MMath/word.cfa	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
+++ doc/theses/mike_brooks_MMath/word.cfa	(revision bd72f517201f32b402a96297718f58f3eace1e0b)
@@ -0,0 +1,22 @@
+#include <string.hfa>
+#include <fstream.hfa>
+
+int main() {
+	string line;
+	charclass alpha{ "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" };
+	size_t i;
+
+	try {
+		for ( ;; ) {
+			sin | getline( line );
+			for ( ;; ) {									// scan words off line
+				size_t posn = exclude( line, alpha );		// find position of 1st alphabetic character
+			  if ( posn == len( line ) ) break;				// any characters left ?
+				line = line( posn );						// remove leading whitespace
+				posn = include( line, alpha );				// find position of 1st non-alphabetic character
+				sout | line( 0, posn );						// extract word from start of line
+				line = line( posn );						// delete word from line
+			} // for
+		} // for
+	} catch( end_of_file * ) {}
+}
