Strange Loop 2018
6 Years Of Dart (VM engineer perspective)

Dart might be the only contemporary programming language that changed its core principles so radically between two major versions. 8 years ago, in 2010, it was born as a dynamically typed programming language with optional static types - ideas of Strongtalk wrapped into familiar C-like syntax. A language destined to be executed in a native VM with an adaptive JIT compiler. Yet over the years Dart has evolved into language with a sound static type system, and is being deployed in contexts that require ahead-of-time compilation and prohibit JITing.

This talk focuses on the architecture of Dart Virtual Machine and how it followed the evolution of the Dart language, adapting to the new semantics and new execution environments, where users wanted to bring Dart to. We will look at how language design has to balance expressivity and elegance with optimizability and discuss how some language features open possibilities from new optimizations, while at the same time preventing some old optimizations from happening.

Dart Conf 2018
Making Dart Fast on Mobile

No matter whether you are developing or deploying your Flutter application it ends up running on the Dart VM. How does Dart VM run your code? Is there any difference between development and deployment configurations?

Learn about all the things Dart VM team is doing behind the scenes to ensure that your applications are fast and slim.

Google PhD Student Summit on Compiler & Programming Technology 2017
From JIT to AOT (...and back again)

When Dart was originally designed its designers assume that it will primarily execute in a VM with a JIT.

However these days Dart is actually primarily deployed in environments that require it to be compiled ahead of time to native code (mobile) or JavaScript (browser).

This talk covers Dart VM journey from JITing Dart to AOT compiling it and the lessons we learned on the way.

Google PhD Student Summit on Compiler & Programming Technology 2016
How we don't do things

Compiler conferences are always full with engineers and researchers happy to share how they do things.

This talk is a refreshing departure from the trend. I will take a look at my time working on V8, Dart VM and LuaJIT at Google and share with you how we did not do things and why that matters.

HolyJS 2016
Производительность JavaScript через подзорную трубу

Каждый день инженеры-компиляторщики по всему миру увлеченно стучат по своим клавиатурам разгоняя исполнение JavaScript в совершенно различных браузерах и даже на сервере.

Общественность, программирующая на JavaScript, однако же, часто отстает в своем понимании от стремительного прогресса, происходящего во внутренностях JS движков.

Этот доклад старается покрыть отставание и продемонстрировать, что знание этих самых внутренностей важно не только для написания быстрого JavaScript кода, но и просто для того, чтобы достоверно измерить разницу между "быстрым" и "медленным".

Virtual Machines Summer School 2016
What I learned from LuaJIT

This talk summarizes my experience from digging into LuaJIT 2.x sources while working as a compiler engineer for Google DeepMind.

This is not a deep insight into LuaJIT inner design, but rather a collection of choices made by original LuaJIT implementor which I find interesting and educational.

GOTO Amsterdam 2016
JavaScript Performance Through the Spyglass

JavaScript performance remains an area of focus for all major browser vendors.

Each day VM-engineers across the globe pump their expertise into JavaScript engines powering client and server-side code alike.

However our understanding of JavaScript engine internals does not always keep up with those internals.

This talk tries to rectify this lag and demonstrate that knowledge of implementation details is crucial not only to writing fast JavaScript code but even to simply measuring the difference between fast and slow.

GOTO Chicago 2015
Benchmarking JavaScript

JavaScript is everywhere. JavaScript VMs improve by leaps and bounds. Performance graphs are breaking through the ceilings of expectations.

And yet from time to time we still find ourselves wondering whether '===' is faster than '=='.

What is the right way to approach this question? Is this the question you should be asking to begin with?

We will take a look at some microbenchmarks written by JS developers and discover a violent clash between XIX century approach to benchmarking and XXI century virtual machines.

JFokus 2015 - VM Tech Summit
Patterns of VM Design

The popularity of dynamically typed programming languages has been skyrocketing in the past years. This success can be partially attributed to the advances in VM engineering enabling efficient execution of those languages.

Just like boilerplate of any enterprise application can be decomposed into infamous patterns of object oriented design, efficient virtual machines running dynamically typed languages seem to consist of reimplementations of common patterns of "VM design". These patterns often tread the thin line between efficiency, development time and maintainability.

This talk discusses the trade offs we encountered while building virtual machines for JavaScript and Dart programming languages.

Aarhus University — AWP 2014
V8
Overview of V8 compilation pipeline. Guest lecture at Aarhus University Advanced Web Programming course.
JSConf EU 2014
invokedynamic.js

The apple always falls down attracted by the gravity of the earth. It’s the law of physics. The function is never inlined if it’s source is bigger than 600 characters long. It’s a heuristic - a physical law of our dystopian cyber-world confined inside a JavaScript Virtual Machine.

Ever wanted to rebel against the sad immutability of the physics? Lets try to make functions fall upwards and inline all the apples.

In an ultimate attempt to create a space-time paradox that will rip our universe apart we will look at Java programmers implementing JavaScript on JVM through invokedynamic and then will implement invokedynamic in a JS VM instead.

The true freedom is just one heuristic away..

ICOOOLPS 2014
Handcrafting VMs for dynamic languages: reality and dreams
This is a story of what happens when the art of VM construction meets development constraints. This is a first-person narrative about my experience with the V8 and Dart virtual machines, fundamental engineering decisions, and their implications. I will try to show how production VMs are treading the thin line between "practical reality" and "dreams of academia". Finally I intend to share my own dreams on how ideas borrowed from academia could help to solve practical issues in VM-construction.
WebRebels 2014
Crooked Mirrors of Performance
This is a fairy tale of programmer traveling through the strange land of microbenchmarks. Are they reflecting the truth, lies or maybe something in between? We will shatter the illusions and look behind their surface to reveal the fundamental truth: it's easier to spot a bad microbenchmark, than write a good one.
CodeFest 2014
Что за... Dart?
Introduction to Dart (in Russian).
TechTalks NSU 2014
V8 & Dart VM
Overview of Dart VM and V8 compilation pipelines (in Russian). Slide deck built from CWP and Strange Loop ones (see below).
Dart Flight School Oslo (February 2014)
Dart VM Compiler
Overview of Dart VM optimizing compiler.
Dart Flight School Oslo (February 2014)
AngularDart
Introduction to AngularDart.
Aarhus University — CWP 2013
V8
Overview of V8 compilation pipeline. Guest lecture at Aarhus University Client-Based Web Programming course.
LXJS 2013
Doubt Everything
This talks walks the listener through various optimizing compiler related pitfalls in microbenchmarking. Greatly inspired by microbenchmarks found on jsPerf.
StrangeLoop 2013
Building Optimizing Compiler for Dart
The talk describes Dart VM's compilation pipeline, its similarities and differences from V8's approach.
JSConf EU 2012
Exploring JS VM in JS
The talk explores building blocks which could be used to write parts of JavaScript VMs in JavaScript.
Форум Технологий Mail.Ru Group 2012
JavaScript глазами JIT компилятора
Walk through V8's implementation details and the ways they might affect performance of your JavaScript code (in Russian).
Web Rebels 2012
V8 Inside Out
An attempt to explain how inline caches and optimizing compilation works using (mostly) only JavaScript on the slides.
JSConf US 2012
Can V8 Do That?!
Quick walk through the ideas behind V8's optimizing compilation pipeline (aka Crankshaft).
nodecampeu 2011
Understanding V8
Walk through V8's implementation details and performance tuning recommendations for JavaScript code.