POPL 2017
Sun 15 - Sat 21 January 2017
Mon 16 Jan 2017 09:00 - 12:00 at Salle 112, Barre 44-54 - Flow (AM)
Mon 16 Jan 2017 14:00 - 17:00 at Salle 112, Barre 44-54 - Flow (PM)

Flow (https://flowtype.org) is a powerful type checker for JavaScript that we built at Facebook, with significant contributions from the open-source community. It is heavily used for web and mobile development at Facebook.

Flow’s overall goal is to maximize developer productivity without cramping the ``flow'' of normal JavaScript development. On the one hand, Flow uses advanced static analysis techniques to understand common JavaScript idioms precisely. This helps it find non-trivial bugs in code and provide code intelligence to editors without requiring significant rewriting or annotations from the developer. On the other hand, Flow uses aggressive parallelization and incrementalization to deliver near-instantaneous response times. This helps it avoid introducing any latency in the usual edit-refresh cycle of rapid JavaScript development.

In this tutorial, we will dive into the details of the design and implementation of Flow.

First, working through lots of examples we will explore various features of the type system, what type errors look like and how to fix them, and how Flow can provide useful information through the editor as you code.

Next, we will see how to set up Flow on your JavaScript codebase: how you can point Flow at your files, where you can find type definitions for libraries, and how you can strip out types to run your code.

Finally, we will take a whirlwind tour through Flow’s code itself, in OCaml: what types and rules look like internally, how type inference works, and how the system is architected to scale to millions of lines of code.

The tutorial will switch between slides and live coding, and we will provide instructions on how you can follow along on your laptops.

I created Flow, a type checker for JavaScript based on flow analysis whose distinguishing characteristics include mostly-automatic type checking for several common JavaScript idioms via advanced type inference, and near-instantaneous response times via aggressive modularization and parallelization. My current work involves leading the development of Flow at Facebook.

I briefly served as a member of ECMA TC39, the de-facto JavaScript design committee. During that time, I explored the design of features such as shared-memory concurrency control, and the implementation of advanced compilation techniques such as profile-guided type inference, in the context of JavaScript.

While at Adobe, I led the design of ActionScript 4, a significant re-implementation of the source and bytecode languages underlying Flash to target high-performance gaming. I drove research on future versions of ActionScript, including features such as generics and transactions.

Mon 16 Jan

Displayed time zone: Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna change