Putting in All the Stops: Execution Control for JavaScript
Samuel Baxter, Rachit Nigam, Joe Gibbs Politz, Shriram Krishnamurthi, and Arjun Guha

TL;DR
Stopify is a source-to-source compiler that enhances JavaScript with execution control features like stopping, debugging, and long-running computation support, improving browser stability and developer experience across multiple languages.
Contribution
It introduces Stopify, a novel compiler extension that adds execution control abstractions to JavaScript, compatible with existing compilers and supporting multiple programming languages.
Findings
Supports 10 languages with minimal compiler changes
Provides first IDE with debugging features for 8 languages
Achieves competitive performance with simpler implementation
Abstract
Scores of compilers produce JavaScript, enabling programmers to use many languages on the Web, reuse existing code, and even use Web IDEs. Unfortunately, most compilers inherit the browser's compromised execution model, so long-running programs freeze the browser tab, infinite loops crash IDEs, and so on. The few compilers that avoid these problems suffer poor performance and are difficult to engineer. This paper presents Stopify, a source-to-source compiler that extends JavaScript with debugging abstractions and blocking operations, and easily integrates with existing compilers. We apply Stopify to 10 programming languages and develop a Web IDE that supports stopping, single-stepping, breakpointing, and long-running computations. For nine languages, Stopify requires no or trivial compiler changes. For eight, our IDE is the first that provides these features. Two of our subject…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsParallel Computing and Optimization Techniques · Software Engineering Research · Logic, programming, and type systems
