It also raises new synthesis issues - eg moving code from the client to the server may reduce the client's workload at the expense of the server's. In general, changing circumstances mean the run-time system has to navigate the landscape of implementation alternatives adaptively. To do this, we need component metadata which allows efficient optimisation algorithms. Smart programs use rich data structures, both to be flexible, and to use sophisticated algorithms. Unfortunately, rich data structures are hard to analyse.
Pointers lead to the possibility of two objects having shared substructure.
This blocks many of our optimisation techniques. Reasoning about performance issues with rich data structures It is usually very difficult to reason about performance issues with rich, linked data structures. This is analogous to a static analysis problem, but to solve it we need to add code to maintain the information we want as the computation proceeds. We need the compiler to generate code to provide the information we will need to make good run-time optimisation decisions. We need to get people to use much better programming languages.