Changeset 2989d6f for doc/proposals/enum.tex
- Timestamp:
- Jan 30, 2024, 9:42:18 PM (8 months ago)
- Branches:
- master
- Children:
- 538cc35
- Parents:
- 65b851a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/proposals/enum.tex
r65b851a r2989d6f 7 7 \usepackage{graphics} 8 8 \usepackage{xspace} 9 \usepackage{relsize} % must be after change to small or selects old size 9 10 \usepackage{calc} % latex arithmetic 10 11 … … 64 65 \newcommand{\CCIcon}{\textrm{C}\kern-.1em\hbox{+\kern-.25em+}} % C++ icon 65 66 \newcommand{\CC}[1][]{\protect\CCIcon{#1}\xspace} % C++ symbolic name 67 \newcommand{\Csharp}{C\raisebox{-0.7ex}{\relsize{2}$^\sharp$}\xspace} % C# symbolic name 66 68 \newcommand{\PAB}[1]{{\color{red}PAB: #1}} 67 69 … … 110 112 \begin{abstract} 111 113 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@. 112 C and \CC restrict an enumeration type to the integral type @signed int@, meaning enumeration names bind to integer constants.114 C restrict an enumeration type to the integral type @signed int@, which \CC support , meaning enumeration names bind to integer constants. 113 115 \CFA extends C enumerations to allow all basic and custom types for the enumeration type, like other modern programming languages. 114 116 Furthermore, \CFA adds other useful features for enumerations to support better software-engineering practices and simplify program development. … … 132 134 The C-Style enumeration has the following syntax and semantics. 133 135 \begin{lstlisting}[label=lst:weekday] 134 enum Weekday { Monday, Tuesday, Wednesday, Thursday@ =10@, Friday, Saturday, Sunday };135 $\(\uparrow\)$ $\(\uparrow\)$136 ${\rm \newterm{enumeration name}}$ ${\rm \newterm{enumerator names}}136 enum Weekday { Monday, Tuesday, Wednesday, Thursday@ = 10@, Friday, Saturday, Sunday }; 137 $\(\uparrow\)$ $\(\uparrow\)$ 138 ${\rm \newterm{enumeration name}}$ ${\rm \newterm{enumerator names}} 137 139 \end{lstlisting} 138 140 Here, the enumeration type @Weekday@ defines the ordered \newterm{enumerator}s @Monday@, @Tuesday@, @Wednesday@, @Thursday@, @Friday@, @Saturday@ and @Sunday@. … … 190 192 A \CFA-enum can be scoped, meaning the enumerator constants are not projected into the enclosing scope. 191 193 \begin{lstlisting} 192 enum Colour( char * ) @!@ { ... }; 194 enum Weekday @!@ { /* as above */ }; 195 enum Colour( char * ) @!@ { /* as above */ }; 193 196 \end{lstlisting} 194 197 where the @'!'@ implies the enumerators are \emph{not} projected. … … 197 200 % $$<qualified\_expression> := <enum\_type>.<enumerator>$$ 198 201 \begin{lstlisting} 199 Colour colour = @Colour.@Red; $\C{// qualification}$ 202 Weekday weekday = @Weekday.Monday@; $\C{// qualification}$ 203 Colour colour = @Colour.@Red; 200 204 colour = @Colour.@Blue; 201 205 \end{lstlisting} 202 206 203 207 \subsection{Enumeration Pseudo-functions} 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. 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.. 205 211 206 212 \subsubsection{Enumerator Attributes} … … 212 218 \end{lstlisting} 213 219 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. 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. 215 222 216 223 \subsubsection{\lstinline{enumerate()}} … … 920 927 \section{Related Work} 921 928 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} 922 967 923 968 \end{document}
Note: See TracChangeset
for help on using the changeset viewer.