[2a9d12d] | 1 | \chapter{Conclusion} |
---|
| 2 | |
---|
[8adcfee] | 3 | Decades after its first standardization, the C language remains a widely-used tool and a vital part of the software development landscape. |
---|
| 4 | The \CFA{} language under development at the University of Waterloo represents an evolutionary modernization of C with expressive modern language features paired with strong C backwards-compatibility. |
---|
[e402bbc] | 5 | This thesis has contributed to these project goals in a variety of ways, including the addition of a generic-types language feature (Chapter~\ref{generic-chap}) and refinement of the \CFA{} overload selection rules to produce a more expressive and intuitive model (Section~\ref{conv-cost-sec}). |
---|
[8adcfee] | 6 | Based on the technical contribution of the resolver prototype system (Section~\ref{rp-features-sec}), I have also made significant improvements to \CFA{} compilation performance, including un-combined bottom-up expression traversal (Section~\ref{arg-parm-matching-sec}), deferred-cached assertion satisfaction (Section~\ref{assn-sat-sec}), and a novel persistent union-find type environment data structure (Section~\ref{env-persistent-union-find}). |
---|
| 7 | The combination of these practical improvements and added features significantly improve the viability of \CFA{} as a practical programming language. |
---|
| 8 | |
---|
[cf01d0b] | 9 | Further improvements to the \CFA{} type system are still possible, however. |
---|
[8adcfee] | 10 | One area suggested by this work is development of a scheme for user-defined conversions; to integrate properly with the \CFA{} conversion model, there would need to be a distinction between safe and unsafe conversions, and possibly a way to denote conversions as explicit-only or non-chainable. |
---|
[69c37cc] | 11 | Another place for ongoing effort is improvement of compilation performance; I believe the most promising direction for that effort is rebuilding the \CFA{} compiler on a different framework than Bilson's \CFACC{}. |
---|
[8adcfee] | 12 | The resolver prototype presented in this work has good performance and already has the basics of \CFA{} semantics implemented, as well as many of the necessary core data structures, and would be a viable candidate for a new compiler architecture. |
---|
[8f55e8e9] | 13 | An alternate approach would be to fork an existing C compiler such as Clang~\cite{Clang}, which would need to be modified to use one of the resolution algorithms discussed here, as well as various other features introduced by Bilson~\cite{Bilson03}. |
---|
| 14 | |
---|
| 15 | More generally, the algorithmic techniques described in this thesis may be useful to implementors of other programming languages. |
---|
| 16 | In particular, the demonstration of practical performance for polymorphic return-type inference suggests the possibility of eliding return-type-only template parameters in \CC{} function calls, though integrating such an extension into \CC{} expression resolution in a backwards-compatible manner may be challenging. |
---|
[f845e80] | 17 | The \CFA{} expression resolution problem also bears some similarity to the \emph{local type inference} model put forward by Pierce \& Turner \cite{Pierce00} and Odersky \etal{} \cite{Odersky01}; compiler implementors for languages like Scala \cite{Scala}, which performs type inference based on this model, may be able to profitably adapt the algorithms and data structures presented in this thesis. |
---|