Last change on this file since 7d9a805b was 7d9a805b, checked in by Peter A. Buhr <pabuhr@…>, 4 months ago

more proofreading for enumerations

• Property mode set to 100644
File size: 3.0 KB
Line
1\chapter{Introduction}
2
3Naming values is a common practice in mathematics and engineering, \eg $\pi$, $\tau$ (2$\pi$), $\phi$ (golden ratio), MHz (1E6), etc.
4Naming is also commonly used to represent many other numerical phenomenon, such as days of the week, months of a year, floors of a building (basement), specific times (noon, New Years).
5Many programming languages capture this important software engineering capability through a mechanism called an \Newterm{enumeration}.
6An enumeration is similar to other programming-language types by providing a set of constrained values, but adds the ability to name \emph{all} the values in the set.
7Note, all enumeration names must be unique but different names can represent the same value (eight note, quaver), which are synonyms.
8
9Specifically, an enumerated type restricts its values to a fixed set of named constants.
10While all types are restricted to a fixed set of values because of the underlying von Neumann architecture, and hence, to a corresponding set of constants, \eg @3@, @3.5@, @3.5+2.1i@, @'c'@, @"abc"@, etc., these values are not named, other than the programming-language supplied constant names.
11
12Fundamentally, all enumeration systems have an \Newterm{enumeration} type with an associated set of \Newterm{enumerator} names.
13An enumeration has three universal attributes, \Newterm{label}, \Newterm{position}, and \Newterm{value}, as shown by this representative enumeration, where position and value can be different.
14\begin{cquote}
15\small\sf\setlength{\tabcolsep}{3pt}
16\begin{tabular}{rccccccccccc}
17\it\color{red}enumeration & \multicolumn{7}{c}{\it\color{red}enumerators}       \\
18$\downarrow$\hspace*{25pt} & \multicolumn{7}{c}{$\downarrow$}                           \\
19@enum@ Weekday \{                               & Mon,  & Tue,  & Wed,  & Thu,  & Fri,  & Sat,  & Sun \};       \\
20\it\color{red}label                             & Mon   & Tue   & Wed   & Thu   & Fri   & Sat   & Sun           \\
21\it\color{red}position                  & 0             & 1             & 2             & 3             & 4             & 5             & 6                     \\
22\it\color{red}value                             & 0             & 1             & 2             & 3             & 4             & 5             & 6
23\end{tabular}
24\end{cquote}
25Here, the \Newterm{enumeration} @Weekday@ defines the ordered \Newterm{enumerator}s @Mon@, @Tue@, @Wed@, @Thu@, @Fri@, @Sat@ and @Sun@.
26By convention, the successor of @Tue@ is @Mon@ and the predecessor of @Tue@ is @Wed@, independent of the associated enumerator constant values, implying an ordering among the enumerators.
27As well, the value can be explicitly set so it is different from the position.
28Because an enumerator is a constant, it cannot appear in a mutable context, \eg @Mon = Sun@ is meaningless, and an enumerator has no address, \ie it is an \Newterm{rvalue}\footnote{
29The term rvalue defines an expression that can only appear on the right-hand side of an assignment expression.}.
30
31On the surface, enumerations seem like a simple type.
32However, when extended with features available in other language types, enumerations become a complex.
33
34The goal of this work is to to extend the simple and unsafe enumeration type in the C programming-language into a sophisticated and safe type in the \CFA programming-language, while maintain backwards compatibility with C.
35
36\section{Contributions}
37
Note: See TracBrowser for help on using the repository browser.