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/11/2015

two paths, one peak: a view from below on high-performance language implementations

Ohmigod it's November. Time flies amirite. Eck-setra. These are not actually my sentiments but sometimes I do feel like a sloth or a slow loris, grasping out at quarter-speed. Once I get a hold it's good times, but hoo boy. The tech world...

Andy Wingo 29/10/2015

type folding in guile

A-hey hey hey, my peeps! Today's missive is about another optimization pass in Guile that we call "type folding". There's probably a more proper name for this, but for the moment we go with "type folding" as it's shorter than "abstract...

Andy Wingo 04/08/2015

developing v8 with guix

a guided descent into hellIt all started off so simply. My primary development machine is a desktop computer that I never turn off. I suspend it when I leave work, and then resume it when I come back. It's always where I left it, as it should be.I...

Andy Wingo 28/07/2015

loop optimizations in guile

Sup peeps. So, after the slog to update Guile's intermediate language, I wanted to land some new optimizations before moving on to the next thing. For years I've been meaning to do some loop optimizations, and I was finally able to land a few...

Andy Wingo 27/07/2015

cps soup

Hello internets! This blog goes out to my long-time readers who have followed my saga hacking on Guile's compiler. For the rest of you, a little history, then the new thing.In the olden days, Guile had no compiler, just an interpreter written in C....

Commits

[builtins] refactor ArrayIncludes using TF_BUILTIN

[builtins] refactor ArrayIncludes using TF_BUILTIN Use TF_BUILTIN() to implement ArrayIncludes(). It's easier on the eyes and easier to read. BUG=v8:3575 R=cbruni@chromium.org, ishell@chromium.org Change-Id:...

Caitlin Potter20/02/2017

[builtins] refactor ArrayIncludes using TF_BUILTIN

[builtins] refactor ArrayIncludes using TF_BUILTIN Use TF_BUILTIN() to implement ArrayIncludes(). It's easier on the eyes and easier to read. BUG=v8:3575 R=cbruni@chromium.org, ishell@chromium.org Change-Id:...

Caitlin Potter20/02/2017

[builtins] fix incorrect return value in ArrayIncludes

[builtins] fix incorrect return value in ArrayIncludes Take runtime path if startIndex parameter requires a ToInteger() call, which can modify the elements kind of the receiver. This removes a stub call from the builtin, and simplifies code...

Caitlin Potter20/02/2017

[builtins] fix incorrect return value in ArrayIncludes

[builtins] fix incorrect return value in ArrayIncludes Take runtime path if startIndex parameter requires a ToInteger() call, which can modify the elements kind of the receiver. This removes a stub call from the builtin, and simplifies code...

Caitlin Potter20/02/2017

Fix flonum/complex type inference.

Fix flonum/complex type inference.

Andy Wingo19/02/2017