03

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

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

Updates

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

Commits

[esnext] fix tagged template caching strategy for eval caching

[esnext] fix tagged template caching strategy for eval caching Previously, eval caching was only disabled if the root eval body code contained a tagged template. Per discussion on https://github.com/tc39/ecma262/pull/890, this is incorrect. This...

Caitlin Potter19/02/2018

[esnext] fix tagged template caching strategy for eval caching

[esnext] fix tagged template caching strategy for eval caching Previously, eval caching was only disabled if the root eval body code contained a tagged template. Per discussion on https://github.com/tc39/ecma262/pull/890, this is incorrect. This...

Caitlin Potter19/02/2018

Changeset in webkit [228422]: [JSC] cache TaggedTemplate arrays by callsite rather than by contents ...

22 edits6 moves4 deletes in trunk [JSC] cache TaggedTemplate arrays by callsite rather than by contents ​https://bugs.webkit.org/show_bug.cgi?id=182717 Reviewed by Yusuke Suzuki. ​https://github.com/tc39/ecma262/pull/890 imposes a change to...

Caitlin Potter13/02/2018

[esnext] implement spec change to TaggedTemplate callsite caching

[esnext] implement spec change to TaggedTemplate callsite caching Implements the change outlined in https://github.com/tc39/ecma262/pull/890, which has been ratified and pulled into the specification. In particular, template callsite objects are no...

Caitlin Potter12/02/2018

[esnext] implement spec change to TaggedTemplate callsite caching

[esnext] implement spec change to TaggedTemplate callsite caching Implements the change outlined in https://github.com/tc39/ecma262/pull/890, which has been ratified and pulled into the specification. In particular, template callsite objects are no...

Caitlin Potter12/02/2018