The snoot pass should be further modified to support the qvar construct, and support use of the extern type modifier so as to permit qvar and qint declarations and not just definitions. Once that is done, then the implemented clever compiler could in theory support multiple source code files. However, the SUIF compiler system itself at the current time only has limited support for multiple source files. In particular, version 1.0.1 does not have a supported, functional linksuif pass which would make the global symbol tables of multiple SUIF files consistent, among other things making declarations which ought to be globally visible available in all global symbol tables.
Chapter specifies that if there are no qinfluence statements referencing a particular qint parameter, then that qint parameter should be associated with the performance of all parts of the program where the definition is visible. This has not yet been implemented. However, this is not a major problem but rather a minor convenience for the programmer.
The select_alternatives pass currently does not perform any kind of smart searching of program version space, and simply searches the entire space. It needs to incorporate both standard space searching techniques and domain-specific heuristics enabled by the information gathered by integrate. The current integrate pass only finds and records relationships between qif variables which are used in the same qif statement and qint parameters which are referenced in nested qinfluence statements. A more sophisticated integrate would record relationships between sets of quasistatic variables and sets of quasistatic parameters resulting from qinfluence statements nested inside qif clauses and qif statements nested in qinfluence statements as well as other qif statements. In addition, integrate should record dynamic interactions such as in Figure .
A given run of the program has a great deal of context which can be detected by instrumentation code in the program --- a few examples of such context items include time of day, identity of person using the program, exactly which machine is being used, load of machine during the program run, network bandwidth and latency, command-line parameters. Some of these context items may be worth storing with more standard forms of profiling data during each run, to give the clever compiler more information upon which to base program version selection. Determination of whether this would be worthwhile is a matter for pragmatic exploration.
Combining real-time profiling techniques with CPU-time profiling techniques potentially gives additional synergistic insight into a program's performance characteristics. This may be worth exploring independently of the clever compiler implementation.
A clever compiler, which requires extending the C language with new syntax and constructs, may or may not be the best stepping stone toward a smart compiler. However, even in developing the examples in Chapter , several times the syntax and constructs defined in Chapter proved to not be sufficiently expressive to conveniently encode the code alternatives. Perhaps a few simple extensions would suffice; however, perhaps entirely different mechanisms of encoding code alternatives in source code should be considered and evaluated.
It will be desireable to eventually integrate work on this clever compiler implementation with other manifestations of quasistatic computing ideas, such as feedback-directed specialization of C []. Integration might entail coordinating profiling efforts (i.e., standardizing data collection) and preventing different modules which wish to conduct experiments on different program versions from interfering with each other. Work on such integration would be a step toward a quasistatic computing ``environment'' [,].