Changes in doc/proposals/enum.tex [2989d6f:dd1ebb1]
- File:
-
- 1 edited
-
doc/proposals/enum.tex (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
doc/proposals/enum.tex
r2989d6f rdd1ebb1 7 7 \usepackage{graphics} 8 8 \usepackage{xspace} 9 \usepackage{relsize} % must be after change to small or selects old size10 9 \usepackage{calc} % latex arithmetic 11 10 … … 65 64 \newcommand{\CCIcon}{\textrm{C}\kern-.1em\hbox{+\kern-.25em+}} % C++ icon 66 65 \newcommand{\CC}[1][]{\protect\CCIcon{#1}\xspace} % C++ symbolic name 67 \newcommand{\Csharp}{C\raisebox{-0.7ex}{\relsize{2}$^\sharp$}\xspace} % C# symbolic name68 66 \newcommand{\PAB}[1]{{\color{red}PAB: #1}} 69 67 … … 112 110 \begin{abstract} 113 111 An enumeration is a type defining an ordered set of named constant values, where a name abstracts a value, e.g., @PI@ versus @3.145159@. 114 C restrict an enumeration type to the integral type @signed int@, which \CC support, meaning enumeration names bind to integer constants.112 C and \CC restrict an enumeration type to the integral type @signed int@, meaning enumeration names bind to integer constants. 115 113 \CFA extends C enumerations to allow all basic and custom types for the enumeration type, like other modern programming languages. 116 114 Furthermore, \CFA adds other useful features for enumerations to support better software-engineering practices and simplify program development. … … 134 132 The C-Style enumeration has the following syntax and semantics. 135 133 \begin{lstlisting}[label=lst:weekday] 136 enum Weekday { Monday, Tuesday, Wednesday, Thursday@ =10@, Friday, Saturday, Sunday };137 $\(\uparrow\)$ $\(\uparrow\)$138 ${\rm \newterm{enumeration name}}$ ${\rm \newterm{enumerator names}}134 enum Weekday { Monday, Tuesday, Wednesday, Thursday@=10@, Friday, Saturday, Sunday }; 135 $\(\uparrow\)$ $\(\uparrow\)$ 136 ${\rm \newterm{enumeration name}}$ ${\rm \newterm{enumerator names}} 139 137 \end{lstlisting} 140 138 Here, the enumeration type @Weekday@ defines the ordered \newterm{enumerator}s @Monday@, @Tuesday@, @Wednesday@, @Thursday@, @Friday@, @Saturday@ and @Sunday@. … … 192 190 A \CFA-enum can be scoped, meaning the enumerator constants are not projected into the enclosing scope. 193 191 \begin{lstlisting} 194 enum Weekday @!@ { /* as above */ }; 195 enum Colour( char * ) @!@ { /* as above */ }; 192 enum Colour( char * ) @!@ { ... }; 196 193 \end{lstlisting} 197 194 where the @'!'@ implies the enumerators are \emph{not} projected. … … 200 197 % $$<qualified\_expression> := <enum\_type>.<enumerator>$$ 201 198 \begin{lstlisting} 202 Weekday weekday = @Weekday.Monday@; $\C{// qualification}$ 203 Colour colour = @Colour.@Red; 199 Colour colour = @Colour.@Red; $\C{// qualification}$ 204 200 colour = @Colour.@Blue; 205 201 \end{lstlisting} 206 202 207 203 \subsection{Enumeration Pseudo-functions} 208 209 Pseudo-functions are function-like operators that do not result in any run-time computations, i.e., like @sizeof@. 210 Often a call to a pseudo-function is substituted with information extracted from the symbol table at compilation time, like storage size or alignment associated with the underlying architecture.. 204 Pseudo-functions are function-like operators that do not result in any run-time computations, i.e., like @sizeof@. Instead, the call to functions will be substituted into other expressions in compilation time. 211 205 212 206 \subsubsection{Enumerator Attributes} … … 218 212 \end{lstlisting} 219 213 220 Enumeration Greek may have more or less enumerators than Letter, but the enumerator values must be from Letter. 221 Therefore, Greek enumerators are a subset of type Letter and are type compatible with enumeration Letter, but Letter enumerators are not type compatible with enumeration Greek. 214 Enumeration Greek may have more or less enumerators than Letter, but the enumerator values must be from Letter. Therefore, Greek enumerators are a subset of type Letter and are type compatible with enumeration Letter, but Letter enumerators are not type compatible with enumeration Greek. 222 215 223 216 \subsubsection{\lstinline{enumerate()}} … … 927 920 \section{Related Work} 928 921 929 Enumerations exist in many popular programming languages, e.g., Pascal, Ada, \Csharp, \CC, Go, Java, Modula-3, Rust, Swift, Python, and Algebraic data type in functional programming.930 There are a large set of overlapping features for all the languages, but each language has its own unique restrictions and extensions.931 932 \subsection{Pascal}933 934 \subsection{Ada}935 936 \subsection{\Csharp}937 938 \subsection{\CC}939 940 Because \CC is backwards compatible with C, it inherited C's enumerations, except there is no implicit conversion from an integral value to an enumeration;941 hence, the values in a \CC enumeration can only be its enumerators.942 943 \CC{11} extended enumeration with a scoped enumeration, \lstinline[language=c++]{enum class} (or \lstinline[language=c++]{enum struct}), where the enumerators are local to the enumeration and are accessed using type qualification, e.g., @Weekday::Monday@.944 \CC{20} supports unscoped access with a \lstinline[language=c++]{using enum} declaration.945 946 For both unscoped and scoped enumerations, the underlying type is an implementation-defined integral type that is large enough to hold all enumerated values; it does not have to be the smallest possible type.947 The underlying integral type can be explicitly specified:948 \begin{lstlisting}[language=c++,{moredelim=**[is][\color{red}]{@}{@}}]949 enum class RGB : @long@ { Red, Green, Blue };950 enum class rgb : @char@ { Red = 'r', Green = 'g', Blue = 'b' };951 enum class srgb : @signed char@ { Red = -1, Green = 0, Blue = 1 };952 \end{lstlisting}953 954 \subsection{Go}955 956 \subsection{Java}957 958 \subsection{Modula-3}959 960 \subsection{Rust}961 962 \subsection{Swift}963 964 \subsection{Python}965 966 \subsection{Algebraic Data Type}967 922 968 923 \end{document}
Note:
See TracChangeset
for help on using the changeset viewer.