HNHacker News
TopNewBestAskShowJobs

avik

25 karma · joined March 20, 2014

Creator of Flow, a static type checker for JavaScript.

Software engineer @ Facebook. Author of several research publications in the areas of programming languages and computer security.

submissionscomments
avik··on React Native is now open source
It is with Flow.
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
Still early days but the reception has been strongly positive. We may be a biased bunch but we like our code mostly statically typed with the flexibility provided by dynamically typed languages. A large part of this culture is due to the immense internal success of Hack (http://hacklang.org/).
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
The source also has an emacs plugin, named flow-types.el
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
It does care about prototypes. So it checks for inconsistencies between methods added to a prototype and their uses. The tradeoff is that for dynamically added properties, it doesn't always remember where they are defined and where they remain undefined (it knows they are defined "somewhere").
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
Haha, yeah Hacker News didn't treat me well yesterday, so I'm trying to go through questions now and reply to them. :) Thanks for noticing!
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
If you can feed inferred static types to something like Google Closure Compiler, you do get performance benefits.

Also, if you're code is implicitly statically typed (as checked by Flow) you will likely hit all the right optimizations in the underlying JavaScript VM.

avik··on Facebook Launches Flow, Static Type Checker for JavaScript
Yes, so the conclusion one might draw is that if your code is implicitly typed, it will run fast as well as probably do well when run through a static type checker.
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
One obvious thing to try is to use Flow's type inference to emit GCC annotations and see whether those optimizations kick in. (Of course, Flow can also try to replicate whatever GCC does, but that will take some time. No reason not to, though.)
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
Yes, it does. You can define object types like { x: number; y: string }, tuple types like [number, string], function types like (x:number) => string, etc.
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
We actually built this because we write a lot of JavaScript at Facebook, and we need a tool like Flow. So yes, we worked on it full-time, with "funding": our developers like to move fast, Flow helps them do that.

(It's a different matter that we would have done this on our free time anyway, because it's so much fun!)

avik··on Facebook Launches Flow, Static Type Checker for JavaScript
We have some basic editor support, more is coming soon. Flow exposes several commands that are useful through an editor, like type-at-pos (give it a position, it gives you back the inferred type), suggest (give it a file, it dumps out an annotated file), autocomplete (gives you suggestions at a given position), etc. Also, we require annotations at module boundaries, so you're modules are going to have well-typed interfaces that serve well for both documentation and stability.
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
The implementation is heavily influenced by Pottier's work on subtyping + inference. https://hal.inria.fr/file/index/docid/73205/filename/RR-3483...

Also, some techniques from Typed Racket (occurrence typing): http://www.ccs.neu.edu/racket/pubs/popl08-thf.pdf

Many other papers have influenced the design in some way or the other. For example, Abadi/Cardelli's theory of objects.

avik··on Facebook Launches Flow, Static Type Checker for JavaScript
No, instead of complaining about 'x' having the 'any' type, Flow will actually try to infer a static type for 'x'. So in the best case there would be no errors (and in the worst case there would be actual errors to fix).
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
Yes, OCaml.
avik··on Facebook Launches Flow, Static Type Checker for JavaScript
Hi, I'm Avik Chaudhuri, I'm one of the authors of Flow, and I'll be happy to answer questions.