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

Guile 3: Faster programs via just-in-time compilation (FOSDEM 2019)
Bringing JavaScript Back to Life (Node+JS Interactive 2018)
Missing objects: ?. and ?? in JavaScript (BrazilJS 2018)
Community-driven Language Design at TC39 on the JavaScript Pipeline Operator (WorkerConf 2018)
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
Self-Hosted Scripting in Guile (MoreVMs 2018)


Qiuyi Zhang (Joyee) 31/12/2018

Tips and Tricks for Node.js Core Development and Debugging

I thought about writing some guides on this topic in the nodejs/node repo, but it’s easier to throw whatever tricks I personally use on

Andy Wingo 11/10/2018

heap object representation in spidermonkey

I was having a look through SpiderMonkey's source code today and found something interesting about how it represents heap objects and wanted to share.I was first looking to see how to implement arbitrary-length integers ("bigints") by storing the...

Andy Wingo 07/02/2018

design notes on inline caches in guile

Ahoy, programming-language tinkerfolk! Today's rambling missive chews the gnarly bones of "inline caches", in general but also with particular respect to the Guile implementation of Scheme. First, a little intro.inline what?Inline caches are a...

Andy Wingo 17/01/2018

instruction explosion in guile

Greetings, fellow Schemers and compiler nerds: I bring fresh nargery!instruction explosionA couple years ago I made a list of compiler tasks for Guile. Most of these are still open, but I've been chipping away at the one labeled "instruction...

Andy Wingo 11/01/2018

spectre and the end of langsec

I remember in 2008 seeing Gerald Sussman, creator of the Scheme language, resignedly describing a sea change in the MIT computer science curriculum. In response to a question from the audience, he said:The work of engineers used to be about taking small...


Fix race when expanding syntax-parameterize and define-syntax-parameter

Fix race when expanding syntax-parameterize and define-syntax-parameter

Andy Wingo22/02/2019

Fix linker.test

Fix linker.test

Andy Wingo22/02/2019

Bug 1528797 - Add BigInt case in JS::InformalValueTypeName r=jandem

changeset 4fcdd89bf518 branch bookmark tag user Andy Wingo description Bug 1528797 - Add BigInt case in JS::InformalValueTypeName...

Andy Wingo19/02/2019

Bug 1528795 - Add BigInt case in ReportIncompatibleMethod debug assertions r=jandem

changeset ab1ddb62e120 branch bookmark tag user Andy Wingo description Bug 1528795 - Add BigInt case in ReportIncompatibleMethod debug...

Andy Wingo19/02/2019

[parser] don't accept PRIVATE_NAME for object literal property names

[parser] don't accept PRIVATE_NAME for object literal property names Currently, PRIVATE_NAME / PrivateIdentifier is not valid in ObjectLiterals or other places expecting the PropertyName production. A SyntaxError here prevents an access violation...

Caitlin Potter11/02/2019