- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/proposals/concurrency/text/cforall.tex
r6090518 rcae28da 52 52 % ====================================================================== 53 53 \section{Operators} 54 Overloading also extends to operators. The syntax for denoting operator-overloading is to name a routine with the symbol of the operator and question marks where the arguments of the operation occur, e.g.:54 Overloading also extends to operators. The syntax for denoting operator-overloading is to name a routine with the symbol of the operator and question marks where the arguments of the operation appear, e.g.: 55 55 \begin{cfacode} 56 56 int ++? (int op); //unary prefix increment … … 72 72 % ====================================================================== 73 73 \section{Constructors/Destructors} 74 Object lifetime is often a challenge in concurrency. \CFA uses the approach of giving concurrent meaning to object lifetime as a means of synchronization and/or mutual exclusion. Since \CFA relies heavily on the lifetime of objects, constructors and destructors is a core feature required for concurrency and parallelism. \CFA uses the following syntax for constructors and destructors 74 Object lifetime is often a challenge in concurrency. \CFA uses the approach of giving concurrent meaning to object lifetime as a means of synchronization and/or mutual exclusion. Since \CFA relies heavily on the lifetime of objects, constructors and destructors is a core feature required for concurrency and parallelism. \CFA uses the following syntax for constructors and destructors: 75 75 \begin{cfacode} 76 76 struct S { … … 107 107 % ====================================================================== 108 108 \section{Parametric Polymorphism} 109 Routines in \CFA can also be reused for multiple types. This capability is done using the \code{forall} clause, which gives \CFA its name. \code{forall} clauses allow separately compiled routines to support generic usage over multiple types. For example, the following sum function works for any type that supports construction from 0 and addition : 109 \label{s:ParametricPolymorphism} 110 Routines in \CFA can also be reused for multiple types. This capability is done using the \code{forall} clauses, which allow separately compiled routines to support generic usage over multiple types. For example, the following sum function works for any type that supports construction from 0 and addition: 110 111 \begin{cfacode} 111 112 //constraint type, 0 and + … … 124 125 Since writing constraints on types can become cumbersome for more constrained functions, \CFA also has the concept of traits. Traits are named collection of constraints that can be used both instead and in addition to regular constraints: 125 126 \begin{cfacode} 126 trait sum able( otype T ) {127 trait summable( otype T ) { 127 128 void ?{}(T *, zero_t); //constructor from 0 literal 128 129 T ?+?(T, T); //assortment of additions … … 131 132 T ?++(T *); 132 133 }; 133 forall( otype T | sum able(T) ) //use trait134 forall( otype T | summable(T) ) //use trait 134 135 T sum(T a[], size_t size); 135 136 \end{cfacode} … … 139 140 % ====================================================================== 140 141 \section{with Clause/Statement} 141 Since \CFA lacks the concept of a receiver, certain functions end -up needing to repeat variable names often. To remove this inconvenience, \CFA provides the \code{with} statement, which opens an aggregate scope making its fields directly accessible (like Pascal).142 Since \CFA lacks the concept of a receiver, certain functions end up needing to repeat variable names often. To remove this inconvenience, \CFA provides the \code{with} statement, which opens an aggregate scope making its fields directly accessible (like Pascal). 142 143 \begin{cfacode} 143 144 struct S { int i, j; };
Note:
See TracChangeset
for help on using the changeset viewer.