Changes in doc/papers/general/Paper.tex [c8ad5d9:d046db2]
- File:
-
- 1 edited
-
doc/papers/general/Paper.tex (modified) (23 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/general/Paper.tex
rc8ad5d9 rd046db2 1 \documentclass[AMA,STIX1COL]{WileyNJD-v2} 2 1 \documentclass[AMA,STIX1COL,STIXSMALL]{WileyNJD-v2} 3 2 \articletype{RESEARCH ARTICLE}% 4 3 … … 18 17 \usepackage{upquote} % switch curled `'" to straight 19 18 \usepackage{listings} % format program code 20 \captionsetup{justification=raggedright,singlelinecheck=false}21 19 %\usepackage{enumitem} 22 20 %\setlist[itemize]{topsep=3pt,itemsep=2pt,parsep=0pt}% global … … 29 27 \renewcommand{\linenumberfont}{\scriptsize\sffamily} 30 28 31 \lefthyphenmin= 3% hyphen only after 4 characters32 \righthyphenmin= 329 \lefthyphenmin=4 % hyphen only after 4 characters 30 \righthyphenmin=4 33 31 34 32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% … … 88 86 \newcommand{\abbrevFont}{\textit} % set empty for no italics 89 87 \@ifundefined{eg}{ 90 \newcommand{\EG}{\abbrevFont{e} \abbrevFont{g}}88 \newcommand{\EG}{\abbrevFont{e}.\abbrevFont{g}.} 91 89 \newcommand*{\eg}{% 92 90 \@ifnextchar{,}{\EG}% … … 95 93 }}{}% 96 94 \@ifundefined{ie}{ 97 \newcommand{\IE}{\abbrevFont{i} \abbrevFont{e}}95 \newcommand{\IE}{\abbrevFont{i}.\abbrevFont{e}.} 98 96 \newcommand*{\ie}{% 99 97 \@ifnextchar{,}{\IE}% … … 131 129 \lstdefinelanguage{CFA}[ANSI]{C}{ 132 130 morekeywords={ 133 _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, __attribute, __attribute__, 134 auto, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, __const, __const__, 135 coroutine, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, finally, 136 __float80, float80, __float128, float128, forall, ftype, _Generic, _Imaginary, __imag, __imag__, 137 inline, __inline, __inline__, __int128, int128, __label__, monitor, mutex, _Noreturn, one_t, or, 138 otype, restrict, __restrict, __restrict__, __signed, __signed__, _Static_assert, thread, 139 _Thread_local, throw, throwResume, timeout, trait, try, ttype, typeof, __typeof, __typeof__, 140 virtual, __volatile, __volatile__, waitfor, when, with, zero_t}, 131 _Alignas, _Alignof, __alignof, __alignof__, asm, __asm, __asm__, _At, __attribute, 132 __attribute__, auto, _Bool, catch, catchResume, choose, _Complex, __complex, __complex__, 133 __const, __const__, disable, dtype, enable, exception, __extension__, fallthrough, fallthru, 134 finally, forall, ftype, _Generic, _Imaginary, inline, __label__, lvalue, _Noreturn, one_t, 135 otype, restrict, _Static_assert, throw, throwResume, trait, try, ttype, typeof, __typeof, 136 __typeof__, virtual, with, zero_t}, 137 morekeywords=[2]{ 138 _Atomic, coroutine, is_coroutine, is_monitor, is_thread, monitor, mutex, nomutex, or, 139 resume, suspend, thread, _Thread_local, waitfor, when, yield}, 141 140 moredirectives={defined,include_next}% 142 141 } … … 159 158 literate={-}{\makebox[1ex][c]{\raisebox{0.4ex}{\rule{0.8ex}{0.1ex}}}}1 {^}{\raisebox{0.6ex}{$\scriptstyle\land\,$}}1 160 159 {~}{\raisebox{0.3ex}{$\scriptstyle\sim\,$}}1 % {`}{\ttfamily\upshape\hspace*{-0.1ex}`}1 161 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {->}{\makebox[1ex][c]{\raisebox{0. 4ex}{\rule{0.8ex}{0.075ex}}}\kern-0.2ex{\textgreater}}2,160 {<-}{$\leftarrow$}2 {=>}{$\Rightarrow$}2 {->}{\makebox[1ex][c]{\raisebox{0.5ex}{\rule{0.8ex}{0.075ex}}}\kern-0.2ex{\textgreater}}2, 162 161 moredelim=**[is][\color{red}]{`}{`}, 163 162 }% lstset … … 181 180 \authormark{MOSS \textsc{et al}} 182 181 183 \address[1]{\orgdiv{ Cheriton School of Computer Science}, \orgname{University of Waterloo}, \orgaddress{\state{Waterloo, ON}, \country{Canada}}}184 185 \corres{*Peter A. Buhr, Cheriton School of Computer Science, University of Waterloo, 200 University Avenue West, Waterloo, ON, N2L 3G1, Canada.\email{pabuhr{\char`\@}uwaterloo.ca}}186 187 \fundingInfo{Natural Sciences and Engineering Research Council of Canada} 182 \address[1]{\orgdiv{David R. Cheriton School of Computer Science}, \orgname{University of Waterloo}, \orgaddress{\state{Ontario}, \country{Canada}}} 183 184 \corres{*Peter A. Buhr, \email{pabuhr{\char`\@}uwaterloo.ca}} 185 \presentaddress{David R. Cheriton School of Computer Science, University of Waterloo, Waterloo, ON, N2L 3G1, Canada} 186 188 187 189 188 \abstract[Summary]{ … … 229 228 Nevertheless, C, first standardized over thirty years ago, lacks many features that make programming in more modern languages safer and more productive. 230 229 231 \CFA (pronounced ``C-for-all'', and written \CFA or Cforall) is an evolutionary extension of the C programming language that aims to add modern language features to C , while maintaining both source and runtime compatibility with C and a familiar programming model for programmers.230 \CFA (pronounced ``C-for-all'', and written \CFA or Cforall) is an evolutionary extension of the C programming language that aims to add modern language features to C while maintaining both source compatibility with C and a familiar programming model for programmers. 232 231 The four key design goals for \CFA~\cite{Bilson03} are: 233 232 (1) The behaviour of standard C code must remain the same when translated by a \CFA compiler as when translated by a C compiler; … … 329 328 A simple example is leveraging the existing type-unsafe (@void *@) C @bsearch@ to binary search a sorted float array: 330 329 \begin{cfa} 331 void * bsearch( const void * key, const void * base, size_t nmemb, size_t size, int (* compar)( const void *, const void * )); 330 void * bsearch( const void * key, const void * base, size_t nmemb, size_t size, 331 int (* compar)( const void *, const void * )); 332 332 int comp( const void * t1, const void * t2 ) { 333 333 return *(double *)t1 < *(double *)t2 ? -1 : *(double *)t2 < *(double *)t1 ? 1 : 0; … … 336 336 double * val = (double *)bsearch( &key, vals, 10, sizeof(vals[0]), comp ); $\C{// search sorted array}$ 337 337 \end{cfa} 338 which can be augmented simply with generalized, type-safe, \CFA-overloaded wrappers:338 which can be augmented simply with a generalized, type-safe, \CFA-overloaded wrappers: 339 339 \begin{cfa} 340 340 forall( otype T | { int ?<?( T, T ); } ) T * bsearch( T key, const T * arr, size_t size ) { … … 398 398 T ?++( T * ); 399 399 }; 400 forall( otype T `| summable( T )` ) T sum( T a[$\,$], size_t size ) { $\C{// use trait}$400 forall( otype T `| summable( T )` ) T sum( T a[$\,$], size_t size ) { // use trait 401 401 `T` total = { `0` }; $\C{// instantiate T from 0 by calling its constructor}$ 402 402 for ( unsigned int i = 0; i < size; i += 1 ) total `+=` a[i]; $\C{// select appropriate +}$ … … 576 576 return (scalar(U)){ a.value + b.value }; 577 577 } 578 scalar(metres) half_marathon = { 21 _093 };579 scalar(litres) swimming_pool = { 2 _500_000 };578 scalar(metres) half_marathon = { 21093 }; 579 scalar(litres) swimming_pool = { 2500000 }; 580 580 scalar(metres) marathon = half_marathon + half_marathon; 581 581 scalar(litres) two_pools = swimming_pool + swimming_pool; … … 724 724 \end{cfa} 725 725 Here, the mass assignment sets all members of @s@ to zero. 726 Since tuple-index expressions are a form of member-access expression, it is possible to use tuple-index expressions in conjunction with member -tuple expressions to manually restructure a tuple (\eg rearrange, drop, and duplicate components).726 Since tuple-index expressions are a form of member-access expression, it is possible to use tuple-index expressions in conjunction with member tuple expressions to manually restructure a tuple (\eg rearrange, drop, and duplicate components). 727 727 \begin{cfa} 728 728 [int, int, long, double] x; … … 1879 1879 \lstDeleteShortInline@% 1880 1880 \begin{tabular}{@{}l@{\hspace{3em}}l|l@{}} 1881 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}} & \multicolumn{1}{c |}{\textbf{C Implicit Hoisting}} & \multicolumn{1}{c}{\textbf{\CFA}} \\1881 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{C Type Nesting}} & \multicolumn{1}{c}{\textbf{C Implicit Hoisting}} & \multicolumn{1}{|c}{\textbf{\CFA}} \\ 1882 1882 \hline 1883 1883 \begin{cfa} … … 2002 2002 { 2003 2003 VLA x, y = { 20, 0x01 }, z = y; $\C{// z points to y}$ 2004 // ?{}( x ); ?{}( y, 20, 0x01 );?{}( z, y );2004 // ?{}( x ); ?{}( y, 20, 0x01 ); ?{}( z, y ); 2005 2005 ^x{}; $\C{// deallocate x}$ 2006 2006 x{}; $\C{// reallocate x}$ … … 2027 2027 These semantics closely mirror the rule for implicit declaration of constructors in \CC\cite[p.~186]{ANSI98:C++}. 2028 2028 2029 In some circumstance programmers may not wish to have implicit constructor and destructor generation and calls. 2030 In these cases, \CFA provides the initialization syntax \lstinline|S x `@=` {}|, and the object becomes unmanaged, so implicit constructor and destructor calls are not generated. 2031 Any C initializer can be the right-hand side of an \lstinline|@=| initializer, \eg \lstinline|VLA a @= { 0, 0x0 }|, with the usual C initialization semantics. 2032 The same syntax can be used in a compound literal, \eg \lstinline|a = VLA`@`{ 0, 0x0 }|, to create a C-style literal. 2029 In some circumstance programmers may not wish to have constructor and destructor calls. 2030 In these cases, \CFA provides the initialization syntax \lstinline|S x @= {}|, and the object becomes unmanaged, so implicit constructor and destructor calls are not generated. 2031 Any C initializer can be the right-hand side of an \lstinline|@=| initializer, \eg \lstinline|VLA a @= { 0, 0x0 }|, with the usual C initialization semantics. 2033 2032 The point of \lstinline|@=| is to provide a migration path from legacy C code to \CFA, by providing a mechanism to incrementally convert to implicit initialization. 2034 2033 … … 2055 2054 \begin{cfa} 2056 2055 20_`hh` // signed char 2057 21_`hh`u // unsigned char2056 21_`hh`u // unsigned char 2058 2057 22_`h` // signed short int 2059 2058 23_u`h` // unsigned short int 2060 24`z` // size_t2059 24`z` // size_t 2061 2060 \end{cfa} 2062 2061 & … … 2089 2088 To provide this precision, \CFA introduces a new type @zero_t@ as the type of literal @0@ (somewhat analagous to @nullptr_t@ and @nullptr@ in \CCeleven); 2090 2089 @zero_t@ can only take the value @0@, but has implicit conversions to the integer and pointer types so that C code involving @0@ continues to work. 2091 With this addition, \CFA rewrites @if (x)@ and similar expressions to @if ( (x) != 0 )@ or the appropriate analogue, and any type @T@ is ``truthy'' by defining an operator overload @int ?!=?( T, zero_t)@.2090 With this addition, \CFA rewrites @if (x)@ and similar expressions to @if ((x) != 0)@ or the appropriate analogue, and any type @T@ is ``truthy'' by defining an operator overload @int ?!=?(T, zero_t)@. 2092 2091 \CC makes types truthy by adding a conversion to @bool@; 2093 2092 prior to the addition of explicit cast operators in \CCeleven, this approach had the pitfall of making truthy types transitively convertable to any numeric type; … … 2164 2163 \lstset{language=CFA,moredelim=**[is][\color{red}]{|}{|},deletedelim=**[is][]{`}{`}} 2165 2164 \lstDeleteShortInline@% 2166 \begin{tabular}{@{}l@{\hspace{ 2\parindentlnth}}l@{}}2167 \multicolumn{1}{c@{\hspace{ 2\parindentlnth}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{\CC}} \\2165 \begin{tabular}{@{}l@{\hspace{\parindentlnth}}l@{}} 2166 \multicolumn{1}{c@{\hspace{\parindentlnth}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{\CC}} \\ 2168 2167 \begin{cfa} 2169 2168 struct W { … … 2261 2260 \begin{cfa} 2262 2261 MIN 2262 2263 2263 MAX 2264 2264 2265 PI 2265 2266 E … … 2267 2268 & 2268 2269 \begin{cfa} 2269 SCHAR_MIN, CHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, FLT_MIN, DBL_MIN, LDBL_MIN 2270 SCHAR_MAX, UCHAR_MAX, SHRT_MAX, INT_MAX, LONG_MAX, LLONG_MAX, FLT_MAX, DBL_MAX, LDBL_MAX 2270 SCHAR_MIN, CHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN, 2271 FLT_MIN, DBL_MIN, LDBL_MIN 2272 SCHAR_MAX, UCHAR_MAX, SHRT_MAX, INT_MAX, LONG_MAX, LLONG_MAX, 2273 FLT_MAX, DBL_MAX, LDBL_MAX 2271 2274 M_PI, M_PIl 2272 2275 M_E, M_El … … 2441 2444 ip = (int *)malloc( sizeof( int ) ); memset( ip, fill, dim * sizeof( int ) ); 2442 2445 ip = (int *)realloc( ip, 2 * dim * sizeof( int ) ); 2443 ip = (int *)realloc( ip, 4 * dim * sizeof( int ) ); memset( ip, fill, 4 * dim * sizeof( int ) );2444 2446 ip = (int *)realloc( ip, 4 * dim * sizeof( int ) ); 2447 memset( ip, fill, 4 * dim * sizeof( int ) ); 2445 2448 ip = memalign( 16, sizeof( int ) ); 2446 2449 ip = memalign( 16, sizeof( int ) ); memset( ip, fill, sizeof( int ) );
Note:
See TracChangeset
for help on using the changeset viewer.