Changeset 2989d6f


Ignore:
Timestamp:
Jan 30, 2024, 9:42:18 PM (5 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
538cc35
Parents:
65b851a
Message:

started some related work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • doc/proposals/enum.tex

    r65b851a r2989d6f  
    77\usepackage{graphics}
    88\usepackage{xspace}
     9\usepackage{relsize}                                                                    % must be after change to small or selects old size
    910\usepackage{calc}                                                                               % latex arithmetic
    1011
     
    6465\newcommand{\CCIcon}{\textrm{C}\kern-.1em\hbox{+\kern-.25em+}} % C++ icon
    6566\newcommand{\CC}[1][]{\protect\CCIcon{#1}\xspace}               % C++ symbolic name
     67\newcommand{\Csharp}{C\raisebox{-0.7ex}{\relsize{2}$^\sharp$}\xspace} % C# symbolic name
    6668\newcommand{\PAB}[1]{{\color{red}PAB: #1}}
    6769
     
    110112\begin{abstract}
    111113An 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.
     114C restrict an enumeration type to the integral type @signed int@, which \CC support , meaning enumeration names bind to integer constants.
    113115\CFA extends C enumerations to allow all basic and custom types for the enumeration type, like other modern programming languages.
    114116Furthermore, \CFA adds other useful features for enumerations to support better software-engineering practices and simplify program development.
     
    132134The C-Style enumeration has the following syntax and semantics.
    133135\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}}
     136enum Weekday { Monday, Tuesday, Wednesday, Thursday@ = 10@, Friday, Saturday, Sunday };
     137                $\(\uparrow\)$                                                                        $\(\uparrow\)$
     138    ${\rm \newterm{enumeration name}}$                                          ${\rm \newterm{enumerator names}}
    137139\end{lstlisting}
    138140Here, the enumeration type @Weekday@ defines the ordered \newterm{enumerator}s @Monday@, @Tuesday@, @Wednesday@, @Thursday@, @Friday@, @Saturday@ and @Sunday@.
     
    190192A \CFA-enum can be scoped, meaning the enumerator constants are not projected into the enclosing scope.
    191193\begin{lstlisting}
    192 enum Colour( char * ) @!@ { ... };
     194enum Weekday @!@ { /* as above */ };
     195enum Colour( char * ) @!@ { /* as above */ };
    193196\end{lstlisting}
    194197where the @'!'@ implies the enumerators are \emph{not} projected.
     
    197200% $$<qualified\_expression> := <enum\_type>.<enumerator>$$
    198201\begin{lstlisting}
    199 Colour colour = @Colour.@Red;                   $\C{// qualification}$
     202Weekday weekday = @Weekday.Monday@;             $\C{// qualification}$
     203Colour colour = @Colour.@Red;
    200204colour = @Colour.@Blue;
    201205\end{lstlisting}
    202206
    203207\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
     209Pseudo-functions are function-like operators that do not result in any run-time computations, i.e., like @sizeof@.
     210Often 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..
    205211
    206212\subsubsection{Enumerator Attributes}
     
    212218\end{lstlisting}
    213219
    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.
     220Enumeration Greek may have more or less enumerators than Letter, but the enumerator values must be from Letter.
     221Therefore, 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.
    215222
    216223\subsubsection{\lstinline{enumerate()}}
     
    920927\section{Related Work}
    921928
     929Enumerations 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.
     930There 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
     940Because \CC is backwards compatible with C, it inherited C's enumerations, except there is no implicit conversion from an integral value to an enumeration;
     941hence, 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
     946For 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.
     947The underlying integral type can be explicitly specified:
     948\begin{lstlisting}[language=c++,{moredelim=**[is][\color{red}]{@}{@}}]
     949enum class RGB : @long@ { Red, Green, Blue };
     950enum class rgb : @char@ { Red = 'r', Green = 'g', Blue = 'b' };
     951enum 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}
    922967
    923968\end{document}
Note: See TracChangeset for help on using the changeset viewer.