Next: Scientific Computing Up: Research Areas in Computer Science Previous: Artificial Intelligence

Programming Languages and Systems

Systems research at Yale aims to demonstrate practical high-performance programming environments. Programmers need environments that help them build understandable, robust programs which are reusable and run efficiently on diverse computer architectures. We approach this problem from several directions including language design, compiler implementation, run-time systems, and hardware organization.

One approach to achieving high-quality programming environments is via high-quality programming languages. Several programming languages developed at or associated with the department (in particular Haskell, Linda, and Standard ML) have achieved worldwide currency, reflecting the department's leadership in the areas of functional programming and parallel computing. Haskell is a purely functional programming language in which programs are written in a highly mathematical, declarative notation, facilitating the use of formal methods and its use as both a prototyping language and an executable specification language. Linda is a coordination language based on a shared, associative object memory, facilitating its use in distributed and ensemble computing; efficient Linda implementations exist on most asynchronous parallel architectures, and the system sees increasingly widespread use as a production programming vehicle.

Recent progress has demonstrated that modern type-safe languages can be implemented efficiently and used in systems and application programming. The results are smaller, better structured, and easier to maintain systems. Type-safe languages are also ideal for many emerging applications such as extensible operating systems, code migration across the internet, scripting, and multimedia programming. For example, type safety and system-wide garbage collection may allow future computer systems to utilize system resources more efficiently and reduce drastically the copying and protection boundary switching--a major bottle-neck between fast processors and networks in today's distributed systems. Applications of this software technology include evolutionary software development, the design and implementation of modern extension languages, and secure internet programming.

Hardware support can sometimes provide an essential performance boost for programming systems. Computer architecture research at Yale focuses on mechanisms for achieving high performance for a wide variety of programs. We study mechanisms for running traditional C programs in parallel, as well as for running higher-level languages such as Haskell. Such mechanisms include hardware support for very-fine-grained (instructional-level) parallelism, and fast interprocessor communication. By placing just the right mechanisms in just the right place in the hardware-software interface, a wider variety of programming languages and programming styles can be accommodated efficiently.

On a larger scale, software ensemble research at Yale is the study of programs that are built out of many separate, coordinated activities, with an emphasis on recognizing and understanding the properties that all such systems share, versus the more widespread practice of dividing the field into intellectually disjoint sub-areas. Ensemble computing includes the study of (1) parallel programs, which focus many computers on a single problem in order to solve it faster, (2) distributed programs, which attempt to integrate in some sense many separate, autonomous computers, (3) ensembles that include time- instead of space-separated activities, which raise file system and database-like issues, and (4) the relationship between software ensembles and naturally occurring ones, as for example in economic, biological, or physical systems. All of these areas pose both theoretical and pragmatic questions. The search for a formal (or at any rate precise) definition of "coordination language," and the development of "information superhighway" applications (for example "lifestreams," which replace conventional file and window system interfaces, and "mirror worlds," software microcosms of real-world organizations) are new focuses of the software ensemble research effort.

Faculty members in the Programming Languages and Systems area are David Gelernter, Dana Henry, Paul Hudak, Bradley Kuszmaul, and Zhong Shao. Nick Carriero, John Peterson and Valery Trifonov are Research Scientists.


Next: Scientific Computing Up: Research Areas in Computer Science Previous: Artificial Intelligence
Graduate Handbook Contents
Yale Computer Science Department Homepage