Programming Languages and Software Systems
The field of programming languages is concerned with concepts, notations, methodologies, tools, and environments for the construction of robust, efficient, maintainable, and evolvable software. Researchers in this field are interested in paradigms such as object-oriented, concurrent, and declarative programming; domain-specific languages; distributed and network programming issues; methodologies for large-scale development of software; and formal foundations (semantics, analysis, verification, testing, etc.) for all aspects of software engineering and programming languages.
Laboratories and Research Groups
- Language Research Group
Director: Bharat Jayaraman
The current focus of the group is on languages that support high-level, declarative, and visual modeling of complex systems. Research projects are in the areas of object-oriented modeling, constraint-based design, interactive program visualization, and domain-specific languages for applications in engineering and organizational modeling. In previous research, we have developed the theoretical foundations and experimental systems for a family of set-oriented programming languages.
The Language Research group is developing interactive visualization techniques for procedural and object-oriented programs. Our tools allow the user to visualize clearly the run-time state of programs with recursion, higher-order functions, dynamic objects, inheritance, and so forth. A novel feature of the tools is that they support forward as well as reverse execution. They are a valuable aid for teaching and visual debugging.
Also in development is a novel object-oriented paradigm, called Constrained Objects (Cob), for compositional modeling of complex systems, especially engineering structures such as gears, trusses, and circuits. The environment provides tools for authoring the classes of constrained objects using a new variation of UML, called CUML (Constraint-based UML); visual interfaces that are customized to the application domain, translators for mapping diagrams into executable Cob programs, and a computational engine featuring constraint satisfaction, optimization, and relaxation for executing programs. Together, the modeling and execution tools offer an improved approach to computer-aided design and simulation.