Programming languages are the main vehicle for man-machine communication. They provide a way to express an algorithm as a program and impact the way we think of a computer system. Several languages developed at or associated with the department (in particular Haskell, ML, and Linda) have achieved worldwide currency, reflecting the department's leadership in the areas of functional programming and parallel computing. Parallel languages such as Linda are tools for building programs that do many things simultaneously; functional languages such as Haskell and ML provide a mathematical approach to programming based on a view of a program as a set of simple equations. Applications of programming language research include graphics and animation, networking, computer music, robotics, graphical user interfaces, and systems programming.
Two particular areas of study are formal methods and software ensembles. Formal methods emphasize the use of formal mathematics to ensure the correctness, reliability, and maintainability of complex software systems. At Yale the study of formal methods focuses on functional programming and related ideas such as computational logic, denotational semantics, type theory, category theory, and program transformation.
Software ensembles are programs that are built out of many separate, coordinated activities, with an emphasis on recognizing and understanding the properties that all such systems share. The search for a precise definition of ‘coordination language,’ and the development of internet applications are new focuses of the software ensemble project.
Faculty working in this area are David Gelernter, Paul Hudak, and Zhong Shao. Nick Carriero is a research scientist.