Ignore:
Timestamp:
May 12, 2025, 8:33:55 PM (10 months ago)
Author:
Fangren Yu <f37yu@…>
Branches:
master, stuck-waitfor-destruct
Children:
edd11bd
Parents:
98c77b2
Message:

proofreading changes from Gregor

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/theses/fangren_yu_MMath/features.tex

    r98c77b2 r8fe7a85  
    1313Here, manipulating the pointer address is the primary operation, while dereferencing the pointer to its value is the secondary operation.
    1414For 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.
    15 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).
     15Alternatively, 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.
    1616Here, manipulating the value is the primary operation, while changing the pointer address is the secondary operation.
    1717Succinctly, if the address changes often, use a pointer;
     
    6464The call applies an implicit dereference once to @x@ so the call is typed @f( int & )@ with @T = int@, rather than with @T = int &@.
    6565
    66 As for a pointer type, a reference type may have qualifiers, where @const@ is most common.
     66As with a pointer type, a reference type may have qualifiers, where @const@ is most common.
    6767\begin{cfa}
    6868int x = 3; $\C{// mutable}$
     
    188188@[x, y, z]@ = foo( 3, 4 );  // return 3 values into a tuple
    189189\end{cfa}
    190 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, all of which reduces coding time and errors.
     190Along 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.
    191191\begin{cfa}
    192192[x, y, z] = 3; $\C[2in]{// x = 3; y = 3; z = 3, where types may be different}$
     
    205205Only when returning a tuple from a function is there the notion of a tuple value.
    206206
    207 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.
     207Overloading 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.
    208208\begin{cfa}
    209209[ int, int ] foo$\(_1\)$( int );                        $\C{// overloaded foo functions}$
     
    223223bar( foo( 3 ) ) // only one tuple returning call
    224224\end{lstlisting}
    225 Hence, programers cannot take advantage of the full power of tuples but type match is straightforward.
     225Hence, programmers cannot take advantage of the full power of tuples but type match is straightforward.
    226226
    227227K-W C also supported tuple variables, but with a strong distinction between tuples and tuple values/variables.
     
    356356\end{figure}
    357357
    358 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.
     358Interestingly, 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.
    359359The 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.
    360360This 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}.
     
    512512looping is used to traverse the argument pack from left to right.
    513513The @va_list@ interface is walking up the stack (by address) looking at the arguments pushed by the caller.
    514 (Magic knowledge is needed for arguments pushed using registers.)
     514(Compiler-specific ABI knowledge is needed for arguments pushed using registers.)
    515515
    516516\begin{figure}
     
    683683
    684684Nested \emph{named} aggregates are allowed in C but there is no qualification operator, like the \CC type operator `@::@', to access an inner type.
    685 \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.}
     685To 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.
    686686Hoisting nested types can result in name collisions among types at the global level, which defeats the purpose of nesting the type.
    687687\VRef[Figure]{f:NestedNamedAggregate} shows the nested type @T@ is hoisted to the global scope and the declaration rewrites within structure @S@.
     
    729729\end{figure}
    730730
    731 For good reasons, \CC chose to change this semantics:
     731\CC chose to change this semantics:
    732732\begin{cquote}
    733733\begin{description}[leftmargin=*,topsep=0pt,itemsep=0pt,parsep=0pt]
     
    769769Like 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@.
    770770Hence, 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.
    771 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:
     771In 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:
    772772\begin{cfa}
    773773void f( union U * u );
     
    781781Note, there is no value assignment, such as, @w = s@, to copy the @W@ field from @S@.
    782782
    783 Unfortunately, the Plan-9 designers did not lookahead to other useful features, specifically nested types.
     783Unfortunately, the Plan-9 designers did not look ahead to other useful features, specifically nested types.
    784784This nested type compiles in \CC and \CFA.
    785785\begin{cfa}
     
    808808In addition, a semi-non-compatible change is made so that Plan-9 syntax means a forward declaration in a nested type.
    809809Since the Plan-9 extension is not part of C and rarely used, this change has minimal impact.
    810 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.
     810Hence, all Plan-9 semantics are denoted by the @inline@ qualifier, which clearly indicates the usage of Plan-9 definitions.
    811811Finally, the following code shows the value and pointer polymorphism.
    812812\begin{cfa}
     
    847847\end{c++}
    848848and again the expression @d.x@ is ambiguous.
    849 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@.
     849While \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@.
    850850Like \CC, \CFA compiles the Plan-9 version and provides direct qualification and casts to disambiguate @x@.
    851851While ambiguous definitions are allowed, duplicate field names are poor practice and should be avoided if possible.
Note: See TracChangeset for help on using the changeset viewer.