Reading in 2025
Jan 2025
I am a software engineer interested in design and implementation of programming languages, compilers, runtime systems, low-level and systems programming, performance optimization. I occasionally give talks about these topics
Currently, I work at Google as an overall technical lead for the Dart programming language. I joined the team in 2012 to design and implement a speculative optimizing JIT in the Dart VM. The compiler pipeline that we have created later became the foundation for Dart's native AOT compiler.
In 2016 I had a brief stint at DeepMind maintaining LuaJIT for them.
Before joining Dart I was part of the V8 JavaScript engine team at Google. Here I contributed to Crankshaft and efforts to modernize V8's GC. I have been involved in OilPan - effort to replace reference counting based memory management in Blink with an precise-on-heap mark-and-sweep GC.
I started my carrier working on Excelsior JET a proprietary Java VM with an AOT compiler.
Jan 2025
Dec 2024
Taking a look at a viral loops microbenchmark which like many other similar microbenchmarks does not measure anything useful or insightful. Nov 2024
Feb 2023
Are fixed-length lists really 43 times faster to allocate than growable ones? Jan 2021
Mozilla sped up the source-map library by rewriting its core in Rust and compiling it to WASM. I am taking a look at JavaScript version in an attempt to make it faster. Feb 2018
Is dart:mirrors really to blame for slow JSON deserialization?
Jan 2017
Why is String.substring slower in Dart VM than in V8, and what does it have
to do with less_dart being slow?
Nov 2016
Nov 2015
A Russian-language digest of my week running the @jsunderhood Twitter account, answering questions about V8 internals.
Apr 2015
Trying to understand why HotSpot's C2 turned one loop into three led me to build Saga, a toy browser tool that rebuilds a CFG and an SSA IR from disassembly to make it readable. Mar 2015
What do monomorphic, polymorphic and megamorphic actually mean? A tour of how inline caches collect type feedback and how V8's optimizing compiler uses it, and why too many shapes at one call site hurt performance. Jan 2015
Does caching array.length before a loop make it faster?
Dec 2014
Jul 2014
I am dissecting yet another jsPerf which produces confusing results. Feb 2014
Jan 2014
Another exploration of misleading jsPerf results: this time prototype methods vs closures attached directly to the object. Aug 2013
A simple jsPerf comparing i * i to Math.pow(i, 2) leads us down the rabbit hole of V8's idiosyncrasies.
Apr 2013
Mar 2013
Presenting a browser-based tool for exploring IR and native code produced by V8 and Dart VM optimizing compilers. Feb 2013
What does accessing a string's length cost in V8? Dec 2012
About a little Dart tool I use to draw shaky diagrams for my posts. Nov 2012
Nov 2012
Dive into V8's implementation of variable capturing and how it can lead to unexpected performance effects and memory leaks. Sep 2012
Jun 2012
A pure JavaScript demonstration of how inline caches (aka ICs) work. Jun 2012
Apr 2012
Dec 2011
When writing performance sensitive JavaScript code you can resort to structuring it in a way that makes JS look like C. This way you can hit JS'es performance sweet spot, but the code itself will leave bitter aftertaste in your mouth. Nov 2011
V8 is scoring very low on a matrix multiplication microbenchmark, when using normal JS arrays. Can this be explained and rectified? May 2011
Crankshaft can finally optimize elementwise access to external arrays. This offers significant performance boost to node.js. Mar 2011