- Timestamp:
- Apr 19, 2017, 11:10:13 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 648afb4
- Parents:
- cab8cac
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/generic_types/generic_types.tex
rcab8cac rf7b0d71 83 83 belowskip=3pt, 84 84 % replace/adjust listing characters that look bad in sanserif 85 literate={-}{\makebox[1.4ex][c]{\raisebox{0.5ex}{\rule{1.2ex}{0. 1ex}}}}1 {^}{\raisebox{0.6ex}{$\scriptscriptstyle\land\,$}}185 literate={-}{\makebox[1.4ex][c]{\raisebox{0.5ex}{\rule{1.2ex}{0.06ex}}}}1 {^}{\raisebox{0.6ex}{$\scriptscriptstyle\land\,$}}1 86 86 {~}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}}1 % {`}{\ttfamily\upshape\hspace*{-0.1ex}`}1 87 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {->}{\makebox[1.4ex][c]{\raisebox{0.5ex}{\rule{1.2ex}{0. 1ex}}}\kern-0.3ex\textgreater}2,87 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {->}{\makebox[1.4ex][c]{\raisebox{0.5ex}{\rule{1.2ex}{0.06ex}}}\kern-0.3ex\textgreater}2, 88 88 moredelim=**[is][\color{red}]{`}{`}, 89 89 }% lstset … … 285 285 if (x) x++ $\C{// if (x != 0) x += 1;}$ 286 286 \end{lstlisting} 287 Every ifand iteration statement in C compares the condition with @0@, and every increment and decrement operator is semantically equivalent to adding or subtracting the value @1@ and storing the result.287 Every @if@ and iteration statement in C compares the condition with @0@, and every increment and decrement operator is semantically equivalent to adding or subtracting the value @1@ and storing the result. 288 288 Due to these rewrite rules, the values @0@ and @1@ have the types @zero_t@ and @one_t@ in \CFA, which allows overloading various operations for new types that seamlessly connect to all special @0@ and @1@ contexts. 289 289 The types @zero_t@ and @one_t@ have special built in implicit conversions to the various integral types, and a conversion to pointer types for @0@, which allows standard C code involving @0@ and @1@ to work as normal. … … 398 398 The \CFA translator template-expands concrete generic-types into new structure types, affording maximal inlining. 399 399 To enable inter-operation among equivalent instantiations of a generic type, the translator saves the set of instantiations currently in scope and reuses the generated structure declarations where appropriate. 400 For example, a function declaration that accepts or returns a concrete generic-type produces a declaration for the instantiated structin the same scope, which all callers may reuse.400 A function declaration that accepts or returns a concrete generic-type produces a declaration for the instantiated structure in the same scope, which all callers may reuse. 401 401 For example, the concrete instantiation for @pair( const char *, int )@ is: 402 402 \begin{lstlisting} … … 523 523 However, the \CFA type-system must support significantly more complex composition: 524 524 \begin{lstlisting} 525 [ int, int ] foo$\(_1\)$( int ); 525 [ int, int ] foo$\(_1\)$( int ); $\C{// overloaded foo functions}$ 526 526 [ double ] foo$\(_2\)$( int ); 527 527 void bar( int, double, double ); … … 772 772 Since @sum@\(_0\) does not accept any arguments, it is not a valid candidate function for the call @sum(10, 20, 30)@. 773 773 In order to call @sum@\(_1\), @10@ is matched with @x@, and the argument resolution moves on to the argument pack @rest@, which consumes the remainder of the argument list and @Params@ is bound to @[20, 30]@. 774 The process continues ,@Params@ is bound to @[]@, requiring an assertion @int sum()@, which matches @sum@\(_0\) and terminates the recursion.774 The process continues unitl @Params@ is bound to @[]@, requiring an assertion @int sum()@, which matches @sum@\(_0\) and terminates the recursion. 775 775 Effectively, this algorithm traces as @sum(10, 20, 30)@ $\rightarrow$ @10 + sum(20, 30)@ $\rightarrow$ @10 + (20 + sum(30))@ $\rightarrow$ @10 + (20 + (30 + sum()))@ $\rightarrow$ @10 + (20 + (30 + 0))@. 776 776 … … 795 795 \end{lstlisting} 796 796 Unlike C variadic functions, it is unnecessary to hard code the number and expected types. 797 Furthermore, this code is extendable soany user-defined type with a @?+?@ operator.797 Furthermore, this code is extendable for any user-defined type with a @?+?@ operator. 798 798 Summing arbitrary heterogeneous lists is possible with similar code by adding the appropriate type variables and addition operators. 799 799 … … 998 998 On the other hand, C does not have a generic collections-library in its standard distribution, resulting in frequent reimplementation of such collection types by C programmers. 999 999 \CCV does not use the \CC standard template library by construction, and in fact includes the definition of @object@ and wrapper classes for @bool@, @char@, @int@, and @const char *@ in its line count, which inflates this count somewhat, as an actual object-oriented language would include these in the standard library; 1000 with their omission the \CCV line count is similar to C.1000 with their omission, the \CCV line count is similar to C. 1001 1001 We justify the given line count by noting that many object-oriented languages do not allow implementing new interfaces on library types without subclassing or wrapper types, which may be similarly verbose. 1002 1002
Note: See TracChangeset
for help on using the changeset viewer.