• Stars
    star
    170
  • Rank 223,357 (Top 5 %)
  • Language
    JavaScript
  • License
    BSD 3-Clause "New...
  • Created over 7 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A JS-to-JS compiler that makes it easier to build Web IDEs and compile to JS.

Stopify Build Status

Stopify is a JavaScript-to-JavaScript compiler that makes JavaScript a better target language for high-level languages and web-based programming tools. Stopify enhances JavaScript with debugging abstractions, blocking operations, and support for long-running computations.

Suppose you have a compiler C from language L to JavaScript. You can apply Stopify to the output of C and leave C almost entirely unchanged. Stopify will provide the following features:

  1. Stopify will support long-running L programs without freezing the browser tab. In particular, programs can access the DOM and are not limited to Web Workers.

  2. Stopify can pause or terminate an L program, even if it is an infinite loop.

  3. Stopify can set breakpoints or single-step through the L program, if C generates source maps.

  4. Stopify can simulate an arbitrarily deep stack and proper tail calls. This feature is necessary to run certain functional programs in the browser.

  5. Stopify can simulate blocking operations on the web.

We have tested Stopify with ten languages: (1) C++, (2) Clojure, (3) Dart, (4) Java, (5) JavaScript, (6) OCaml, (7) Pyret, (8) Python, (9) Scheme, and (10) Scala. Some of these are available on the Stopify demo page (www.stopify.org) and the rest are coming soon.

To learn how to use Stopify in your own project, see the Stopify Wiki.

For a technical overview of Stopify, see our PLDI 2018 paper Putting in All the Stops: Execution Control for JavaScript.

More Repositories

1

10PL

10 papers that all PhD students in programming languages ought to know, for some value of 10
885
star
2

MultiPL-E

A multi-programming language benchmark for LLMs
Python
183
star
3

hopl-s2017

History of Programming Languages, Spring 2017
TeX
127
star
4

PromiseKeeper

Finding Broken Promises in Asynchronous JavaScript Programs
JavaScript
57
star
5

augur

Performant taint analysis for Node.js
JavaScript
48
star
6

CanItEdit

Can It Edit? Evaluating the Ability of Large Language Models to Follow Code Editing Instructions
Python
34
star
7

Ocelot

An IDE for JavaScript, without the "bad parts".
TypeScript
30
star
8

website

Source for PRL website
Racket
17
star
9

gradual-typing-performance

Racket
10
star
10

softscheme

Andrew Wright's soft type system for R4 Scheme
Scheme
6
star
11

TypeWeaver

Artifact for the ECOOP 2023 paper: Do Machine Learning Models Produce TypeScript Types that Type Check?
TypeScript
5
star
12

ElementaryJS

JavaScript without the sharp edges
TypeScript
4
star
13

gtp

NSF grant website
HTML
3
star
14

nuprl.github.io-archive

Build artifacts for prl.ccs.neu.edu - DON'T MAKE CHANGES HERE - go to
HTML
3
star
15

retic_performance

Performance evaluation of Reticulated Python
Racket
3
star
16

tag-sound

Source for "A Spectrum of Type Soundness and Performance", ICFP 2018
Racket
3
star
17

jankscripten

Rust
2
star
18

prl-seminar-junior

PRLSeminar, Junior: information, materials, schedule
2
star
19

TypeWhich

Customizable, solver-based type migration for the gradually-typed lambda calculus.
Rust
2
star
20

gfd-oopsla-2019

Paper, proofs, and code for "Complete Monitors for Gradual Types"
TeX
1
star
21

wimpl

Rust
1
star
22

formalizations-in-agda

1
star
23

fsp-benchmarks

1
star
24

softscheme-web

Scheme
1
star
25

prl-website

The website renderer for the Programming Research Laboratory at Northeastern University
Scheme
1
star