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

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)

Updates

Andy Wingo 24/05/2019

lightening run-time code generation

The upcoming Guile 3 release will have just-in-time native code generation. Finally, amirite? There's lots that I'd like to share about that and I need to start somewhere, so this article is about one piece of it: Lightening, a library to...

Andy Wingo 23/05/2019

bigint shipping in firefox!

I am delighted to share with folks the results of a project I have been helping out on for the last few months: implementation of "BigInt" in Firefox, which is finally shipping in Firefox 68 (beta).what's a bigint?BigInts are a new kind of JavaScript...

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

Commits

Switch to use atomic_compare_exchange_strong

Switch to use atomic_compare_exchange_strong

Andy Wingo25/05/2019

Bump version to 2.9.2

Bump version to 2.9.2

Andy Wingo23/05/2019

Reference Lightening instead of GNU Lightning

Reference Lightening instead of GNU Lightning

Andy Wingo23/05/2019

Merge until 65d98d8fd from 'stable-2.2'

Merge until 65d98d8fd from 'stable-2.2'

Andy Wingo23/05/2019

Merge remote-tracking branch 'lightening/master'

Merge remote-tracking branch 'lightening/master'

Andy Wingo23/05/2019