- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/proposals/concurrency/text/cforall.tex
rcae28da r6090518 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 appear, 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 occur, 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 \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: 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 : 111 110 \begin{cfacode} 112 111 //constraint type, 0 and + … … 125 124 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: 126 125 \begin{cfacode} 127 trait sum mable( otype T ) {126 trait sumable( otype T ) { 128 127 void ?{}(T *, zero_t); //constructor from 0 literal 129 128 T ?+?(T, T); //assortment of additions … … 132 131 T ?++(T *); 133 132 }; 134 forall( otype T | sum mable(T) ) //use trait133 forall( otype T | sumable(T) ) //use trait 135 134 T sum(T a[], size_t size); 136 135 \end{cfacode} … … 140 139 % ====================================================================== 141 140 \section{with Clause/Statement} 142 Since \CFA lacks the concept of a receiver, certain functions end 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). 143 142 \begin{cfacode} 144 143 struct S { int i, j; };
Note:
See TracChangeset
for help on using the changeset viewer.