Interpreters & VMs
Language interpreters, virtual machines, and runtime systems
Repositories
(8)bytecodealliance/wasmtime
dotnet/runtime
erlang/otp
nodejs/node
openjdk/jdk
python/cpython
ruby/ruby
v8/v8
Papers
(53)A contention adapting approach to concurrent ordered sets
Stateless model checking is a powerful method for program verification that, however, suffers from an exponential growth in the number of explored executions. A successful technique for reducing this number, while still maintaining complete coverage,...
A Stop-the-World Debugger for Erlang (and the BEAM)
Erlang and the BEAM are remarkable for their tracing capabilities and the type of troubleshooting this enables on live production systems. At other stages of the development cycle, though, a traditional debugger is arguably more natural and convenien...
Compacting garbage collection with ambiguous roots
Many modern garbage collectors [4] recover space by copying. Using an initial "root" set of pointers which are stored in known locations, all accessible objects are copied into a "new space". Two of the attractive properties of such a collector are t...
Evaluating YJIT’s Performance in a Production Context: A Pragmatic Approach
Ruby is a dynamically-typed programming language with a large breadth of features which has grown in popularity with the rise of the modern web, and remains at the core of the implementation of widely-used online platforms such as Shopify, GitHub, Di...
Interprocedural Type Specialization of JavaScript Programs Without Type Analysis.
Previous work proposed lazy basic block versioning, a technique for just-in-time compilation of dynamic languages which we believe represents an interesting point in the design space. Basic block versioning is simple to implement, simple enough that ...
Lightweight, Modular Verification for WebAssembly-to-Native Instruction Selection
Language-level guarantees---like module runtime isolation for WebAssembly (Wasm)---are only as strong as the compiler that produces a final, native-machine-specific executable. The process of lowering language-level constructions to ISA-specific inst...
Mersenne twister: a 623-dimensionally equidistributed uniform pseudo-random number generator
A new algorithm called Mersenne Twister (MT) is proposed for generating uniform pseudorandom numbers. For a particular choice of parameters, the algorithm provides a super astronomical period of 2 19937 −1 and 623-dimensional equidistribution up to 3...
More scalable ordered set for ETS using adaptation
The Erlang Term Storage (ETS) is a key component of the runtime system and standard library of Erlang/OTP. In particular, on big multicores, the performance of many applications that use ETS as a shared key-value store heavily depends on the scalabil...
Simple and Effective Type Check Removal through Lazy Basic Block Versioning
Dynamically typed programming languages such as JavaScript and Python defer type checking to run time. In order to maximize performance, dynamic language VM implementations must attempt to eliminate redundant dynamic type checks. However, type infere...
Using Selective Memoization to Defeat Regular Expression Denial of Service (ReDoS)
Regular expressions (regexes) are a denial of service vector in most mainstream programming languages. Recent empirical work has demonstrated that up to 10% of regexes have super-linear worst-case behavior in typical regex engines. It is therefore no...
YJIT: a basic block versioning JIT compiler for CRuby
Ruby is a dynamically typed programming language with a large breadth of features which has grown in popularity with the rise of the modern web, and remains at the core of the implementation of many widely-used websites. CRuby, the default implementa...