Rust progress

August 17th, 2011

It’s been a while since the last update here, and a lot has happened.

At the end of April we successfully bootstrapped, freeing ourselves to focus on rustc, the self-hosted compiler. Over the next few months the compiler was repeatedly rewritten and upgraded by our amazing crew of volunteers, interns and full-time employees.

In terms of “features”:

  • Brian Anderson (now full-time!) implemented a far more reasonable metadata system (with C#-style per-item attributes) and, based on that, a complete integrated unit-testing system.
  • Patrick Walton rewrote the type system, introduced interior vectors and unique pointers, tuned the compiler’s performance substantially (see numbers below) while replacing any parts that seemed unsalvageable, and implemented a new shape-based scheme for type glue.
  • Marijn Haverbeke overhauled our syntax, implemented a pretty printer, added support for many functional idioms (function literals, pattern matching with destructuring), made logging dynamically controllable, wrote an emacs mode and a new scheme for destructors.
  • Rafael Ávila de Espíndola implemented the beginnings of an ‘unsafe’ subdialect, and removed much of rustboot’s nonstandard system interfaces in favour of more normal style. Our compiler driver, linkage model, runtime startup code, memory model and ABI all work much more like “normal” C++ compilers now.
  • Rob Arnold implemented an async IO system based on libuv, and brought a lot of sanity and debugging machinery to our runtime system.
  • Erick Tryzelaar made a number of additional syntax overhauls and build system improvements.
  • Kelly Wilson contributed library code and LLVM interface and driver fixes.
  • Josh Matthews made our error messages show you what’s wrong.
  • Jesse Ruderman added a fuzzer.
  • Tim Chevalier wrote the typestate system. Completely!
  • Lindsey Kuper wrote most of the interesting parts of the object system (self-dispatch, extension and overriding).
  • Eric Holk rewrote our task-switching system to use standard ucontexts, wrote a new multithreaded scheduler for these tasks, and rewrote the communication system as a library, that works under the new task semantics.
  • Michael Sullivan implemented move semantics and environment-capturing closures of various sorts (including an argument-type-inferring one for “blocks”)
  • Paul Stansifer wrote a full, multi-grammar, safe and powerful macro system.
  • Everyone on this list did absolutely amazing amounts of cleanup, bug-fixing, documentation, testing, redesign, dead code elimination, and generally high-quality software engineering. I’m consistently humbled by the volume, thoroughness and precision of the work landing all summer.

More “numerically”:

  • We’ve seen nearly 3000 commits during this period.
  • The compiler doubled in lines-of-code.
  • Its binary image has shrunk to a quarter of its initial size.
  • Build time has improved by a factor of 40 or so since the initial bootstrap; now takes around a minute (depending on hardware) despite doubling of input.

We are now in the process of winding down summer internships and shifting focus to producing a somewhat more-stable “release” that can be used by a wider audience ,sometime in the fall or early winter.

Comments are closed.