Compilers and Virtual Machines

Igalia is the most experienced JavaScript virtual machine engineering consultancy contributing code upstream to V8, JavaScriptCore and SpiderMonkey. We also apply our compilers knowledge to work in other dynamic language implementations like Python, Scheme, Ruby and more.

Compiler technology is at the heart of performance optimization: compilers generate the machine code that will run your software, and as such, they are the main responsible actors in making the best use of the CPU instruction set to get the job done in the most efficient way possible.

We have the best team of WebKit developers with a strong competence in JavaScript engines like V8, JavaScriptCore and SpiderMonkey, making Igalia the best partner of choice for optimizing consumer electronic solutions based on client-side web technology.

We specialize in JavaScript upstream work as well as other domains such as debuggers (GDB and integrated debuggers), dynamic language environments integration to existing C/C++ systems, and Guile Scheme compiler, especially in the optimizer and its next-generation virtual machine.

Igalia has talented engineers who understand how compilers work and can optimize how they generate machine code for your programs, providing that performance boost that can make a real difference. Our team can provide holistic optimizations: in the runtime, on the frontend, the optimizer and in the backend.

We can also help companies developing Javascript-based software and products, advising on their design and implementation choices or programming and upstreaming new features required in the javascript engine.

Featured Media

BigInts In JavaScript: A Case Study In TC39 (JSConf EU 2018)
BigInt: Integers as big as you want in JavaScript (Web Engines Hackfest 2017)
Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry On 2017)
Spelunking through JPEG with Racket (Sixth RacketCon, 2016)
Knit, Chisel, Hack: Building Programs in Guile Scheme (Strange Loop 2016)
Optimizing with persistent data structures (LLVM Cauldron 2016)
The future of small languages (FOSDEM 2016)
Guile 2.2 performance notes (FOSDEM 2016)
Property-based testing an open-source compiler, pflua (FOSDEM 2015)
Self-hosted JavaScript (ffconf 2014)
High performance packet filtering with Pflua (FOSDEM 2015)
Adrian Perez de Castro: JavaScript in JavaScript: Inception at JSConf EU 2014
Andy Wingo: DIY Internet: Snappy, Secure Networking with MinimaLT -- JSConf EU 2013
Andy Wingo: JavaScriptCore's DFG JIT -- JSConf EU 2012
Andy Wingo at JSConf USA 2012
Community-driven Language Design at TC39 on the JavaScript Pipeline Operator (WorkerConf 2018)
Self-Hosted Scripting in Guile (MoreVMs 2018)


Andy Wingo 15/03/2017

guile 2.2 omg!!!

Oh, good evening my hackfriends! I am just chuffed to share a thing with yall: tomorrow we release Guile 2.2.0. Yaaaay!I know in these days of version number inflation that this seems like a very incremental, point-release kind of a thing, but it's...

Andy Wingo 12/10/2016

An incomplete history of language facilities for concurrency

I have lately been in the market for better concurrency facilities in Guile. I want to be able to write network servers and peers that can gracefully, elegantly, and efficiently handle many tens of thousands of clients and other connections, but without...

Andy Wingo 21/09/2016

is go an acceptable cml?

Yesterday I tried to summarize the things I know about Concurrent ML, and I came to the tentative conclusion that Go (and any Go-like system) was an acceptable CML. Turns out I was both wrong and right.you were wrong when you said everything's gonna...

Andy Wingo 20/09/2016

concurrent ml versus go

Peoples! Lately I've been navigating the guile-ship through waters unknown. This post is something of an echolocation to figure out where the hell this ship is and where it should go.Concretely, I have been working on getting a nice lightweight...


Awaiting the future of JavaScript in V8

On the evening of Monday, May 16th, 2016, we have made history. We’ve landed the initial implementation of “Async Functions” in V8, the JavaScript runtime in use by the Google Chrome and Node.js. We do these things not because they...


[CloneObjectIC] copy may_have_interesting_symbols bit to fast result map

[CloneObjectIC] copy may_have_interesting_symbols bit to fast result map This fixes a CHECK failure in MapVerify, and gets the correct behaviour for uses of the well-known symbols. BUG=v8:7611, chromium:866229 R=jkummerow@chromium.org,...

Caitlin Potter04/08/2018

Reland "[esnext] re-implement template strings"

Reland "[esnext] re-implement template strings" - Add a new bytecode for the ToString operation, replacing the old intrinsic call (currently does not collect type feedback). - Add a new AST node to represent TemplateLiterals, and avoid generating...

Caitlin Potter04/08/2018

[esnext] fix OOB read in ASTPrinter::VisistTemplateLiteral

[esnext] fix OOB read in ASTPrinter::VisistTemplateLiteral Fixes an error where TemplateLiteral printing in --print-ast would try to read an element beyond the length of a vector. BUG=v8:7415, chromium:820596 R=adamk@chromium.org,...

Caitlin Potter04/08/2018

[esnext] re-implement template strings

[esnext] re-implement template strings - Add a new bytecode for the ToString operation, replacing the old intrinsic call (currently does not collect type feedback). - Add a new AST node to represent TemplateLiterals, and avoid generating unnecessary...

Caitlin Potter04/08/2018

[cctest] add bytecode generator tests for template literals

[cctest] add bytecode generator tests for template literals Just copies the StringConcat tests and refactors them to exercise template literals rather than simple string addition. BUG=v8:7415 R=rmcilroy@chromium.org Change-Id:...

Caitlin Potter04/08/2018