hack for hhvm converting facebook julien verlaguet software engineer

28
Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Upload: patricia-gallagher

Post on 14-Dec-2015

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Hack for HHVMConverting Facebook

Julien VerlaguetSoftware Engineer

Page 2: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Facebook▪ A large PHP codebase (> 10M lines)

▪ Thousands of engineers

▪ Performance matters! (HipHop, HHVM)

▪ The development cycle is fast: we push twice a day!

▪ PHP is a good technical choice to iterate quickly

Page 3: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

PHP: how it all started!

FAST

Page 4: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer
Page 5: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Hack▪ A statically typed language for HHVM

▪ Compatible with PHP:

▪ Interoperates with no overhead

▪ Same representation at runtime

▪ Instantaneous type-checking

▪ Designed for incremental adoption:

▪ Gradual typing

▪ Allows different “modes” (strict, partial, decl)

Page 6: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

A simple example

Page 7: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Hack Types▪ All PHP types: int, MyClassName, array

▪ Nullable: ?int, ?MyClassName

▪ Mixed: anything (careful)

▪ Tuples: (int, bool, X)

▪ Closures: (function(int): int)

▪ Collections: Vector<int>, Map<string, int>

▪ Generics: A<T>, foo<T>(T $x): T

▪ Constraints: foo<T as A>(T $x): T

Page 8: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Hack▪ We knew we wanted an IDE from day one:

▪ Usually, the IDE and the type-checker are distinct entities

▪ Hack is both a type-checker and an IDE

▪ The type-checker is a server (hh_server):

▪ The server type-checks all the files

▪ Keeps track of the dependencies

▪ Recomputes types when something changed

Page 9: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Question

Can we convert millions of lines?

Page 10: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Prerequisites for conversion▪ Address concerns regarding static-typing

▪ Have a backup plan

▪ Zero friction for developers (they can always bail out)

▪ Automated conversion

Page 11: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

The concerns▪ Too slow!

▪ Too verbose!

▪ Bad error messages!

▪ Not flexible enough!

Page 12: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Hack: you have nothing to lose!▪ Too slow!

▪ Response time < 200ms

▪ Too verbose!

▪ Types are inferred

▪ Bad error messages!

▪ Error messages tell you how to solve the problem

▪ Not flexible enough!

▪ It’s gradually typed

Page 13: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

When things go wrong?▪ We are always strictly MORE restrictive

▪ In the type-checker:

▪ Removing a type-annotation never introduces an error

▪ Removing a type-annotation never changes the behavior at runtime

▪ At runtime:

▪ We introduce new constructions distinct from the old ones

▪ We make old constructions more warn or fail

Page 14: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Different modes▪ <?hh // strict

▪ If all the code is strict then it’s sound

▪ <?hh

▪ Dynamic code is assumed to be correct

▪ <?hh // decl

▪ Don’t check the code, only consider definitions

▪ // UNSAFE

▪ Trust me: I am an engineer!

Page 15: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Gradual typing

Page 16: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Error messages

You can try it online: http://hacklang.org

Page 17: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

The rules▪ If the entire code is strict, the code is type-safe

▪ Adding an annotation should never force you to add another

▪ Removing an annotation should never introduce an error

▪ Simple mental model

▪ Be “dumb” by default

▪ Scale

Page 18: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Conversion strategy: tighten the belt▪ Convert everything to <?hh

▪ Add annotations gradually

▪ Build awareness

▪ More coverage for tools

▪ The problems:

▪ Gives a false sense of security

▪ Refactoring tools not really usable

Page 19: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Tighten the belt▪ A global type-inference system to “guess” annotations

▪ A monitoring system to detect mistakes

▪ Refactoring tools to remove (or harden) annotations

Page 20: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Where are we at?

Page 21: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Question: can we scale this?

Constant refactoring for language changes became a habit!

Page 22: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Let’s go back to the 90s

Page 23: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Release day (1999)

Page 24: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

What happened?▪ A cultural change (release early, release often)

▪ Tools (git, mercurial etc …)

▪ More code is visible (github etc …)

▪ What use to be painful became easy

▪ Thanks to a gradual process: every morning I “git rebase”

Page 25: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Can we do the same with programming languages?

Page 26: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

The Facebook conversion▪ Large enough / Small enough

▪ Lesson learnt, programmers must be able to choose:

▪ When (find the right time to upgrade)

▪ How much? (the upgrade process must be incremental)

▪ Where? (They can leave the parts that they don’t care about)

▪ Sometimes, the opposite is true, flip a switch (return types)

▪ Keep a simple mental model

▪ Controlling the code is a HUGE unfair advantage

Page 27: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

The future of Hack▪ Collaborate with the open-source community

▪ Tune the experience

▪ Provide more tools (IDE)

▪ Carry-on improving the language

▪ Make our own codebase more and more strict

Page 28: Hack for HHVM Converting Facebook Julien Verlaguet Software Engineer

Questions?