Semantics of Asynchronous JavaScript

Matt Loring
Mark Marron
Daan Leijen
Proceedings of the 2017 Symposium on Dynamic Languages, pp. 51-62 (to appear)

Abstract

The Node.js runtime has become a major platform for developers
building cloud, mobile, or IoT applications using JavaScript. Since
the JavaScript language is single threaded, Node.js programs
must make use of asynchronous callbacks and event loops managed
by the runtime to ensure applications remain responsive. While
conceptually simple, this programming model contains numerous
subtleties and behaviors that are defined implicitly by the current
Node.js implementation. This paper presents the first comprehensive
formalization of the Node.js asynchronous execution model
and defines a high-level notion of async-contexts to formalize
fundamental relationships between asynchronous events in
an application. These formalizations provide a foundation
for the construction of static or dynamic program analysis
tools, support the exploration of alternative Node.js event
loop implementations, and provide a high-level conceptual
framework for reasoning about relationships between the
execution of asynchronous callbacks in a Node.js application.