[18ebc28] | 1 | \chapter{Conclusion} |
---|
[fcf3493] | 2 | \label{c:conclusion} |
---|
[18ebc28] | 3 | |
---|
[c4aca65] | 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. |
---|
[7cb14c9] | 5 | Within this goal, the new \CFA enumeration should align with the analogous enumeration features in other languages to match modern programming expectations. |
---|
[a8f44c8] | 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. |
---|
[fcf3493] | 7 | |
---|
[c4aca65] | 8 | Strong type-checking of enumeration initialization and assignment provides additional safety, ensuring an enumeration only contains its enumerators. |
---|
[7cb14c9] | 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. |
---|
[c4aca65] | 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. |
---|
[7cb14c9] | 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. |
---|
[c1c0efdb] | 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. |
---|
[c4aca65] | 16 | These tests ensure future \CFA work does not accidentally break the new enumeration system. |
---|
[fcf3493] | 17 | |
---|
[c4aca65] | 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. |
---|
[fcf3493] | 19 | |
---|
| 20 | |
---|
[7cb14c9] | 21 | \section{Future Work} |
---|
[18ebc28] | 22 | |
---|
[c1c0efdb] | 23 | The following are ideas to improve and extend the work in this thesis. |
---|
| 24 | \begin{enumerate} |
---|
| 25 | \item |
---|
[7cb14c9] | 26 | There are still corner cases being found in the current \CFA enumeration implementation. |
---|
[c1c0efdb] | 27 | Fixing some of these corner cases requires changes to the \CFA resolver or extensions to \CFA. %, like compile-time constant-expression evaluation. |
---|
[7cb14c9] | 28 | When these changes are made, it should be straightforward to update the \CFA enumeration implementation to work with them. |
---|
[c1c0efdb] | 29 | \item |
---|
[c4aca65] | 30 | Currently, some aspects of the enumeration trait system require explicitly including the file @enum.hfa@, which can lead to problems. |
---|
[7cb14c9] | 31 | It should be possible to have this file included implicitly by updating the \CFA prelude. |
---|
[c1c0efdb] | 32 | \item |
---|
[acab1bd] | 33 | There are multiple \CFA features being developed in parallel with enumerations. |
---|
[c1c0efdb] | 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 |
---|
[7cb14c9] | 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} |
---|
[acab1bd] | 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. |
---|
[c4aca65] | 55 | \begin{cfa} |
---|
| 56 | enum E1 { @!@A, @^@B, C }; |
---|
| 57 | enum E2 @!@ { @!@A, @^@B, C }; |
---|
| 58 | \end{cfa} |
---|
[c1c0efdb] | 59 | Here, @'!'@ means the enumerator is scoped, and @'^'@ means the enumerator is unscoped. |
---|
[c4aca65] | 60 | For @E1@, @A@ is scoped; @B@ and @C@ are unscoped. |
---|
| 61 | For @E2@, @A@, and @C@ are scoped; @B@ is unscoped. |
---|
[c1c0efdb] | 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} |
---|