| 1 | \chapter{Conclusion}
|
|---|
| 2 | \label{c:conclusion}
|
|---|
| 3 |
|
|---|
| 4 | The goal of this work is to extend the simple and unsafe enumeration type in the C programming language into a complex and safe enumeration type in the \CFA programming language while maintaining backward compatibility with C.
|
|---|
| 5 | Within this goal, the new \CFA enumeration should align with the analogous enumeration features in other languages to match modern programming expectations.
|
|---|
| 6 | Hence, the \CFA enumeration features are borrowed from a number of programming languages, but engineered to work and play with \CFA's type system and feature set.
|
|---|
| 7 |
|
|---|
| 8 | Strong type-checking of enumeration initialization and assignment provides additional safety, ensuring an enumeration only contains its enumerators.
|
|---|
| 9 | Overloading and scoping of enumerators significantly reduces the naming problem, providing a better software-engineering environment, with fewer name clashes and the ability to disambiguate those that cannot be implicitly resolved.
|
|---|
| 10 | Typed enumerations solve the data-harmonization problem increasing safety through better software engineering.
|
|---|
| 11 | Moreover, integrating enumerations with existing control structures provides a consistent upgrade for programmers and a succinct and secure mechanism to enumerate with the new loop-range feature.
|
|---|
| 12 | Generalization and reuse are supported by incorporating the new enumeration type using the \CFA trait system.
|
|---|
| 13 | Enumeration traits define the meaning of an enumeration, allowing functions to be written that work on any enumeration, such as the reading and printing an enumeration.
|
|---|
| 14 | Using advanced duck typing, existing C enumerations can be extended so they work with all of the enumeration features, providing for legacy C code to be moved forward into the modern \CFA programming domain.
|
|---|
| 15 | Finally, I expanded the \CFA project's test-suite with multiple enumeration features tests with respect to implicit conversions, control structures, inheritance, interaction with the polymorphic types, and the features built on top of enumeration traits.
|
|---|
| 16 | These tests ensure future \CFA work does not accidentally break the new enumeration system.
|
|---|
| 17 |
|
|---|
| 18 | The conclusion is that the new \CFA enumeration mechanisms achieve the initial goals, providing C programmers with an intuitive enumeration mechanism for handling modern programming requirements.
|
|---|
| 19 |
|
|---|
| 20 |
|
|---|
| 21 | \section{Future Work}
|
|---|
| 22 |
|
|---|
| 23 | The following are ideas to improve and extend the work in this thesis.
|
|---|
| 24 | \begin{enumerate}
|
|---|
| 25 | \item
|
|---|
| 26 | There are still corner cases being found in the current \CFA enumeration implementation.
|
|---|
| 27 | Fixing some of these corner cases requires changes to the \CFA resolver or extensions to \CFA. %, like compile-time constant-expression evaluation.
|
|---|
| 28 | When these changes are made, it should be straightforward to update the \CFA enumeration implementation to work with them.
|
|---|
| 29 | \item
|
|---|
| 30 | Currently, some aspects of the enumeration trait system require explicitly including the file @enum.hfa@, which can lead to problems.
|
|---|
| 31 | It should be possible to have this file included implicitly by updating the \CFA prelude.
|
|---|
| 32 | \item
|
|---|
| 33 | There are multiple \CFA features being developed in parallel with enumerations.
|
|---|
| 34 | Two closely related features are iterator and namespace.
|
|---|
| 35 | Enumerations may have to be modified to dovetail with these features.
|
|---|
| 36 | For example, enumerating with range loops does not align with the current iterator design, so some changes will be necessary.
|
|---|
| 37 | \item
|
|---|
| 38 | C already provides @const@-style aliasing using the \emph{unnamed} enumerator \see{\VRef{s:TypeName}}, even if the name @enum@ is misleading (@const@ would be better).
|
|---|
| 39 | Given the existence of this form, it is conceivable to extend it with types other than @int@.
|
|---|
| 40 | \begin{cfa}
|
|---|
| 41 | enum { Size = 20u, PI = 3.14159L, Jack = L"John" };
|
|---|
| 42 | \end{cfa}
|
|---|
| 43 | which matches with @const@ aliasing in other programming languages.
|
|---|
| 44 | Here, the type of the enumerator is the type of the initialization constant, \eg @typeof( 20u )@ for @Size@ implies @unsigned int@.
|
|---|
| 45 | Auto-initialization is restricted to the case where all constants are @int@, matching with C.
|
|---|
| 46 | As seen in \VRef{s:EnumeratorTyping}, this feature is just a shorthand for multiple typed-enumeration declarations.
|
|---|
| 47 | \begin{cfa}
|
|---|
| 48 | enum( unsigned int ) { Size = 20u };
|
|---|
| 49 | enum( long double ) { PI = 3.14159L };
|
|---|
| 50 | enum( wchar_t * ) { Jack = L"John" };
|
|---|
| 51 | \end{cfa}
|
|---|
| 52 | \item
|
|---|
| 53 | Currently enumeration scoping is all or nothing. In some cases, it might be useful to
|
|---|
| 54 | increase the scoping granularity to individual enumerators.
|
|---|
| 55 | \begin{cfa}
|
|---|
| 56 | enum E1 { @!@A, @^@B, C };
|
|---|
| 57 | enum E2 @!@ { @!@A, @^@B, C };
|
|---|
| 58 | \end{cfa}
|
|---|
| 59 | Here, @'!'@ means the enumerator is scoped, and @'^'@ means the enumerator is unscoped.
|
|---|
| 60 | For @E1@, @A@ is scoped; @B@ and @C@ are unscoped.
|
|---|
| 61 | For @E2@, @A@, and @C@ are scoped; @B@ is unscoped.
|
|---|
| 62 | Finding a use case is important to justify this extension.
|
|---|
| 63 | \item
|
|---|
| 64 | An extension mentioned in \VRef{s:Ada} is using @typedef@ to create an enumerator alias.
|
|---|
| 65 | \begin{cfa}
|
|---|
| 66 | enum(int) RGB { @Red@, @Green@, Blue };
|
|---|
| 67 | enum(int) Traffic_Light { @Red@, Yellow, @Green@ };
|
|---|
| 68 | typedef RGB.Red OtherRed; // alias
|
|---|
| 69 | \end{cfa}
|
|---|
| 70 | \end{enumerate}
|
|---|