Zum Inhalt springen

How Would You Type-Check 30 Million Lines of PHP? (with Julien Verlaguet)

25.09.2026 · 2 Std. 22 Min.

Shownotes

How would you manage 30 million lines of PHP? You can't rewrite it - you'd be fired long before you delivered. That was the problem facing Facebook around 2011, and their answer was to add a type system, giving birth to the Hack language. But adding types to PHP turned out to be the easy part. The hard part was building a type checker that developers used to "edit, save, refresh" would actually tolerate. So how do you type-check tens of millions of lines of code fast enough that nobody notices?

Julien Verlaguet co-designed Hack at Facebook, and has spent the fifteen years since chasing a better way to build incremental systems. We start with the internals of Hack's language server - forked OCaml workers, a shared immutable heap, lock-free dependency tracking, and the months spent hunting non-deterministic bugs. From there we follow the thread to Skip, a language designed around tracking mutability in the type system, with stops at why Haskell's monads and "reactive Java" didn't fit, functors vs type classes, and Skip's bang operator for working with immutable objects. Then it's on to the Skip reactive framework: eager vs lazy collections, a garbage collector without long pauses, a reactive SQL database that didn't find a market, TypeScript bindings, and Skipper, an AI coding agent built on a sound version of TypeScript.

If you're interested in compilers, language design, or building real-time systems that stay fast as they grow, Julien has plenty of hard-won lessons to share.

---

Support Developer Voices on Patreon: https://patreon.com/DeveloperVoices

Support Developer Voices on YouTube: https://www.youtube.com/@DeveloperVoices/join

SkipLabs: https://skiplabs.io/

Skip Framework Docs: https://skiplabs.io/docs

Skip on GitHub: https://github.com/SkipLabs/skip

Skiplang: https://skiplang.com/

Skipper Launch Announcement: https://skiplabs.io/blog/press_release

Hack: https://hacklang.org/

HHVM: https://hhvm.com/

OCaml: https://ocaml.org/

OCaml Functors: https://ocaml.org/docs/functors

Haskell: https://www.haskell.org/

Clojure: https://clojure.org/

Scala Implicit Parameters: https://docs.scala-lang.org/tour/implicit-parameters.html

Salsa (Incremental Computation for Rust): https://github.com/salsa-rs/salsa

ReactiveX: https://reactivex.io/

SQLite: https://www.sqlite.org/

TPC-H Benchmark: https://www.tpc.org/tpch/

PostgreSQL: https://www.postgresql.org/

PostgreSQL NOTIFY: https://www.postgresql.org/docs/current/sql-notify.html

Server-Sent Events: https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events

JavaScript Proxy Objects: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy

Doxygen: https://www.doxygen.nl/

SKDB and Reactive Databases (Materialized View): https://materializedview.io/p/skdb-reactive-databases-julien-verlaguet

Julien on LinkedIn: https://www.linkedin.com/in/julien-verlaguet-b5710a20/

Julien on X: https://x.com/JulienVerlaguet

Kris on Bluesky: https://bsky.app/profile/krisajenkins.bsky.social

Kris on Mastodon: http://mastodon.social/@krisajenkins

Kris on LinkedIn: https://www.linkedin.com/in/krisjenkins/

Alle Folgen von Developer Voices

Einstellungen

Darstellung

Sprache

Bestimmt, welche Sender dir auf der Startseite zuerst gezeigt werden.

Verlauf

Zuletzt gehörte Sender und Folgen und deine letzten Suchen liegen nur in diesem Browser.

Hinweise

Ein kurzer Hinweis, wenn ein Podcast, dem du folgst, eine neue Folge hat. Einzelne Podcasts stellst du über die Glocke auf ihrer Seite ab.

Konto

Favoriten speichern – in der App und auf der Website.

Tastenkürzel

/
Suche öffnen
Leertaste
Abspielen oder anhalten
← →
Im Player: 15 s zurück, 30 s vor (Folgen) · im Regal: nächste Kachel
↑ ↓
Im Regal: Ziel innerhalb der Kachel
Pos1 / Ende
Im Regal: erste bzw. letzte Kachel
Esc
Fenster oder Menü schließen
?
Diese Übersicht
Läuft gerade

Zur Senderseite

Als Nächstes

    Folgen mit „Als Nächstes“ vormerken – sie laufen nach der aktuellen Folge.