Changeset 83e9bd3 for doc/refrat
- Timestamp:
- Jun 2, 2017, 4:58:10 PM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- 421a287
- Parents:
- d3ed39f
- Location:
- doc/refrat
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/refrat/Makefile
rd3ed39f r83e9bd3 44 44 45 45 ${basename ${DOCUMENT}}.dvi : Makefile ${GRAPHS} ${PROGRAMS} ${PICTURES} ${FIGURES} ${SOURCES} ${basename ${DOCUMENT}}.tex \ 46 ../LaTeXmacros/common.tex ../LaTeXmacros/ indexstyle ../bibliography/cfa.bib46 ../LaTeXmacros/common.tex ../LaTeXmacros/lstlang.sty ../LaTeXmacros/indexstyle ../bibliography/cfa.bib 47 47 # Conditionally create an empty *.ind (index) file for inclusion until makeindex is run. 48 48 if [ ! -r ${basename $@}.ind ] ; then touch ${basename $@}.ind ; fi … … 70 70 fig2dev -L ps $< > $@ 71 71 72 %.pstex : %.fig 73 fig2dev -L pstex $< > $@ 74 fig2dev -L pstex_t -p $@ $< > $@_t 75 72 76 # Local Variables: # 73 77 # compile-command: "make" # -
doc/refrat/refrat.bib
rd3ed39f r83e9bd3 2 2 3 3 @manual{ANS:C, 4 keywords 5 contributer 6 title 4 keywords = {ANSI C}, 5 contributer = {gjditchfield@msg}, 6 title = {American National Standard for Information Systems -- 7 7 Programming Language -- {C}}, 8 organization 9 address 10 month = dec, year= 1989,11 note 8 organization= {American National Standards Institute}, 9 address = {1430 Broadway, New York, New York 10018}, 10 month = dec, year = 1989, 11 note = {X3.159-1989} 12 12 } 13 13 14 14 @manual{ANS:C11, 15 keywords 16 contributer 17 title 15 keywords = {ANS:C11}, 16 contributer = {gjditchfield@acm.org}, 17 title = {American National Standard Information Systems -- 18 18 Programming languages -- {C}}, 19 organization 20 address 21 month = may, year= 2012,22 note 19 organization= {American National Standards Institute}, 20 address = {25 West 43rd Street, New York, New York 10036}, 21 month = may, year = 2012, 22 note = {INCITS/ISO/IEC 9899-2011[2012]} 23 23 } 24 24 25 25 @book{c++, 26 keywords 27 author 28 title 29 publisher 30 year 31 edition 26 keywords = {C++, ANSI}, 27 author = {Margaret A. Ellis and Bjarne Stroustrup}, 28 title = {The Annotated {C}{\tt ++} Reference Manual}, 29 publisher = {Addison Wesley}, 30 year = 1990, 31 edition = {first} 32 32 } 33 33 34 34 @Unpublished{Ditchfield96:Overview, 35 author ="Glen Ditchfield",36 title ="An Overview of Cforall",37 note ="in preparation",38 year =199635 author = "Glen Ditchfield", 36 title = "An Overview of Cforall", 37 note = "in preparation", 38 year = 1996 39 39 } 40 40 41 41 @article{Bak:overload, 42 keywords 43 contributer 44 author 45 title 46 journal 47 year 48 month = oct, volume = 4, number = 4, pages= {601--614},49 abstract 42 keywords = {compilation}, 43 contributer = {gjditchfield@msg}, 44 author = {T. P. Baker}, 45 title = {A One-Pass Algorithm for Overload Resolution in {Ada}}, 46 journal = toplas, 47 year = 1982, 48 month = oct, volume = 4, number = 4, pages = {601--614}, 49 abstract = { 50 50 A simple method is presented for detecting ambiguities and finding 51 51 the correct interpretations of expressions in the programming … … 56 56 approach is demonstrated by a brief formal argument. 57 57 }, 58 comment 58 comment = { 59 59 See also \cite{D:overload}. 60 60 } … … 77 77 78 78 @book{clu, 79 keywords 80 contributer 81 author 79 keywords = {CLU}, 80 contributer = {gjditchfield@msg}, 81 author = {Barbara Liskov and Russell Atkinson and Toby Bloom and Eliot 82 82 Moss and J. Craig Schaffert and Robert Scheifler and Alan Snyder}, 83 title 84 publisher 85 year 86 volume 87 series 83 title = {CLU Reference Manual}, 84 publisher = {Springer-Verlag}, 85 year = 1981, 86 volume = 114, 87 series = {Lecture Notes in Computer Science} 88 88 } 89 89 90 90 @manual{SIMULA87, 91 keywords 92 contributer 93 title 94 organization 95 note 96 year 97 abstract 91 keywords = {Simula standard}, 92 contributer = {gjditchfield@msg}, 93 title = {Databehandling -- Programspr{\aa}k -- {SIMULA}}, 94 organization = {Standardiseringskommissionen i Sverige}, 95 note = {Svensk Standard SS 63 61 14}, 96 year = 1987, 97 abstract = { 98 98 Standard for the programming language SIMULA. Written in English. 99 99 } … … 112 112 113 113 @inproceedings{Thompson90new, 114 title = {A New CCompiler},115 author= {Ken Thompson},116 booktitle= {Proceedings of the Summer 1990 UKUUG Conference},117 year= 1990,118 pages= {41--51}114 title = {A New {C} Compiler}, 115 author = {Ken Thompson}, 116 booktitle = {Proceedings of the Summer 1990 UKUUG Conference}, 117 year = 1990, 118 pages = {41--51} 119 119 } -
doc/refrat/refrat.tex
rd3ed39f r83e9bd3 11 11 %% Created On : Wed Apr 6 14:52:25 2016 12 12 %% Last Modified By : Peter A. Buhr 13 %% Last Modified On : Wed Apr 5 23:23:28201714 %% Update Count : 7913 %% Last Modified On : Fri Jun 2 10:43:14 2017 14 %% Update Count : 83 15 15 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 16 16 … … 29 29 \usepackage{epic,eepic} 30 30 \usepackage{upquote} % switch curled `'" to straight 31 \usepackage{calc} 31 32 \usepackage{xspace} 32 33 \usepackage{varioref} % extended references … … 62 63 % Names used in the document. 63 64 \newcommand{\Version}{\input{../../version}} 64 65 65 \newcommand{\Textbf}[2][red]{{\color{#1}{\textbf{#2}}}} 66 66 \newcommand{\Emph}[2][red]{{\color{#1}\textbf{\emph{#2}}}} … … 97 97 \renewcommand{\chaptermark}[1]{\markboth{\thechapter\quad #1}{\thechapter\quad #1}} 98 98 \renewcommand{\sectionmark}[1]{\markboth{\thesection\quad #1}{\thesection\quad #1}} 99 \renewcommand{\subsectionmark}[1]{\markboth{\thesubsection\quad #1}{\thesubsection\quad #1}} 99 100 \pagenumbering{roman} 100 101 \linenumbers % comment out to turn off line numbering … … 121 122 122 123 This document is a reference manual and rationale for \CFA, a polymorphic extension of the C programming language. 123 It makes frequent reference to the {\c11} standard \cite{C11}, and occasionally compares \CFA to {\CC} \cite{C++}. 124 125 The manual deliberately imitates the ordering of the {\c11} standard (although the section numbering differs). 126 Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the {\c11} standard. 124 It covers low-level syntactic and semantic details of the language to address complex language issues for programmers, and provide language implementers with a precise language description. 125 It makes frequent reference to the \Celeven standard~\cite{C11}, and occasionally compares \CFA to \CC~\cite{C++}. 126 Changes to the syntax and additional features are expected to be included in later revisions. 127 128 The manual deliberately imitates the ordering of the \Celeven standard (although the section numbering differs). 129 Unfortunately, this means the manual contains more ``forward references'' than usual, making it harder to follow if the reader does not have a copy of the \Celeven standard. 127 130 For a simple introduction to \CFA, see the companion document ``An Overview of \CFA'' 128 131 \cite{Ditchfield96:Overview}. … … 139 142 \chapter{Terms, definitions, and symbols} 140 143 141 Terms from the {\c11} standard used in this document have the same meaning as in the {\c11}standard.144 Terms from the \Celeven standard used in this document have the same meaning as in the \Celeven standard. 142 145 143 146 % No ``Conformance'' or ``Environment'' chapters yet. … … 149 152 150 153 \section{Notation} 151 The syntax notation used in this document is the same as in the {\c11} standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the {\c11}standard.154 The syntax notation used in this document is the same as in the \Celeven standard, with one exception: ellipsis in the definition of a nonterminal, as in ``\emph{declaration:} \ldots'', indicates that these rules extend a previous definition, which occurs in this document or in the \Celeven standard. 152 155 153 156 … … 162 165 \begin{rationale} 163 166 Hence, a \CFA program can declare an ©int v© and a ©float v© in the same scope; 164 a {\CC}program can not.167 a \CC program can not. 165 168 \end{rationale} 166 169 … … 285 288 286 289 \begin{rationale} 287 Note that {\c11}does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions.290 Note that \Celeven does not include conversion from \Index{real type}s to \Index{complex type}s in the usual arithmetic conversions, and \CFA does not include them as safe conversions. 288 291 \end{rationale} 289 292 … … 370 373 \begin{rationale} 371 374 As in C, there is an implicit conversion from ©void *© to any pointer type. 372 This is clearly dangerous, and {\CC}does not have this implicit conversion.375 This is clearly dangerous, and \CC does not have this implicit conversion. 373 376 \CFA\index{deficiencies!void * conversion} keeps it, in the interest of remaining as pure a superset of C as possible, but discourages it by making it unsafe. 374 377 \end{rationale} … … 608 611 609 612 There are two notable differences between \CFA's overload resolution rules and the rules for 610 {\CC}defined in \cite{C++}.613 \CC defined in \cite{C++}. 611 614 First, the result type of a function plays a role. 612 In {\CC}, a function call must be completely resolved based on the arguments to the call in most circumstances.615 In \CC, a function call must be completely resolved based on the arguments to the call in most circumstances. 613 616 In \CFA, a function call may have several interpretations, each with a different result type, and the interpretations of the containing context choose among them. 614 617 Second, safe conversions are used to choose among interpretations of all sorts of functions; 615 in {\CC}, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators.618 in \CC, the ``usual arithmetic conversions'' are a separate set of rules that apply only to the built-in operators. 616 619 \end{rationale} 617 620 … … 637 640 638 641 \begin{rationale} 639 Expression syntax is quoted from the {\c11}standard.642 Expression syntax is quoted from the \Celeven standard. 640 643 The syntax itself defines the precedence and associativity of operators. 641 644 The sections are arranged in decreasing order of precedence, with all operators in a section having the same precedence. … … 665 668 The \Index{valid interpretation} of an \nonterm{identifier} are given by the visible\index{visible} declarations of the identifier. 666 669 667 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by {\c11}.670 A \nonterm{constant} or \nonterm{string-literal} has one valid interpretation, which has the type and value defined by \Celeven. 668 671 The predefined integer identifiers ``©1©'' and ``©0©'' have the integer values 1 and 0, respectively. 669 672 The other two predefined ``©0©'' identifiers are bound to polymorphic pointer values that, when specialized\index{specialization} with a data type or function type respectively, produce a null pointer of that type. … … 1113 1116 forall( otype T ) T restrict * ?++( T restrict *restrict volatile * ); 1114 1117 \end{lstlisting} with ©T© inferred to be ©float *©. 1115 This looks odd, because {\c11}contains a constraint that requires restrict-qualified types to be pointer-to-object types, and ©T© is not syntactically a pointer type. \CFA loosens the constraint.1118 This looks odd, because \Celeven contains a constraint that requires restrict-qualified types to be pointer-to-object types, and ©T© is not syntactically a pointer type. \CFA loosens the constraint. 1116 1119 \end{enumerate} 1117 1120 \end{rationale} … … 1477 1480 1478 1481 \begin{rationale} 1479 {\c11}does not include conversions from the \Index{real type}s to \Index{complex type}s in the \Index{usual arithmetic conversion}s. Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern.1482 \Celeven does not include conversions from the \Index{real type}s to \Index{complex type}s in the \Index{usual arithmetic conversion}s. Instead it specifies conversion of the result of binary operations on arguments from mixed type domains. \CFA's predefined operators match that pattern. 1480 1483 \end{rationale} 1481 1484 … … 1506 1509 1507 1510 \begin{rationale} 1508 {\c11}defines most arithmetic operations to apply an \Index{integer promotion} to any argument that belongs to a type that has an \Index{integer conversion rank} less than that of ©int©.1511 \Celeven defines most arithmetic operations to apply an \Index{integer promotion} to any argument that belongs to a type that has an \Index{integer conversion rank} less than that of ©int©. 1509 1512 If ©s© is a ©short int©, ``©s *s©'' does not have type ©short int©; 1510 1513 it is treated as ``©( (int)s ) * ( (int)s )©'', and has type ©int©. \CFA matches that pattern; … … 1519 1522 \end{lstlisting} 1520 1523 Since \CFA does not define a multiplication operator for ©short int©, ©square( s )© is treated as ©square( (int)s )©, and the result has type ©int©. 1521 This is mildly surprising, but it follows the {\c11}operator pattern.1524 This is mildly surprising, but it follows the \Celeven operator pattern. 1522 1525 1523 1526 A more troubling example is … … 1617 1620 ©ptrdiff_t© is an implementation-defined identifier defined in ©<stddef.h>© that is synonymous with a signed integral type that is large enough to hold the difference between two pointers. 1618 1621 It seems reasonable to use it for pointer addition as well. (This is technically a difference between \CFA and C, which only specifies that pointer addition uses an \emph{integral} argument.) Hence it is also used for subscripting, which is defined in terms of pointer addition. 1619 The {\c11}standard uses ©size_t© in several cases where a library function takes an argument that is used as a subscript, but ©size_t© is unsuitable here because it is an unsigned type.1622 The \Celeven standard uses ©size_t© in several cases where a library function takes an argument that is used as a subscript, but ©size_t© is unsuitable here because it is an unsigned type. 1620 1623 \end{rationale} 1621 1624 … … 1930 1933 \end{lstlisting} 1931 1934 The logical expression calls the ©Rational© inequality operator, passing it ©*rp© and the ©Rational 0©, and getting a 1 or 0 as a result. 1932 In contrast, {\CC}would apply a programmer-defined ©Rational©-to-©int© conversion to ©*rp© in the equivalent situation.1935 In contrast, \CC would apply a programmer-defined ©Rational©-to-©int© conversion to ©*rp© in the equivalent situation. 1933 1936 The conversion to ©int© would produce a general integer value, which is unfortunate, and possibly dangerous if the conversion was not written with this situation in mind. 1934 1937 \end{rationale} … … 2626 2629 \begin{itemize} 2627 2630 \item a typedef name may be redefined to denote the same type as it currently does, provided that type is not a variably modified type; 2628 \item tags may be redeclared as specified in section 6.7.2.3 of the {\c11}standard.2631 \item tags may be redeclared as specified in section 6.7.2.3 of the \Celeven standard. 2629 2632 \end{itemize} 2630 2633 \begin{rationale} 2631 This constraint adds the phrase ``with compatible types'' to the {\c11}constraint, to allow overloading.2634 This constraint adds the phrase ``with compatible types'' to the \Celeven constraint, to allow overloading. 2632 2635 \end{rationale} 2633 2636 2634 2637 An identifier declared by a type declaration shall not be redeclared as a parameter in a function definition whose declarator includes an identifier list. 2635 2638 \begin{rationale} 2636 This restriction echos {\c11}'s ban on the redeclaration of typedef names as parameters.2639 This restriction echos \Celeven's ban on the redeclaration of typedef names as parameters. 2637 2640 This avoids an ambiguity between old-style function declarations and new-style function prototypes: 2638 2641 \begin{lstlisting} … … 2661 2664 2662 2665 \semantics 2663 \CFA extends the {\c11} definition of \define{anonymous structure} to include structure specifiers with tags, and extends the {\c11}definition of \define{anonymous union} to include union specifiers with tags.2666 \CFA extends the \Celeven definition of \define{anonymous structure} to include structure specifiers with tags, and extends the \Celeven definition of \define{anonymous union} to include union specifiers with tags. 2664 2667 \begin{rationale} 2665 2668 This extension imitates an extension in the Plan 9 C compiler \cite{Thompson90new}. … … 2854 2857 2855 2858 \begin{rationale} 2856 ©lvalue© provides some of the functionality of {\CC}'s ``©T&©'' ( reference to object of type ©T©) type.2857 Reference types have four uses in {\CC}.2859 ©lvalue© provides some of the functionality of \CC's ``©T&©'' ( reference to object of type ©T©) type. 2860 Reference types have four uses in \CC. 2858 2861 \begin{itemize} 2859 2862 \item … … 2862 2865 \item 2863 2866 A reference can be used to define an alias for a complicated lvalue expression, as a way of getting some of the functionality of the Pascal ©with© statement. 2864 The following {\CC}code gives an example.2867 The following \CC code gives an example. 2865 2868 \begin{lstlisting} 2866 2869 { … … 2874 2877 A reference parameter can be used to allow a function to modify an argument without forcing the caller to pass the address of the argument. 2875 2878 This is most useful for user-defined assignment operators. 2876 In {\CC}, plain assignment is done by a function called ``©operator=©'', and the two expressions2879 In \CC, plain assignment is done by a function called ``©operator=©'', and the two expressions 2877 2880 \begin{lstlisting} 2878 2881 a = b; … … 2887 2890 \item 2888 2891 References to \Index{const-qualified} types can be used instead of value parameters. Given the 2889 {\CC}function call ``©fiddle( a_thing )©'', where the type of ©a_thing© is2892 \CC function call ``©fiddle( a_thing )©'', where the type of ©a_thing© is 2890 2893 ©Thing©, the type of ©fiddle© could be either of 2891 2894 \begin{lstlisting} … … 3216 3219 The Simula class \cite{SIMULA87} is essentially a record type. 3217 3220 Since the only operations on a record are member selection and assignment, which can not be overloaded, there is never any ambiguity as to whether the abstraction or the implementation view is being used. 3218 In {\CC}3221 In \CC 3219 3222 \cite{C++}, operations on class instances include assignment and ``©&©'', which can be overloaded. 3220 3223 A ``scope resolution'' operator can be used inside the class to specify whether the abstract or implementation version of the operation should be used. … … 3548 3551 \subsection{Predefined macro names} 3549 3552 3550 The implementation shall define the macro names ©__LINE__©, ©__FILE__©, ©__DATE__©, and ©__TIME__©, as in the {\c11}standard.3553 The implementation shall define the macro names ©__LINE__©, ©__FILE__©, ©__DATE__©, and ©__TIME__©, as in the \Celeven standard. 3551 3554 It shall not define the macro name ©__STDC__©. 3552 3555 … … 3634 3637 \subsection{Pointer and array types} 3635 3638 3636 Array types can barely be said to exist in {\c11}, since in most cases an array name is treated as a constant pointer to the first element of the array, and the subscript expression ``©a[i]©'' is equivalent to the dereferencing expression ``©(*( a+( i )))©''.3639 Array types can barely be said to exist in \Celeven, since in most cases an array name is treated as a constant pointer to the first element of the array, and the subscript expression ``©a[i]©'' is equivalent to the dereferencing expression ``©(*( a+( i )))©''. 3637 3640 Technically, pointer arithmetic and pointer comparisons other than ``©==©'' and ``©!=©'' are only defined for pointers to array elements, but the type system does not enforce those restrictions. 3638 3641 Consequently, there is no need for a separate ``array type'' specification. … … 3712 3715 Different operators often have related meanings; 3713 3716 for instance, in C, ``©+©'', ``©+=©'', and the two versions of ``©++©'' perform variations of addition. 3714 Languages like {\CC}and Ada allow programmers to define operators for new types, but do not require that these relationships be preserved, or even that all of the operators be implemented.3717 Languages like \CC and Ada allow programmers to define operators for new types, but do not require that these relationships be preserved, or even that all of the operators be implemented. 3715 3718 Completeness and consistency is left to the good taste and discretion of the programmer. 3716 3719 It is possible to encourage these attributes by providing generic operator functions, or member functions of abstract classes, that are defined in terms of other, related operators. … … 3823 3826 \end{theindex} 3824 3827 3828 3825 3829 \end{document} 3826 3830
Note: See TracChangeset
for help on using the changeset viewer.