Changeset c45170a
- Timestamp:
- Aug 1, 2016, 9:00:59 AM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 182fe1e
- Parents:
- 057b34f
- Location:
- doc
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/LaTeXmacros/common.tex
r057b34f rc45170a 11 11 %% Created On : Sat Apr 9 10:06:17 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Tue Jul 12 20:37:57 201614 %% Update Count : 2 0613 %% Last Modified On : Mon Aug 1 08:57:17 2016 14 %% Update Count : 223 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 19 19 \setlength{\textheight}{9in} 20 20 %\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 page21 \renewcommand{\topfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 22 \renewcommand{\bottomfraction}{0.8} % float must be greater than X of the page before it is forced onto its own page 23 23 \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 24 \renewcommand{\textfraction}{0.0} % the entire page maybe devoted to floats with no text on the page at all 25 26 \lefthyphenmin=4 % hyphen only after 4 characters 27 27 \righthyphenmin=4 28 28 … … 38 38 % Names used in the document. 39 39 40 \newcommand{\CFA}{C$\mathbf\forall$\xspace} 41 \newcommand{\CFL}{Cforall\xspace} 40 \newcommand{\CFA}{C$\mathbf\forall$\xspace} % set language symbolic name 41 \newcommand{\CFL}{Cforall\xspace} % set language text name 42 42 \newcommand{\CC}{\rm C\kern-.1em\hbox{+\kern-.25em+}\xspace} % CC symbolic name 43 43 \newcommand{\CCeleven}{\rm C\kern-.1em\hbox{+\kern-.25em+}11\xspace} % C++11 symbolic name 44 \def\c11{ISO/IEC C} 44 \def\c11{ISO/IEC C} % C11 name (cannot have numbers in latex command name) 45 45 46 46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% … … 52 52 \setlength{\parindentlnth}{\parindent} 53 53 54 \newlength{\gcolumnposn} 54 \newlength{\gcolumnposn} % temporary hack because lstlisting does handle tabs correctly 55 55 \newlength{\columnposn} 56 56 \setlength{\gcolumnposn}{2.5in} … … 63 63 %\patchcmd{\lsthk@TextStyle}{\let\lst@DefEsc\@empty}{}{}{\errmessage{failed to patch}} 64 64 65 \usepackage{pslatex} 66 \usepackage{relsize} 65 \usepackage{pslatex} % reduce size of san serif font 66 \usepackage{relsize} % must be after change to small or selects old size 67 67 68 68 % reduce size of chapter/section titles … … 120 120 121 121 % inline text and lowercase index: \Index{inline and lowercase index text} 122 \newcommand{\Index}{\@ifstar\@sIndex\@Index} 122 123 % inline text and as-in index: \Index[as-is index text]{inline text} 124 \newcommand{\@Index}[2][\@empty]{\lowercase{\def\temp{#2}}#2\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 123 125 % 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 126 \newcommand{\@sIndex}[2][\@empty]{#2\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 127 127 128 % cannot use ©128 % inline text and code index (cannot use ©) 129 129 \newcommand{\Indexc}[1]{\lstinline$#1$\index{#1@\lstinline$#1$}} 130 % code index (cannot use ©) 130 131 \newcommand{\indexc}[1]{\index{#1@\lstinline$#1$}} 131 132 … … 137 138 \newcommand{\@newterm}[2][\@empty]{\lowercase{\def\temp{#2}}{\newtermFontInline{#2}}\ifx#1\@empty\index{\temp}\else\index{#1@{\protect#2}}\fi} 138 139 \newcommand{\@snewterm}[2][\@empty]{{\newtermFontInline{#2}}\ifx#1\@empty\index{#2}\else\index{#1@{\protect#2}}\fi} 140 141 % Latin abbreviation 142 \newcommand{\abbrevFont}{\textit} % set empty for no italics 143 \newcommand*{\eg}{% 144 \@ifnextchar{,}{\abbrevFont{e}.\abbrevFont{g}.}% 145 {\@ifnextchar{:}{\abbrevFont{e}.\abbrevFont{g}.}% 146 {\abbrevFont{e}.\abbrevFont{g}.,\xspace}}% 147 }% 148 \newcommand*{\ie}{% 149 \@ifnextchar{,}{\abbrevFont{i}.\abbrevFont{e}.}% 150 {\@ifnextchar{:}{\abbrevFont{i}.\abbrevFont{e}.}% 151 {\abbrevFont{i}.\abbrevFont{e}.,\xspace}}% 152 }% 153 \newcommand*{\etc}{% 154 \@ifnextchar{.}{\abbrevFont{etc}}% 155 {\abbrevFont{etc}.\xspace}% 156 }% 139 157 \makeatother 140 158 … … 145 163 \endlist 146 164 }% quote2 165 147 166 \newenvironment{rationale}{% 148 167 \begin{quote2}\noindent$\Box$\enspace … … 188 207 \newcommand{\VPageref}[2][page]{\ifx#1\@empty\else{#1}\nobreakspace\fi\pageref{#2}} 189 208 190 % Go programming language 209 % Go programming language: https://github.com/julienc91/listings-golang/blob/master/listings-golang.sty 191 210 \lstdefinelanguage{Golang}{ 192 211 morekeywords=[1]{package,import,func,type,struct,return,defer,panic, recover,select,var,const,iota,},% … … 204 223 } 205 224 206 % CFA programming language, based on ANSI C 225 % CFA programming language, based on ANSI C (with some gcc additions) 207 226 \lstdefinelanguage{CFA}[ANSI]{C}{ 208 227 morekeywords={_Alignas,_Alignof,__alignof,__alignof__,asm,__asm,__asm__,_At,_Atomic,__attribute,__attribute__,auto, … … 215 234 language=CFA, 216 235 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, 236 basicstyle=\linespread{0.9}\sf, % reduce line spacing and use sanserif font 237 stringstyle=\tt, % use typewriter font 238 tabsize=4, % 4 space tabbing 239 xleftmargin=\parindentlnth, % indent code to paragraph indentation 240 extendedchars=true, % allow ASCII characters in the range 128-255 241 escapechar=§, % escape to latex in CFA code 242 mathescape=true, % allow $...$ LaTeX math escapes in code 243 %keepspaces=true, % 244 showstringspaces=false, % do not show spaces with cup 245 showlines=true, % show blank lines at end of code 246 aboveskip=4pt, % spacing above/below code block 228 247 belowskip=3pt, 229 moredelim=**[is][\color{red}]{®}{®}, 230 moredelim=**[is][\color{blue}]{ß}{ß}, 248 moredelim=**[is][\color{red}]{®}{®}, % red highlighting 249 moredelim=**[is][\color{blue}]{ß}{ß}, % blue highlighting 231 250 moredelim=**[is][\color{OliveGreen}]{¢}{¢}, % green highlighting 232 251 moredelim=[is][\lstset{keywords={}}]{¶}{¶}, % temporarily turn off keywords … … 242 261 \renewcommand\thebibliography[1]{ 243 262 \Oldthebibliography{#1} 244 \setlength{\parskip}{0pt} % reduce vertical spacing between references263 \setlength{\parskip}{0pt} % reduce vertical spacing between references 245 264 \setlength{\itemsep}{5pt plus 0.3ex} 246 265 }% 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 266 259 267 % Local Variables: % -
doc/user/user.tex
r057b34f rc45170a 11 11 %% Created On : Wed Apr 6 14:53:29 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Wed Jul 13 08:14:39 201614 %% Update Count : 12 4713 %% Last Modified On : Mon Aug 1 08:43:49 2016 14 %% Update Count : 1270 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 211 211 however, it largely extended the language, and did not address many existing problems.\footnote{% 212 212 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.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 (\eg objects, concurrency) are added and problems fixed within the framework of the existing language. 214 214 \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 215 These languages have different syntax and semantics from C, and do not interoperate directly with C, largely because of garbage collection. … … 265 265 \section[Compiling CFA Program]{Compiling \CFA Program} 266 266 267 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, e.g.:267 The command ©cfa© is used to compile \CFA program(s), and is based on the GNU \Indexc{gcc} command, \eg: 268 268 \begin{lstlisting} 269 269 cfa§\indexc{cfa}\index{compilation!cfa@©cfa©}§ [ gcc-options ] C/§\CFA§-files [ assembler/loader-files ] … … 350 350 \section{Underscores in Constants} 351 351 352 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, e.g.:352 Numeric constants are extended to allow \Index{underscore}s within constants\index{constant!underscore}, \eg: 353 353 \begin{lstlisting} 354 354 2®_®147®_®483®_®648; §\C{// decimal constant}§ … … 366 366 \begin{enumerate} 367 367 \item 368 A sequence of underscores is disallowed, e.g.,©12__34© is invalid.368 A sequence of underscores is disallowed, \eg ©12__34© is invalid. 369 369 \item 370 370 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).371 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 372 \item 373 373 A numeric prefix may end with an underscore; … … 498 498 \end{quote2} 499 499 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.:500 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 501 \begin{quote2} 502 502 \begin{tabular}{@{}l@{\hspace{1em}}l@{\hspace{1em}}l@{}} … … 518 518 \end{tabular} 519 519 \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.:520 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} 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}} \eg: 522 522 \begin{quote2} 523 523 \begin{tabular}{@{}l@{\hspace{3em}}l@{\hspace{2em}}l@{}} … … 542 542 Unsupported are K\&R C declarations where the base type defaults to ©int©, if no type is specified,\footnote{ 543 543 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.:544 \eg: 545 545 \begin{lstlisting} 546 546 x; §\C{// int x}§ … … 612 612 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 613 (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.:614 Hence, a pointer occupies memory to store its current address, and the pointer's value is loaded by dereferencing, \eg: 615 615 \begin{quote2} 616 616 \begin{tabular}{@{}ll@{}} … … 669 669 Except for auto-dereferencing by the compiler, this reference example is the same as the previous pointer example. 670 670 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.: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, \eg: 672 672 \begin{lstlisting} 673 673 r2 = ((r1 + r2) * (r3 - r1)) / (r3 - 15); … … 677 677 ®*®r2 = ((®*®r1 + ®*®r2) ®*® (®**®r3 - ®*®r1)) / (®**®r3 - 15); 678 678 \end{lstlisting} 679 When a reference operation appears beside a dereference operation, e.g.,©&*©, they cancel out.\footnote{679 When a reference operation appears beside a dereference operation, \eg ©&*©, they cancel out.\footnote{ 680 680 The unary ©&© operator yields the address of its operand. 681 681 If the operand has type ``type'', the result has type ``pointer to type''. … … 721 721 ®&®crc = &cx; §\C{// error, cannot change crc}§ 722 722 \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.: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}, \eg: 724 724 \begin{lstlisting} 725 725 int & const r = *0; §\C{// where 0 is the int * zero}§ 726 726 \end{lstlisting} 727 727 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. 728 Finally, the position of the ©const© qualifier \emph{after} the pointer/reference qualifier causes confuse for C programmers. 729 The ©const© qualifier cannot be moved before the pointer/reference qualifier for C style-declarations; 730 \CFA-style declarations attempt to address this issue: 731 \begin{quote2} 732 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} 733 \multicolumn{1}{c@{\hspace{3em}}}{\textbf{\CFA}} & \multicolumn{1}{c}{\textbf{C}} \\ 734 \begin{lstlisting} 735 ®const® * ®const® * const int ccp; 736 ®const® & ®const® & const int ccr; 737 \end{lstlisting} 738 & 739 \begin{lstlisting} 740 const int * ®const® * ®const® ccp; 741 742 \end{lstlisting} 743 \end{tabular} 744 \end{quote2} 745 where the \CFA declaration is read left-to-right (see \VRef{s:Declarations}). 728 746 729 747 \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 803 \section{Type Operators} 786 804 787 The new declaration syntax can be used in other contexts where types are required, e.g.,casts and the pseudo-routine ©sizeof©:805 The new declaration syntax can be used in other contexts where types are required, \eg casts and the pseudo-routine ©sizeof©: 788 806 \begin{quote2} 789 807 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} … … 805 823 806 824 \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.:825 The point of the new syntax is to allow returning multiple values from a routine~\cite{Galletly96,CLU}, \eg: 808 826 \begin{lstlisting} 809 827 ®[ int o1, int o2, char o3 ]® f( int i1, char i2, char i3 ) { … … 817 835 \Index*{Michael Tiemann}, with help from \Index*{Doug Lea}, provided named return values in g++, circa 1989.} 818 836 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.:837 Declaration qualifiers can only appear at the start of a routine definition, \eg: 820 838 \begin{lstlisting} 821 839 ®extern® [ int x ] g( int y ) {§\,§} … … 849 867 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 868 851 C-style declarations can be used to declare parameters for \CFA style routine definitions, e.g.:869 C-style declarations can be used to declare parameters for \CFA style routine definitions, \eg: 852 870 \begin{lstlisting} 853 871 [ int ] f( * int, int * ); §\C{// returns an integer, accepts 2 pointers to integers}§ … … 898 916 899 917 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.:918 as well, parameter names are optional, \eg: 901 919 \begin{lstlisting} 902 920 [ int x ] f (); §\C{// returning int with no parameters}§ … … 906 924 \end{lstlisting} 907 925 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.:926 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 927 \begin{quote2} 910 928 \begin{tabular}{@{}l@{\hspace{3em}}l@{}} … … 919 937 \end{tabular} 920 938 \end{quote2} 921 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} e.g.:939 Declaration qualifiers can only appear at the start of a \CFA routine declaration,\footref{StorageClassSpecifier} \eg: 922 940 \begin{lstlisting} 923 941 extern [ int ] f (int); … … 928 946 \section{Routine Pointers} 929 947 930 The syntax for pointers to \CFA routines specifies the pointer name on the right, e.g.:948 The syntax for pointers to \CFA routines specifies the pointer name on the right, \eg: 931 949 \begin{lstlisting} 932 950 * [ int x ] () fp; §\C{// pointer to routine returning int with no parameters}§ … … 1046 1064 p( /* positional */, /* named */, . . . ); 1047 1065 \end{lstlisting} 1048 While it is possible to implement both approaches, the first possibly is more complex than the second, e.g.:1066 While it is possible to implement both approaches, the first possibly is more complex than the second, \eg: 1049 1067 \begin{lstlisting} 1050 1068 p( int x, int y, int z, . . . ); … … 1056 1074 In the second call, the named arguments separate the positional and ellipse arguments, making it trivial to read the call. 1057 1075 1058 The problem is exacerbated with default arguments, e.g.:1076 The problem is exacerbated with default arguments, \eg: 1059 1077 \begin{lstlisting} 1060 1078 void p( int x, int y = 2, int z = 3. . . ); … … 1264 1282 1265 1283 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 its1284 In unambiguous situations, the tuple brackets may be omitted, \eg a tuple that appears as an argument may have its 1267 1285 square brackets omitted for convenience; therefore, the following routine invocations are equivalent: 1268 1286 \begin{lstlisting} … … 1303 1321 1304 1322 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.:1323 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 1324 \begin{lstlisting} 1307 1325 const volatile [ int, float, const int ] x; … … 1311 1329 [ const volatile int, const volatile float, const volatile int ] x; 1312 1330 \end{lstlisting} 1313 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, e.g.:1331 Declaration qualifiers can only appear at the start of a \CFA tuple declaration4, \eg: 1314 1332 \begin{lstlisting} 1315 1333 extern [ int, int ] w1; … … 1319 1337 Unfortunately, C's syntax for subscripts precluded treating them as tuples. 1320 1338 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.1339 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 1340 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 1341 \end{rationale} … … 1380 1398 Clearly, the types of the entities being assigned must be type compatible with the value of the expression. 1381 1399 1382 Mass assignment has parallel semantics, e.g.,the statement:1400 Mass assignment has parallel semantics, \eg the statement: 1383 1401 \begin{lstlisting} 1384 1402 [ x, y, z ] = 1.5; … … 1469 1487 \section{Unnamed Structure Fields} 1470 1488 1471 C requires each field of a structure to have a name, except for a bit field associated with a basic type, e.g.:1489 C requires each field of a structure to have a name, except for a bit field associated with a basic type, \eg: 1472 1490 \begin{lstlisting} 1473 1491 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 field1492 int f1; §\C{// named field}§ 1493 int f2 : 4; §\C{// named field with bit field size}§ 1494 int : 3; §\C{// unnamed field for basic type with bit field size}§ 1495 int ; §\C{// disallowed, unnamed field}§ 1496 int *; §\C{// disallowed, unnamed field}§ 1497 int (*)(int); §\C{// disallowed, unnamed field}§ 1480 1498 }; 1481 1499 \end{lstlisting} 1482 1500 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 1501 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.:1502 A list of unnamed fields is also supported, \eg: 1485 1503 \begin{lstlisting} 1486 1504 struct { 1487 int , , ; // 3 unnamed fields1505 int , , ; §\C{// 3 unnamed fields}§ 1488 1506 } 1489 1507 \end{lstlisting} … … 1498 1516 §\emph{expr}§ -> [ §\emph{fieldlist}§ ] 1499 1517 \end{lstlisting} 1500 \emph{expr} is any expression yielding a value of type record, e.g.,©struct©, ©union©.1518 \emph{expr} is any expression yielding a value of type record, \eg ©struct©, ©union©. 1501 1519 Each element of \emph{ fieldlist} is an element of the record specified by \emph{expr}. 1502 1520 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 1778 } 1761 1779 \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. 1780 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. 1781 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. 1782 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. 1783 The key observation is that the ©switch© statement branches into control structure, i.e., there are multiple entry points into its statement body. 1767 1784 \end{enumerate} 1768 1785 … … 1782 1799 \item 1783 1800 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}1801 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: 1802 \begin{lstlisting} 1786 1803 case 1: case 2: case 3: ... 1787 1804 \end{lstlisting} 1788 1805 still work. 1789 1806 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. 1790 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©, e.g.:1807 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: 1791 1808 \begin{lstlisting} 1792 1809 ®choose® ( i ) { … … 1815 1832 Therefore, no change is made for this issue. 1816 1833 \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.1834 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{ 1835 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. 1836 Further declarations at the same nesting level as the statement body are disallowed to ensure every transfer into the body is sound. 1820 1837 \begin{lstlisting} 1821 1838 switch ( x ) { 1822 ®int i = 0;® §\C{// allowed }§1839 ®int i = 0;® §\C{// allowed only at start}§ 1823 1840 case 0: 1824 1841 ... 1825 ®int i= 0;® §\C{// disallowed}§1842 ®int j = 0;® §\C{// disallowed}§ 1826 1843 case 1: 1827 1844 { 1828 ®int i = 0;® §\C{// allowed in any compound statement}§1845 ®int k = 0;® §\C{// allowed at different nesting levels}§ 1829 1846 ... 1830 1847 } … … 2707 2724 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 2725 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.2726 There are several ambiguous cases with operator identifiers, \eg ©int *?*?()©, where the string ©*?*?© can be lexed as ©*©/©?*?© or ©*?©/©*?©. 2727 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 2728 Even with this special hack, there are 5 general cases that cannot be handled. 2712 2729 The first case is for the function-call identifier ©?()©: … … 2773 2790 This means that a function requiring mutual exclusion could block if the lock is already held by another thread. 2774 2791 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 the2792 If multiple mutex parameters are specified, they will be locked in parameter order (\ie first parameter is locked first) and unlocked in the 2776 2793 reverse order. 2777 2794 \begin{lstlisting} … … 4471 4488 \CFA is C \emph{incompatible} on this issue, and provides semantics similar to \Index*[C++]{\CC}. 4472 4489 Nested types are not hoisted and can be referenced using the field selection operator ``©.©'', unlike the \CC scope-resolution operator ``©::©''. 4473 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.4490 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. 4474 4491 \end{description} 4475 4492 … … 5162 5179 \label{s:RationalNumbers} 5163 5180 5164 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.5181 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. 5165 5182 When creating and computing with rational numbers, results are constantly reduced to keep the numerator and denominator as small as possible. 5166 5183
Note: See TracChangeset
for help on using the changeset viewer.