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

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

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

Commits

[counters] add use count for the "override mistake"

[counters] add use count for the "override mistake" Adds 2 counts to see how often this occurs on the web, both the throwing version (strict mode), and the no-op sloppy mode case, to help determine if the proposal at...

Caitlin Potter17/10/2018

[counters] add use count for the "override mistake"

[counters] add use count for the "override mistake" Adds 2 counts to see how often this occurs on the web, both the throwing version (strict mode), and the no-op sloppy mode case, to help determine if the proposal at...

Caitlin Potter17/10/2018

GNU Guile 2.9.1

GNU Guile 2.9.1

Andy Wingo10/10/2018

Fix GUILE_ENABLE_JIT after latest change

Fix GUILE_ENABLE_JIT after latest change

Andy Wingo10/10/2018

Bump prerelease version numbering to 2.9.x

Bump prerelease version numbering to 2.9.x

Andy Wingo10/10/2018