Our research includes the integration of Turing and an advanced programming environment for the management of software architectures (component relationships). We are also developing an algebra of software architectures. In cooperation with others, we are designing and implementing data-parallel language features. Also in cooperation with the IBM Toronto research lab, we are implementing highly-optimizing and parallel compilers, and investigating how they can be used to simplify the design of hardware while improving performance.
On the theoretical side, we are also interested in the logical foundation of programming. We have developed a programming logic that enables us to describe computations using a single boolean expression, and express the programming refinement order as ordinary implication. It applies to both terminating and nonterminating computation, to sequential and parallel computation, to stand-alone and interactive computation. In the future, this may have a practical benefit: a programming system that can report logic errors in programs just as it now reports syntax errors. Some initial investigations suggest that the programming logic may be as good for deriving VLSI circuits as for deriving programs.