Changes in / [08061589:182fe1e]
- Location:
- doc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/LaTeXmacros/common.tex
r08061589 r182fe1e 10 10 %% Author : Peter A. Buhr 11 11 %% Created On : Sat Apr 9 10:06:17 2016 12 <<<<<<< HEAD 13 %% Last Modified By : Peter A. Buhr 14 %% Last Modified On : Mon Aug 1 08:57:17 2016 15 %% Update Count : 223 16 ======= 12 17 %% Last Modified By : 13 18 %% Last Modified On : Sun Jul 31 07:22:50 2016 14 19 %% Update Count : 207 20 >>>>>>> 080615890f586cb9954c252b55cab47f52c25758 15 21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 22 … … 19 25 \setlength{\textheight}{9in} 20 26 %\oddsidemargin 0.0in 21 \renewcommand{\topfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page22 \renewcommand{\bottomfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page27 \renewcommand{\topfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 28 \renewcommand{\bottomfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 23 29 \renewcommand{\floatpagefraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 24 \renewcommand{\textfraction}{0.0} % the entire page maybe devoted to floats with no text on the page at all25 26 \lefthyphenmin=4 30 \renewcommand{\textfraction}{0.0} % the entire page maybe devoted to floats with no text on the page at all 31 32 \lefthyphenmin=4 % hyphen only after 4 characters 27 33 \righthyphenmin=4 28 34 … … 38 44 % Names used in the document. 39 45 40 \newcommand{\CFA}{C$\mathbf\forall$\xspace} 41 \newcommand{\CFL}{Cforall\xspace} 46 \newcommand{\CFA}{C$\mathbf\forall$\xspace} % set language symbolic name 47 \newcommand{\CFL}{Cforall\xspace} % set language text name 42 48 \newcommand{\CC}{\rm C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name 43 49 \newcommand{\CCeleven}{\rm C\kern-.1em\hbox{+\kern-.25em+}11\xspace} % C++11 symbolic name 44 \def\c11{ISO/IEC C} 50 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name) 45 51 46 52 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% … … 52 58 \setlength{\parindentlnth}{\parindent} 53 59 54 \newlength{\gcolumnposn} 60 \newlength{\gcolumnposn} % temporary hack because lstlisting does handle tabs correctly 55 61 \newlength{\columnposn} 56 62 \setlength{\gcolumnposn}{2.5in} … … 63 69 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}} 64 70 65 \usepackage{pslatex} 66 \usepackage{relsize} 71 \usepackage{pslatex} % reduce size of san serif font 72 \usepackage{relsize} % must be after change to small or selects old size 67 73 68 74 % reduce size of chapter/section titles … … 120 126 121 127 % inline text and lowercase index: \Index{inline and lowercase index text} 128 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 122 129 % inline text and as-in index: \Index[as-is index text]{inline text} 130 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 123 131 % inline text but index with different as-is text: \Index[index text]{inline text} 124 \newcommand{\Index}{\@ifstar\@sIndex\@Index}125 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi}126 132 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 127 133 128 % cannot use ©134 % inline text and code index (cannot use ©) 129 135 \newcommand{\Indexc}[1]{\lstinline$#1$\index{#1@\lstinline$#1$}} 136 % code index (cannot use ©) 130 137 \newcommand{\indexc}[1]{\index{#1@\lstinline$#1$}} 131 138 … … 137 144 \newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 138 145 \newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 146 147 % Latin abbreviation 148 \newcommand{\abbrevFont}{\textit} % set empty for no italics 149 \newcommand*{\eg}{% 150 \@ifnextchar{,}{\abbrevFont{e}.\abbrevFont{g}.}% 151 {\@ifnextchar{:}{\abbrevFont{e}.\abbrevFont{g}.}% 152 {\abbrevFont{e}.\abbrevFont{g}.,\xspace}}% 153 }% 154 \newcommand*{\ie}{% 155 \@ifnextchar{,}{\abbrevFont{i}.\abbrevFont{e}.}% 156 {\@ifnextchar{:}{\abbrevFont{i}.\abbrevFont{e}.}% 157 {\abbrevFont{i}.\abbrevFont{e}.,\xspace}}% 158 }% 159 \newcommand*{\etc}{% 160 \@ifnextchar{.}{\abbrevFont{etc}}% 161 {\abbrevFont{etc}.\xspace}% 162 }% 139 163 \makeatother 140 164 … … 145 169 \endlist 146 170 }% quote2 171 147 172 \newenvironment{rationale}{% 148 173 \begin{quote2}\noindent$\Box$\enspace … … 188 213 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 189 214 190 % Go programming language 215 % Go programming language: https://github.com/julienc91/listings-golang/blob/master/listings-golang.sty 191 216 \lstdefinelanguage{Golang}{ 192 217 morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},% … … 204 229 } 205 230 206 % CFA programming language, based on ANSI C 231 % CFA programming language, based on ANSI C (with some gcc additions) 207 232 \lstdefinelanguage{CFA}[ANSI]{C}{ 208 233 morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto, … … 215 240 language=CFA, 216 241 columns=fullflexible, 217 basicstyle=\linespread{0.9}\sf, 218 stringstyle=\tt, 219 tabsize=4, 220 xleftmargin=\parindentlnth, 221 extendedchars=true, 222 escapechar=§, 223 mathescape=true, 224 keepspaces=true, 225 showstringspaces=false, 226 showlines=true, 227 aboveskip=4pt, 242 basicstyle=\linespread{0.9}\sf, % reduce line spacing and use sanserif font 243 stringstyle=\tt, % use typewriter font 244 tabsize=4, % 4 space tabbing 245 xleftmargin=\parindentlnth, % indent code to paragraph indentation 246 extendedchars=true, % allow ASCII characters in the range 128-255 247 escapechar=§, % escape to latex in CFA code 248 mathescape=true, % allow $...$ LaTeX math escapes in code 249 %keepspaces=true, % 250 showstringspaces=false, % do not show spaces with cup 251 showlines=true, % show blank lines at end of code 252 aboveskip=4pt, % spacing above/below code block 228 253 belowskip=3pt, 229 moredelim=**[is][\color{red}]{®}{®}, 230 moredelim=**[is][\color{blue}]{ß}{ß}, 254 moredelim=**[is][\color{red}]{®}{®}, % red highlighting 255 moredelim=**[is][\color{blue}]{ß}{ß}, % blue highlighting 231 256 moredelim=**[is][\color{OliveGreen}]{¢}{¢}, % green highlighting 232 257 moredelim=[is][\lstset{keywords={}}]{¶}{¶}, % temporarily turn off keywords … … 242 267 \renewcommand\thebibliography[1]{ 243 268 \Oldthebibliography{#1} 244 \setlength{\parskip}{0pt} % reduce vertical spacing between references269 \setlength{\parskip}{0pt} % reduce vertical spacing between references 245 270 \setlength{\itemsep}{5pt plus 0.3ex} 246 271 }% 247 248 \newcommand*{\eg}{\textit{e.g}.\@\xspace}249 \newcommand*{\ie}{\textit{i.e}.\@\xspace}250 251 \makeatletter252 \newcommand*{\etc}{%253 \@ifnextchar{.}%254 {\textit{etc}}%255 {\textit{etc}.\@\xspace}%256 }257 \makeatother258 272 259 273 % Local Variables: % -
doc/user/user.tex
r08061589 r182fe1e 10 10 %% Author : Peter A. Buhr 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 <<<<<<< HEAD 13 %% Last Modified By : Peter A. Buhr 14 %% Last Modified On : Mon Aug 1 08:43:49 2016 15 %% Update Count : 1270 16 ======= 12 17 %% Last Modified By : 13 18 %% Last Modified On : Sun Jul 31 07:27:55 2016 14 19 %% Update Count : 1254 20 >>>>>>> 080615890f586cb9954c252b55cab47f52c25758 15 21 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 22 … … 211 217 however, it largely extended the language, and did not address many existing problems.\footnote{% 212 218 Two important existing problems addressed were changing the type of character literals from ©int© to ©char© and enumerator from ©int© to the type of its enumerators.} 213 \Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language features ( e.g.,objects, concurrency) are added and problems fixed within the framework of the existing language.219 \Index*{Fortran}~\cite{Fortran08}, \Index*{Ada}~\cite{Ada12}, and \Index*{Cobol}~\cite{Cobol14} are examples of programming languages that took an evolutionary approach, where modern language features (\eg objects, concurrency) are added and problems fixed within the framework of the existing language. 214 220 \Index*{Java}~\cite{Java8}, \Index*{Go}~\cite{Go}, \Index*{Rust}~\cite{Rust} and \Index*{D}~\cite{D} are examples of the revolutionary approach for modernizing C/\CC, resulting in a new language rather than an extension of the descendent. 215 221 These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection. … … 265 271 \section[Compiling CFA Program]{Compiling \CFA Program} 266 272 267 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, e.g.:273 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, \eg: 268 274 \begin{lstlisting} 269 275 cfa§\indexc{cfa}\index{compilation!cfa@©cfa©}§ [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ] … … 350 356 \section{Underscores in Constants} 351 357 352 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.:358 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, \eg: 353 359 \begin{lstlisting} 354 360 2®_®147®_®483®_®648; §\C{// decimal constant}§ … … 366 372 \begin{enumerate} 367 373 \item 368 A sequence of underscores is disallowed, e.g.,©12__34© is invalid.374 A sequence of underscores is disallowed, \eg ©12__34© is invalid. 369 375 \item 370 376 Underscores may only appear within a sequence of digits (regardless of the digit radix). 371 In other words, an underscore cannot start or end a sequence of digits, e.g.,©_1©, ©1_© and ©_1_© are invalid (actually, the 1st and 3rd examples are identifier names).377 In other words, an underscore cannot start or end a sequence of digits, \eg ©_1©, ©1_© and ©_1_© are invalid (actually, the 1st and 3rd examples are identifier names). 372 378 \item 373 379 A numeric prefix may end with an underscore; … … 498 504 \end{quote2} 499 505 500 All type qualifiers, e.g., ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, e.g.:506 All type qualifiers, \eg ©const©, ©volatile©, etc., are used in the normal way with the new declarations and also appear left to right, \eg: 501 507 \begin{quote2} 502 508 \begin{tabular}{@{}l@{\hspace{1em}}l@{\hspace{1em}}l@{}} … … 518 524 \end{tabular} 519 525 \end{quote2} 520 All declaration qualifiers, e.g.,©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier}521 The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} e.g.:526 All declaration qualifiers, \eg ©extern©, ©static©, etc., are used in the normal way with the new declarations but can only appear at the start of a \CFA routine declaration,\footnote{\label{StorageClassSpecifier} 527 The placement of a storage-class specifier other than at the beginning of the declaration specifiers in a declaration is an obsolescent feature.~\cite[\S~6.11.5(1)]{C11}} \eg: 522 528 \begin{quote2} 523 529 \begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}} … … 542 548 Unsupported are K\&R C declarations where the base type defaults to ©int©, if no type is specified,\footnote{ 543 549 At least one type specifier shall be given in the declaration specifiers in each declaration, and in the specifier-qualifier list in each structure declaration and type name~\cite[\S~6.7.2(2)]{C11}} 544 e.g.:550 \eg: 545 551 \begin{lstlisting} 546 552 x; §\C{// int x}§ … … 612 618 A \Index{pointer}/\Index{reference} is a generalization of a variable name, i.e., a mutable address that can point to more than one memory location during its lifetime. 613 619 (Similarly, an integer variable can contain multiple integer literals during its lifetime versus an integer constant representing a single literal during its lifetime and may not occupy storage as the literal is embedded directly into instructions.) 614 Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, e.g.:620 Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, \eg: 615 621 \begin{quote2} 616 622 \begin{tabular}{@{}ll@{}} … … 669 675 Except for auto-dereferencing by the compiler, this reference example is the same as the previous pointer example. 670 676 Hence, a reference behaves like the variable name for the current variable it is pointing-to. 671 The simplest way to understand a reference is to imagine the compiler inserting a dereference operator before the reference variable for each reference qualifier in a declaration, e.g.:677 The simplest way to understand a reference is to imagine the compiler inserting a dereference operator before the reference variable for each reference qualifier in a declaration, \eg: 672 678 \begin{lstlisting} 673 679 r2 = ((r1 + r2) * (r3 - r1)) / (r3 - 15); … … 677 683 ®*®r2 = ((®*®r1 + ®*®r2) ®*® (®**®r3 - ®*®r1)) / (®**®r3 - 15); 678 684 \end{lstlisting} 679 When a reference operation appears beside a dereference operation, e.g.,©&*©, they cancel out.\footnote{685 When a reference operation appears beside a dereference operation, \eg ©&*©, they cancel out.\footnote{ 680 686 The unary ©&© operator yields the address of its operand. 681 687 If the operand has type ``type'', the result has type ``pointer to type''. … … 721 727 ®&®crc = &cx; §\C{// error, cannot change crc}§ 722 728 \end{lstlisting} 723 Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be ©0© unless an arbitrary pointer is assigned to the reference}, e.g.:729 Hence, for type ©& const©, there is no pointer assignment, so ©&rc = &x© is disallowed, and \emph{the address value cannot be ©0© unless an arbitrary pointer is assigned to the reference}, \eg: 724 730 \begin{lstlisting} 725 731 int & const r = *0; §\C{// where 0 is the int * zero}§ 726 732 \end{lstlisting} 727 733 Otherwise, the compiler is managing the addresses for type ©& const© not the programmer, and by a programming discipline of only using references with references, address errors can be prevented. 734 Finally, the position of the ©const© qualifier \emph{after} the pointer/reference qualifier causes confuse for C programmers. 735 The ©const© qualifier cannot be moved before the pointer/reference qualifier for C style-declarations; 736 \CFA-style declarations attempt to address this issue: 737 \begin{quote2} 738 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} 739 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{C}} \\ 740 \begin{lstlisting} 741 ®const® * ®const® * const int ccp; 742 ®const® & ®const® & const int ccr; 743 \end{lstlisting} 744 & 745 \begin{lstlisting} 746 const int * ®const® * ®const® ccp; 747 748 \end{lstlisting} 749 \end{tabular} 750 \end{quote2} 751 where the \CFA declaration is read left-to-right (see \VRef{s:Declarations}). 728 752 729 753 \Index{Initialization} is different than \Index{assignment} because initialization occurs on the empty (uninitialized) storage on an object, while assignment occurs on possibly initialized storage of an object. … … 785 809 \section{Type Operators} 786 810 787 The new declaration syntax can be used in other contexts where types are required, e.g.,casts and the pseudo-routine ©sizeof©:811 The new declaration syntax can be used in other contexts where types are required, \eg casts and the pseudo-routine ©sizeof©: 788 812 \begin{quote2} 789 813 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} … … 805 829 806 830 \CFA also supports a new syntax for routine definition, as well as ISO C and K\&R routine syntax. 807 The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, e.g.:831 The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, \eg: 808 832 \begin{lstlisting} 809 833 ®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) { … … 817 841 \Index*{Michael Tiemann}, with help from \Index*{Doug Lea}, provided named return values in g++, circa 1989.} 818 842 The value of each local return variable is automatically returned at routine termination. 819 Declaration qualifiers can only appear at the start of a routine definition, e.g.:843 Declaration qualifiers can only appear at the start of a routine definition, \eg: 820 844 \begin{lstlisting} 821 845 ®extern® [ int x ] g( int y ) {§\,§} … … 849 873 The inability to use \CFA declarations in these two contexts is probably a blessing because it precludes programmers from arbitrarily switching between declarations forms within a declaration contexts. 850 874 851 C-style declarations can be used to declare parameters for \CFA style routine definitions, e.g.:875 C-style declarations can be used to declare parameters for \CFA style routine definitions, \eg: 852 876 \begin{lstlisting} 853 877 [ int ] f( * int, int * ); §\C{// returns an integer, accepts 2 pointers to integers}§ … … 898 922 899 923 The syntax of the new routine prototype declaration follows directly from the new routine definition syntax; 900 as well, parameter names are optional, e.g.:924 as well, parameter names are optional, \eg: 901 925 \begin{lstlisting} 902 926 [ int x ] f (); §\C{// returning int with no parameters}§ … … 906 930 \end{lstlisting} 907 931 This syntax allows a prototype declaration to be created by cutting and pasting source text from the routine definition header (or vice versa). 908 It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), e.g.:932 It is possible to declare multiple routine-prototypes in a single declaration, but the entire type specification is distributed across \emph{all} routine names in the declaration list (see~\VRef{s:Declarations}), \eg: 909 933 \begin{quote2} 910 934 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} … … 919 943 \end{tabular} 920 944 \end{quote2} 921 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} e.g.:945 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} \eg: 922 946 \begin{lstlisting} 923 947 extern [ int ] f (int); … … 928 952 \section{Routine Pointers} 929 953 930 The syntax for pointers to \CFA routines specifies the pointer name on the right, e.g.:954 The syntax for pointers to \CFA routines specifies the pointer name on the right, \eg: 931 955 \begin{lstlisting} 932 956 * [ int x ] () fp; §\C{// pointer to routine returning int with no parameters}§ … … 1046 1070 p( /* positional */, /* named */, . . . ); 1047 1071 \end{lstlisting} 1048 While it is possible to implement both approaches, the first possibly is more complex than the second, e.g.:1072 While it is possible to implement both approaches, the first possibly is more complex than the second, \eg: 1049 1073 \begin{lstlisting} 1050 1074 p( int x, int y, int z, . . . ); … … 1056 1080 In the second call, the named arguments separate the positional and ellipse arguments, making it trivial to read the call. 1057 1081 1058 The problem is exacerbated with default arguments, e.g.:1082 The problem is exacerbated with default arguments, \eg: 1059 1083 \begin{lstlisting} 1060 1084 void p( int x, int y = 2, int z = 3. . . ); … … 1264 1288 1265 1289 As mentioned, tuples can appear in contexts requiring a list of value, such as an argument list of a routine call. 1266 In unambiguous situations, the tuple brackets may be omitted, e.g.,a tuple that appears as an argument may have its1290 In unambiguous situations, the tuple brackets may be omitted, \eg a tuple that appears as an argument may have its 1267 1291 square brackets omitted for convenience; therefore, the following routine invocations are equivalent: 1268 1292 \begin{lstlisting} … … 1303 1327 1304 1328 Type qualifiers, i.e., const and volatile, may modify a tuple type. 1305 The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], i.e., the qualifier is distributed across all of the types in the tuple, e.g.:1329 The meaning is the same as for a type qualifier modifying an aggregate type [Int99, x 6.5.2.3(7),x 6.7.3(11)], i.e., the qualifier is distributed across all of the types in the tuple, \eg: 1306 1330 \begin{lstlisting} 1307 1331 const volatile [ int, float, const int ] x; … … 1311 1335 [ const volatile int, const volatile float, const volatile int ] x; 1312 1336 \end{lstlisting} 1313 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, e.g.:1337 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, \eg: 1314 1338 \begin{lstlisting} 1315 1339 extern [ int, int ] w1; … … 1319 1343 Unfortunately, C's syntax for subscripts precluded treating them as tuples. 1320 1344 The C subscript list has the form ©[i][j]...© and not ©[i, j, ...]©. 1321 Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, e.g.,©f[g()]© always means a single subscript value because there is only one set of brackets.1345 Therefore, there is no syntactic way for a routine returning multiple values to specify the different subscript values, \eg ©f[g()]© always means a single subscript value because there is only one set of brackets. 1322 1346 Fixing this requires a major change to C because the syntactic form ©M[i, j, k]© already has a particular meaning: ©i, j, k© is a comma expression. 1323 1347 \end{rationale} … … 1380 1404 Clearly, the types of the entities being assigned must be type compatible with the value of the expression. 1381 1405 1382 Mass assignment has parallel semantics, e.g.,the statement:1406 Mass assignment has parallel semantics, \eg the statement: 1383 1407 \begin{lstlisting} 1384 1408 [ x, y, z ] = 1.5; … … 1469 1493 \section{Unnamed Structure Fields} 1470 1494 1471 C requires each field of a structure to have a name, except for a bit field associated with a basic type, e.g.:1495 C requires each field of a structure to have a name, except for a bit field associated with a basic type, \eg: 1472 1496 \begin{lstlisting} 1473 1497 struct { 1474 int f1; // named field1475 int f2 : 4; // named field with bit field size1476 int : 3; // unnamed field for basic type with bit field size1477 int ; // disallowed, unnamed field1478 int *; // disallowed, unnamed field1479 int (*)(int); // disallowed, unnamed field1498 int f1; §\C{// named field}§ 1499 int f2 : 4; §\C{// named field with bit field size}§ 1500 int : 3; §\C{// unnamed field for basic type with bit field size}§ 1501 int ; §\C{// disallowed, unnamed field}§ 1502 int *; §\C{// disallowed, unnamed field}§ 1503 int (*)(int); §\C{// disallowed, unnamed field}§ 1480 1504 }; 1481 1505 \end{lstlisting} 1482 1506 This requirement is relaxed by making the field name optional for all field declarations; therefore, all the field declarations in the example are allowed. 1483 1507 As for unnamed bit fields, an unnamed field is used for padding a structure to a particular size. 1484 A list of unnamed fields is also supported, e.g.:1508 A list of unnamed fields is also supported, \eg: 1485 1509 \begin{lstlisting} 1486 1510 struct { 1487 int , , ; // 3 unnamed fields1511 int , , ; §\C{// 3 unnamed fields}§ 1488 1512 } 1489 1513 \end{lstlisting} … … 1498 1522 §\emph{expr}§ -> [ §\emph{fieldlist}§ ] 1499 1523 \end{lstlisting} 1500 \emph{expr} is any expression yielding a value of type record, e.g.,©struct©, ©union©.1524 \emph{expr} is any expression yielding a value of type record, \eg ©struct©, ©union©. 1501 1525 Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}. 1502 1526 A record-field tuple may be used anywhere a tuple can be used. An example of the use of a record-field tuple is … … 1760 1784 } 1761 1785 \end{lstlisting} 1762 While the declaration of the local variable ©y© is useful and its scope is across all ©case© clauses, the initialization for such a variable is defined to never be executed because control always transfers over it. 1763 Furthermore, any statements before the first ©case© clause can only be executed if labelled and transferred to using a ©goto©, either from outside or inside of the ©switch©. 1764 As mentioned, transfer into control structures should be forbidden; 1765 transfers from within the ©switch© body using a ©goto© are equally unpalatable. 1766 As well, the declaration of ©z© is cannot occur after the ©case© because a label can only be attached to a statement, and without a fall through to case 3, ©z© is uninitialized. 1786 While the declaration of the local variable ©y© is useful with a scope across all ©case© clauses, the initialization for such a variable is defined to never be executed because control always transfers over it. 1787 Furthermore, any statements before the first ©case© clause can only be executed if labelled and transferred to using a ©goto©, either from outside or inside of the ©switch©, both of which are problematic. 1788 As well, the declaration of ©z© cannot occur after the ©case© because a label can only be attached to a statement, and without a fall through to case 3, ©z© is uninitialized. 1789 The key observation is that the ©switch© statement branches into control structure, i.e., there are multiple entry points into its statement body. 1767 1790 \end{enumerate} 1768 1791 … … 1782 1805 \item 1783 1806 Eliminating default fall-through has the greatest potential for affecting existing code. 1784 However, even if fall-through is removed, most ©switch© statements would continue to work because of the explicit transfers already present at the end of each ©case© clause, the common placement of the ©default© clause at the end of the case list, and the most common use of fall-through, i.e., a list of ©case© clauses executing common code, e.g.:1785 \begin{lstlisting}1807 However, even if fall-through is removed, most ©switch© statements would continue to work because of the explicit transfers already present at the end of each ©case© clause, the common placement of the ©default© clause at the end of the case list, and the most common use of fall-through, i.e., a list of ©case© clauses executing common code, \eg: 1808 \begin{lstlisting} 1786 1809 case 1: case 2: case 3: ... 1787 1810 \end{lstlisting} 1788 1811 still work. 1789 1812 Nevertheless, reversing the default action would have a non-trivial effect on case actions that compound, such as the above example of processing shell arguments. 1813 <<<<<<< HEAD 1814 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthru©, \eg: 1815 ======= 1790 1816 Therefore, to preserve backwards compatibility, it is necessary to introduce a new kind of ©switch© statement, called ©choose©, with no implicit fall-through semantics and an explicit fall-through if the last statement of a case-clause ends with the new keyword ©fallthrough©/©fallthru©, e.g.: 1817 >>>>>>> 080615890f586cb9954c252b55cab47f52c25758 1791 1818 \begin{lstlisting} 1792 1819 ®choose® ( i ) { … … 1815 1842 Therefore, no change is made for this issue. 1816 1843 \item 1817 Dealing with unreachable code in a ©switch©/©choose© body is solved by restricting declarations and associated initialization to the start of statement body, which is executed \emph{before} the transfer to the appropriate ©case© clause .\footnote{1818 Essentially, these declarations are hoisted before the statement and both declarations and statement are surrounded by a compound statement.} and precluding statements before the first ©case© clause.1819 Further declaration in the statement body are disallowed.1844 Dealing with unreachable code in a ©switch©/©choose© body is solved by restricting declarations and associated initialization to the start of statement body, which is executed \emph{before} the transfer to the appropriate ©case© clause\footnote{ 1845 Essentially, these declarations are hoisted before the ©switch©/©choose© statement and both declarations and statement are surrounded by a compound statement.} and precluding statements before the first ©case© clause. 1846 Further declarations at the same nesting level as the statement body are disallowed to ensure every transfer into the body is sound. 1820 1847 \begin{lstlisting} 1821 1848 switch ( x ) { 1822 ®int i = 0;® §\C{// allowed }§1849 ®int i = 0;® §\C{// allowed only at start}§ 1823 1850 case 0: 1824 1851 ... 1825 ®int i= 0;® §\C{// disallowed}§1852 ®int j = 0;® §\C{// disallowed}§ 1826 1853 case 1: 1827 1854 { 1828 ®int i = 0;® §\C{// allowed in any compound statement}§1855 ®int k = 0;® §\C{// allowed at different nesting levels}§ 1829 1856 ... 1830 1857 } … … 2707 2734 Like the \Index*[C++]{\CC} lexical problem with closing template-syntax, e.g, ©Foo<Bar<int®>>®©, this issue can be solved with a more powerful lexer/parser. 2708 2735 2709 There are several ambiguous cases with operator identifiers, e.g.,©int *?*?()©, where the string ©*?*?© can be lexed as ©*©/©?*?© or ©*?©/©*?©.2710 Since it is common practise to put a unary operator juxtaposed to an identifier, e.g.,©*i©, users will be annoyed if they cannot do this with respect to operator identifiers.2736 There are several ambiguous cases with operator identifiers, \eg ©int *?*?()©, where the string ©*?*?© can be lexed as ©*©/©?*?© or ©*?©/©*?©. 2737 Since it is common practise to put a unary operator juxtaposed to an identifier, \eg ©*i©, users will be annoyed if they cannot do this with respect to operator identifiers. 2711 2738 Even with this special hack, there are 5 general cases that cannot be handled. 2712 2739 The first case is for the function-call identifier ©?()©: … … 2773 2800 This means that a function requiring mutual exclusion could block if the lock is already held by another thread. 2774 2801 Blocking on a monitor lock does not block the kernel thread, it simply blocks the user thread, which yields its kernel thread while waiting to obtain the lock. 2775 If multiple mutex parameters are specified, they will be locked in parameter order ( i.e.first parameter is locked first) and unlocked in the2802 If multiple mutex parameters are specified, they will be locked in parameter order (\ie first parameter is locked first) and unlocked in the 2776 2803 reverse order. 2777 2804 \begin{lstlisting} … … 4476 4503 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}. 4477 4504 Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''. 4478 Given that nested types in C are equivalent to not using them, i.e.,they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility.4505 Given that nested types in C are equivalent to not using them, \ie they are essentially useless, it is unlikely there are any realistic usages that break because of this incompatibility. 4479 4506 \end{description} 4480 4507 … … 5167 5194 \label{s:RationalNumbers} 5168 5195 5169 Rational numbers are numbers written as a ratio, i.e.,as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers.5196 Rational numbers are numbers written as a ratio, \ie as a fraction, where the numerator (top number) and the denominator (bottom number) are whole numbers. 5170 5197 When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible. 5171 5198
Note: See TracChangeset
for help on using the changeset viewer.