1000: Ben Titzer
Ben Titzer joins to talk about the history and future of WebAssembly, the design and implementation of V8’s TurboFan optimizing compiler, and the Virgil programming language. We also discuss bringing high-level language features to constrained hardware, the V8 team’s response to the Spectre and Meltdown side-channel attacks, and how to design high performance virtual machines.
Ben’s Site: https://s3d.cmu.edu/people/core-faculty/titzer-ben.html
Ben on LinkedIn: https://www.linkedin.com/in/ben-l-titzer-6b78584/
Ben on Twitter: https://x.com/TitzerBL
Show Notes
- Welcome Ben (00:02:34)
- MS-DOS (00:03:32)
- First Computer (00:04:06)
- DIMMs and SIMMs (00:04:38)
- Intel 386SX (00:04:45)
- MS-DOS 5 (00:04:48)
- BASIC (00:05:10)
- Batch Files (00:05:14)
- Jurassic Park Password Scene (00:05:20)
- Teach Yourself C Programming in 21 Days (00:05:54)
- C (00:06:19)
- Pascal (00:06:24)
- Python (00:06:28)
- Borland Turbo C++ for DOS (00:06:46)
- C++ (00:07:17)
- Earliest Programming Projects (00:07:29)
- Microsoft Encarta (00:07:46)
- Moving to Lower Levels of the Stack (00:08:54)
- Getting on the Internet (00:09:03)
- Assembly (00:09:18)
- Windows 95 (00:09:50)
- Designing First Programming Language (00:10:52)
- Exposure to Computer Science Before College (00:12:21)
- Decision to Study Computer Science (00:13:29)
- Purdue University (00:13:50)
- Java (00:14:22)
- Operating Systems Class (00:14:36)
- Compilers Class (00:15:08)
- Tony Hosking (00:15:27)
- Starting Undergraduate Research (00:15:44)
- Jan Vitek (00:16:08)
- OVM Project (00:16:15)
- Why Java? (00:16:48)
- The Benefits of Memory Safety (00:17:18)
- Java Virtual Machine (JVM) (00:17:45)
- Just-in-Time Compilation (JIT) (00:18:21)
- Portability of Java (00:19:02)
- James Gosling (00:19:57)
- Origins of Java (00:20:00)
- Robert Garner on the Microarch Club (00:20:40)
- Avrora Project (00:21:30)
- Aurora Borealis (00:21:51)
- Where Did the Name Avrora Come From? (00:22:00)
- Decision to go to Graduate School (00:22:41)
- Interning at Sun Microsystems (00:23:13)
- UCLA (00:23:25)
- Sun Labs (00:23:56)
- HotSpot VM (00:24:03)
- AVR Microcontrollers (00:24:42)
- Jens Palsberg (00:24:50)
- Sensor Networks (00:25:04)
- Deborah Estrin (00:25:14)
- IntelliJ (00:26:02)
- Cycle-Accurate Simulation (00:27:36)
- The Purpose of Sensor Networks (00:28:08)
- Smartdust (00:29:13)
- Power Requirements of Radios (00:29:29)
- The Virgil Programming Language (00:30:03)
- Virgil Academic Papers (00:31:00)
- Virgil: Objects on the Head of a Pin (00:31:22)
- Design Decisions in Virgil (00:31:28)
- Static vs. Dynamic Memory Allocation (00:31:54)
- Compile-Time Initialization (00:32:41)
- IBM Internship (00:34:06)
- ExoVM (00:34:13)
- David Bacon (00:34:18)
- Garbage Collection (GC) (00:34:23)
- J9 Configuration System (00:35:09)
- Profile-Guided Optimization (PGO) (00:36:11)
- Optimizing Code and Data Together (00:36:20)
- Graal Native Image (00:36:53)
- Bringing High-Level Language Concepts to Microcontrollers (00:37:11)
- Language Runtimes (00:38:11)
- Eliminating Features with Fixed Costs (00:39:04)
- Java Object Headers (00:39:43)
- Type Casting (00:40:13)
- Virtual Dispatch (00:40:15)
- Reference Compression (00:40:48)
- Pointer Analysis (00:42:34)
- ROM-ization (00:42:53)
- Reachable Members Analysis (00:43:26)
- Dead-Code Elimination (DCE) (00:43:44)
- Linker Deduplication (00:43:46)
- Whole Program Optimization (00:44:43)
- Devirtualization (00:45:56)
- Evolution of the Virgil Programming Language (00:47:08)
- Type Parameters (00:47:28)
- Virgil III (00:47:41)
- Compiler Backends (00:48:02)
- Attributes of Virgil III (00:48:39)
- Garbage Collection in Systems Languages (00:48:46)
- Pointers to the Stack (00:49:43)
- Memory Mapping (00:49:49)
- Maxine VM (00:50:05)
- Adoption of Virgil (00:50:30)
- Wizard WebAssembly Engine (00:51:11)
- Application Binary Interface (ABI) (00:52:09)
- popcnt (00:52:26)
- Single Instruction Multiple Data (SIMD) (00:52:32)
- Memory Protection (00:53:26)
- Signals (00:53:27)
- System Calls (Syscalls) (00:53:31)
- Goals for Virgil (00:55:07)
- Rust (00:55:56)
- Zig (00:55:57)
- Decision to Join Google (00:56:47)
- Ken Russell (00:57:17)
- WebGL (00:57:29)
- Oracle Acquisition of Sun (00:57:39)
- Joining v8 Team (00:58:30)
- Crankshaft (00:58:41)
- Lars Bak (00:58:56)
- Kasper Lund (00:58:58)
- Daniel Clifford (00:59:15)
- Hannes Payer (00:59:18)
- JavaScript (00:59:53)
- Dynamic Scoping (01:00:13)
- eval() (01:00:16)
- Prototypes (01:00:19)
- Downsides of Crankshaft (01:01:41)
- Deoptimization (01:02:10)
- Folding Branches (01:02:18)
- Basic Blocks (01:02:27)
- Register Allocator (01:02:34)
- Thomas Wuerthinger (01:03:00)
- C1 Compiler (HotSpot Client Compiler) (01:03:11)
- C1X Compiler (01:03:19)
- Christian Wimmer (01:03:36)
- Linear Scan Register Allocation for the Java HotSpot Client Compiler (01:03:38)
- C2 Compiler (HotSpot Server Compiler) (01:04:44)
- Single Static Assignment (SSA) (01:05:05)
- Sea of Nodes (01:05:11)
- Cliff Click (01:05:24)
- Intermediate Representation (IR) (01:05:49)
- How a Sea of Nodes Compiler Works (01:06:00)
- Forward Data Flow Optimizations (01:08:38)
- Strength Reduction (01:08:45)
- How Common is Sea of Nodes? (01:10:05)
- LLVM (01:10:15)
- Control Flow Graph (CFG) (01:10:20)
- Downsides of Sea of Nodes (01:10:47)
- Speculative Optimization (01:11:26)
- Impact on Team Dynamics (01:12:49)
- Speed of Sea of Nodes Compilers (01:14:35)
- Swapping out Crankshaft for TurboFan (01:15:37)
- Firefox (01:16:17)
- JavaScript Core (01:16:22)
- Edge (01:16:25)
- asm.js (01:17:01)
- Collaborating with Mozilla on WebAssembly (01:18:48)
- Luke Wagner (01:18:55)
- Native Client (NaCl) (01:19:30)
- JF Bastien (01:19:36)
- Filip Pizlo (01:19:51)
- What Makes WebAssembly Portable and Performant? (01:20:24)
- WebAssembly Binary Format (01:23:20)
- Structured Control Flow (01:24:01)
- The “One Weird Trick” That Makes WebAssembly Memory Fast (01:24:55)
- Memory Management Unit (MMU) (01:25:26)
- Passing Data In and Out of WebAssembly Modules (01:26:01)
- Component Model (01:26:21)
- Interface Types (01:27:52)
- Mapping Virtual Instruction Sets to Hardware (01:29:05)
- Stack Machine (01:29:48)
- Why are Stack Machines Popular for Virtual Machines? (01:30:17)
- Spectre and Meltdown (01:31:39)
- Branch Prediction (01:33:01)
- Spectre Variant 2 (01:35:46)
- Spectre Variant 4 (01:36:01)
- Process Level Isolation (01:36:41)
- Performance Impact of Software Mitigations (01:38:18)
- Tradeoffs Between Security and Efficiency (01:38:30)
- Decision to Return to Academia (01:40:03)
- WebAssembly Research Center (01:40:17)
- Carnegie Mellon University (01:40:18)
- Vision for WebAssembly (01:42:36)
- Narrow Waist Architecture (01:43:22)
- Microkernel (01:45:50)
- CHERI (01:46:00)
Transcript
Coming soon.