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

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)


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...

Andy Wingo 29/06/2017

a new concurrent ml

Good morning all!In my last article I talked about how we composed a lightweight "fibers" facility in Guile out of lower-level primitives. What we implemented there is enough to be useful, but it is missing an important aspect of concurrency:...

Andy Wingo 27/06/2017

growing fibers

Good day, Schemers!Over the last 12 to 18 months, as we were preparing for the Guile 2.2 release, I was growing increasingly dissatisfied at not having a good concurrency story in Guile.I wanted to be able to spawn a million threads on a core, to support...


[CloneObjectIC] add CSA implementation of slow case

[CloneObjectIC] add CSA implementation of slow case The CSA implementation is a separate handler so that TF has the opportunity to reduce to a direct call, skipping some of the dispatching in the CloneObjectIC stub. This patch moves the looping over a...

Caitlin Potter11/09/2018

Fix positional-arguments<=? compilation

Fix positional-arguments

Andy Wingo10/09/2018

Fix JIT compilation of intrinsics that return doubles

Fix JIT compilation of intrinsics that return doubles

Andy Wingo07/09/2018

Fix compilation of compare-and-swap

Fix compilation of compare-and-swap

Andy Wingo07/09/2018

Refactor handling of lightning state

Refactor handling of lightning state

Andy Wingo07/09/2018