Research
Coalizer: A Coalition Tool Combining Office and Policy Motivations of Political Parties
Robin Graichen, Eric Linhart, Christopher Schuster, Udo Heller, Andreas Müller
Journal of Information Technology and Politics (JITP). January 2021. London, UK.
IDVE: an Integrated Development and Verification Environment for JavaScript
Christopher Schuster, Cormac Flanagan
5th Edition of the Programming Experience Workshop (PX 2019). April 2019. Genoa, Italy.
However, the verification process for these annotations can become complex. Therefore, simple error messages may not be sufficient to help the programmer resolve verification issues. In order to improve the programming experience for verified programming, this paper presents IDVE, an integrated development and verification environment that lets users interactively inspect and debug verification issues. The goal of IDVE is to provide a development tool that assists users with program verification analogous to how interactive step-by-step debugging avoids manual 'printf debugging'. IDVE enables programmers to interactively manipulate assumptions and assertions of verification conditions with a novel verification inspector, and IDVE automatically generates tests that serve as executable and debuggable counterexamples.
In addition to presenting the approach and implementation of the integrated development and verification environment, we also conducted a user study with 18 participants to evaluate how the proposed features of the environment are perceived. Participants with and without prior experience with program verifiers had to solve a series of simple programming and verification tasks and answer an online survey. Features of IDVE were generally seen as helpful or potentially helpful but user interface design is an essential factor for their utility.
Towards Live Programming Environments for Statically Verified JavaScript
Christopher Schuster
PhD thesis. University of California, Santa Cruz. December 2018. Santa Cruz, CA, USA.
Programming environments assist users in both writing program code and understanding program behavior. A fast feedback loop can significantly improve this process. In particular, live programming provides continuous feedback for live code updates of running programs. This idea can also be applied to program verification. In general, verifiers statically check programs based on source code annotations such as invariants, pre- and postconditions. However, verification errors are often hard to understand, so programming environment integration is crucial for supporting the development process.
The research for this dissertation involved the implementation of esverify, a program verifier for JavaScript, as well as prototype implementations of multiple programming environments. These implementations demonstrate potential benefits and limitations of proposed solutions and enable empirical evaluation with case and user studies. Additionally, the proposed designs were formally defined in order to explain the core idea in a concise way and to prove properties independent of concrete specifics of existing systems and programming languages.
The resulting systems represent possible solutions in a vast design space with various contributions. The research on live programming showed that a programming model that separates event handling from output rendering enables not only live code updates but also runtime version control and programming-by-example. For program verification, esverify represents a novel approach for static verification of both higher-order functional programs and dynamically-typed programming idioms. esverify can verify nontrivial algorithms such as MergeSort and a formal proof in the Lean theorem prover shows that its verification rules are sound. Finally, a programming environment based on esverify supports inspection and live edits of verification conditions including step-by-step debugging of automatically generated tests that serve as executable counterexamples. As part of a user study, participants used these features effectively to solve programming tasks and generally found them to be helpful or potentially helpful.
esverify: Verifying Dynamically-Typed Higher-Order Functional Programs by SMT Solving
Christopher Schuster, Sohum Banerjea, Cormac Flanagan
Proceedings of the 30th Symposium on Implementation and Application of Functional Languages (IFL 2018). August 2018. Lowell, MA, USA.
Coalizer: A Coalition Tool Combining Office and Policy Motivations of Political Parties
Robin Graichen, Udo Heller, Eric Linhart, Andreas Müller, Christopher Schuster
European Consortium for Political Research General Conference (ECPR 2018). August 2018. Hamburg, Germany.
Live Programming by Example: Using Direct Manipulation for Live Program Synthesis
Christopher Schuster, Cormac Flanagan
LIVE workshop on live programming systems (LIVE 2016). July 2016. Rome, Italy.
Macrofication: Refactoring by Reverse Macro Expansion
Christopher Schuster, Tim Disney, Cormac Flanagan
Programming Languages and Systems: 25th European Symposium on Programming (ESOP 2016). April 2016. Eindhoven, NL.
Reactive Programming with Reactive Variables
Christopher Schuster, Cormac Flanagan
Constrained and Reactive Objects Workshop, MODULARITY Companion 2016 (CROW 2016). March 2016. Malaga, Spain.
Live Programming for Event-Based Languages
Christopher Schuster, Cormac Flanagan
Proceedings of the 2015 Reactive and Event-based Languages and Systems Workshop (REBLS '15). October 2015. Pittsburgh, PA.
A Light-Weight Effect System for JavaScript
Christopher Schuster, Cormac Flanagan
Proceedings of the 2015 Scripts to Programs Workshop (STOP '15). July 2015. Prague, CZ.
Traveling through Time and Code: Omniscient Debugging and Beyond
Christopher Schuster, Cormac Flanagan
Presented at the Future Programming Workshop (FPW '14). October 2014. Portland, OR.
RTI Compression for Mobile Devices
Christopher Schuster, Bipeng Zhang, Rajan Vaish, Paulo Gomes, Jacob Thomas, James Davis
Proceedings of the Sixth International Conference on Information Technology and Multimedia at UNITEN (ICIMu 2014). November 2014. Kuala Lumpur, Malaysia.
Reification of Execution State in JavaScript: Implementing the Lively Debugger
Christopher Schuster
Master thesis. University of Potsdam. April 2012. Potsdam, Germany.
We achieved execution state reification by interpreting JavaScript on top of the underlying JavaScript VM. This does not affect the runtime performance of Lively because the interpreter is only used for code that explicitly requires access to the execution state. Seamless transitions between natively executed and interpreted code enable on-demand debugging with breakpoints and stepping.
The implementation of this approach showed that closures and other JavaScript features like dynamic evaluation cause problems when both modes of execution work together. These problems were solved for Lively by restricting these language features but a general purpose cross-browser debugger is topic of future work.
Context-oriented Programming for Mobile Devices: JCop on Android
Christopher Schuster, Malte Appeltauer, Robert Hirschfeld
Proceedings of the Workshop on Context-oriented Programming (COP '11). July 2011. Lancaster, UK.
However, context information relevant for mobile applications is mostly defined by external events and sensor data rather than by code and control flow. To accommodate this, the JCop language provides a more declarative approach by pointcut-like adaptation rules.
In this paper, we explain how we applied JCop to the development of Android applications for which we extended the language semantics for static contexts and modified the compiler. Additionally, we outline the successful implementation of a simple, proof-of-concept mobile application using our approach and report on promising early evaluation results.