Chapter 18 Excerpted from the 1994 Research Summary (Copyright 1994, UC Regents) Contact person: Carol Block, ILP Coordinator (ilp@hera.eecs.berkeley.edu) 510.643-6691, 643-6694 fax ============ INTRODUCTION ============ The development of high-quality software is a difficult, multifaceted problem. Our research in software systems aims to advance state-of-the-art software development. The areas we are studying include languages used to specify computations, interactive environments for the development, description, and maintenance of software, methods for translation of higher-level languages to target machine code, runtime systems to provide efficient execution and debugging, and techniques to teach and support problem-solving in programming. Beyond the traditional attention to sequential computing, our research increasingly focuses on massively parallel computing. We are designing and building systems to support the creation of software and the communication of ancillary technical information. Ensemble, an outgrowth of the language-based Pan editing system and the VorTeX document-development system, integrate facilities for construction and presentation of text, programming languages, and multimedia documents. Ensemble uses programming language notions to formally specify document structure and appearance; high-quality formatting enhances the understanding of program presentations. To speed the development cycle for programs, formatted text and other document types, Ensemble uses an incremental approach. Syntactic and semantic analysis, along with translation of the document, are dynamically recomputed only for the edited portions. Our research in Ensemble includes work on general-purpose modules such as the Cleaver system for specifying incremental compilers, and the Colander system for static semantics checking, as well as specific incremental analyzers for C and Fortran. A major theme of our programming language research is the expression of parallel computation at a high level, thereby freeing the programmer from details of the machine architecture. Ongoing work in this area includes FIDIL (a language for scientific applications), pSather (a parallel object-oriented language), ID (a non-strict implicitly-parallel language), and a version of Lisp with extensions for parallel processing. Since parallel processing applications require performance, high-level languages must provide expressiveness without sacrificing efficiency. At a lower level closer to the machine, Split-C provides a small set of extensions to C and serves as both a user language and a compiler target. Our parallel language efforts also encompass compilation and optimization of programs, as well as the design and implementation of runtime systems. For parallel compilation, we study the advanced uses of symbolic analysis, type analysis, dependence analysis, and annotations to translate and optimize explicitly-parallel code. Runtime systems under study include basic services such as lightweight thread scheduling, load balancing, global naming, and data structure libraries such as Multipol, the pSather libraries, and the Lisp toolbox. Our research necessarily involves a significant effort in parallel applications development, often in collaboration with researchers from other departments. In the area of teaching, software development requires programming and problem-solving skills attainable only by a significant educational investment. Our research in developing effective methods for teaching programming and reasoning skills incorporates problem-solving methods used by experts with an interactive Hypermedia form for supporting instruction.