Discover the future of software from the people making it happen.Listen to some of the smartest developers we know talk about what they're working on, how they're trying to move the industry forward, and what you can learn from it. You might find the solution to your next architectural headache, pick up a new programming language, or just hear some good war stories from the frontline of technology.Join your host Kris Jenkins as we try to figure out what tomorrow's computing will look like the best way we know how - by listening directly to the developers' voices.
How Would You Type-Check 30 Million Lines of PHP? (with Julien Verlaguet)
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/