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

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 04/02/2016

guile compiler tasks

Hey! We released Guile 2.1.2, including the unboxing work, and we fixed the slow bootstrap problem by shipping pre-built bootstraps in tarballs. A pretty OK solution in my opinion; check it out!future workAt this point I think I'm happy with...

Andy Wingo 21/01/2016

talks i would like to give in 2016

Every year I feel like I'm trailing things in a way: I hear of an amazing conference with fab speakers, but only after the call for submissions had closed. Or I see an event with exactly the attendees I'd like to schmooze with, but I...

Andy Wingo 19/01/2016

unboxing in guile

Happy snowy Tuesday, hackfolk! I know I said in my last dispatch that I'd write about Lua soon, but that article is still cooking. In the meantime, a note on Guile and unboxing.on boxen, on blitzenBoxing is a way for a programming language...

Andy Wingo 11/01/2016

the half strap: self-hosting and guile

or, "why does building guile take so friggin long"Happy new year's, hackfolk! I don't know about y'all, but I'm feeling pretty good about 2016. Let's make some cool stuff!Today's article is about Guile and how it builds...

Alberto García 17/12/2015

Improving disk I/O performance in QEMU 2.5 with the qcow2 L2 cache

QEMU 2.5 has just been released, with a lot of new features. As with the previous release, we have also created a video changelog. I plan to write a few blog posts explaining some of the things I have been working on. In this one I’m going to talk...

Commits

[async-iteration] improve Function.prototype.toString() output

[async-iteration] improve Function.prototype.toString() output Currently, async generators are stringified the same way normal Generators are. This change prefixes async generator methods with "async *", and other async generator functions with "async...

Caitlin Potter30/03/2017

[async-iteration] improve Function.prototype.toString() output

[async-iteration] improve Function.prototype.toString() output Currently, async generators are stringified the same way normal Generators are. This change prefixes async generator methods with "async *", and other async generator functions with "async...

Caitlin Potter30/03/2017

[cleanup] combine 3 ResumeGenerator stubs into one

[cleanup] combine 3 ResumeGenerator stubs into one This hopefully shrinks binary size a bit, at the cost of (slightly) increasing the complexity of the ResumeGenerator stub. Includes ia32, x64, mips, mips64, arm and arm64...

Caitlin Potter30/03/2017

[cleanup] combine 3 ResumeGenerator stubs into one

[cleanup] combine 3 ResumeGenerator stubs into one This hopefully shrinks binary size a bit, at the cost of (slightly) increasing the complexity of the ResumeGenerator stub. Includes ia32, x64, mips, mips64, arm and arm64...

Caitlin Potter30/03/2017

[async-iteration] implement AsyncGenerator

[async-iteration] implement AsyncGenerator - Introduce new struct AsyncGeneratorRequest, which holds information pertinent to resuming execution of an AsyncGenerator, such as the Promise associated with the async generator request. It is intended...

Caitlin Potter29/03/2017