- Logic, programming, and type systems
- Software Engineering Research
- Software Testing and Debugging Techniques
- Advanced Software Engineering Methodologies
- Scientific Computing and Data Management
- Formal Methods in Verification
- Interactive and Immersive Displays
- Advanced Database Systems and Queries
- Teaching and Learning Programming
- Software System Performance and Reliability
- Security and Verification in Computing
- Parallel Computing and Optimization Techniques
- Augmented Reality Applications
Carnegie Mellon University
2016-2021
Live programming environments aim to provide programmers (and sometimes audiences) with continuous feedback about a program's dynamic behavior as it is being edited. The problem that languages typically assign meaning only programs are complete, i.e. syntactically well-formed and free of type errors. Consequently, live presented the programmer exhibits temporal or perceptive gaps. This paper confronts this "gap problem" from type-theoretic first principles by developing semantics for...
Structure editors allow programmers to edit the tree structure of a program directly. This can have cognitive benefits, particularly for novice and end-user programmers. It also simplifies matters tool designers, because they do not need contend with malformed text.
Text editing is powerful, but some types of expressions are more naturally represented and manipulated graphically. Examples include that compute colors, music, animations, tabular data, plots, diagrams, other domain-specific data structures. This paper introduces live literals, or livelits, which allow clients to fill holes like these by directly manipulating a user-defined GUI embedded persistently into code. Uniquely, livelits compositional: livelit can itself embed spliced expressions,...
We developed model-based adaptation, an approach that leverages models of software and its environment to enable automated adaptation. The goal our is build long-lasting systems can effectively adapt changes in their environment.
Programming language definitions assign formal meaning to complete programs. Programmers, however, spend a substantial amount of time interacting with incomplete programs -- holes, type inconsistencies and binding using tools like program editors live programming environments (which interleave editing evaluation). Semanticists have done comparatively little formally characterize (1) the static dynamic semantics programs; (2) actions available programmers as they edit inspect (3) behavior...
Programming language definitions assign formal meaning to complete programs. Programmers, however, spend a substantial amount of time interacting with incomplete programs - holes, type inconsistencies and binding using tools like program editors live programming environments (which interleave editing evaluation). Semanticists have done comparatively little formally characterize (1) the static dynamic semantics programs; (2) actions available programmers as they edit inspect (3) behavior...
Structure editors allow programmers to edit the tree structure of a program directly. This can have cognitive benefits, particularly for novice and end-user programmers. It also simplifies matters tool designers, because they do not need contend with malformed text. paper introduces Hazelnut, editor based on small bidirectionally typed lambda calculus extended holes cursor . Hazelnut goes one step beyond syntactic well-formedness: its actions operate over statically meaningful incomplete...
This paper develops a dynamic semantics for incomplete functional programs, starting from the static developed in recent work on Hazelnut. We model programs as expressions with holes, empty holes standing missing or types, and non-empty operating membranes around type inconsistencies. Rather than aborting when evaluation encounters any of these some existing systems, proceeds tracking closure each hole instance it flows through remainder program. Editor services can use information closures...