This raises fresh issues in data flow analysis, primarily because of the security issues - code migrated from a client to a server, or from user mode to kernel mode, must be trustable. 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. We plan to rectify this.
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.