Clang MapReduce -- Automatic C++ Refactoring at Google Scale

Loading...

Sign in or sign up now!
Alert icon
Upgrade to the latest Flash Player for improved playback performance. Upgrade now or more info.
2,243
Loading...
Alert icon
Sign in or sign up now!
Alert icon

Uploaded by on Dec 14, 2011

Google has over 100 million lines of code, and our biggest programming language is C++. We have a single, shared codebase developed primarily on mainline. We build every binary and all of its libraries from scratch every time, allowing us to incrementally evolve APIs and libraries over time. The entire development process is extremely incremental in nature, and even API-breaking changes are a regular occurrence. However, for core libraries used throughout the codebase, this development model is a huge challenge: how do we incrementally evolve an API in use by tens of thousands of other libraries? The answer is to use Clang to automatically refactor APIs and their users across the codebase. How do we scale Clang up to possibly the single largest unified codebase in the world? The same way Google scales anything else: MapReduce. By coupling Clang's library design and architecture to existing Google infrastructure we can automatically compile, analyze, and refactor the entire Google codebase in minutes. In this talk, I will dive into the challenges of refactoring C++ code, how we're using Clang and making it even better at solving them, and how we scale these solutions to the size of our codebase.

Category:

Science & Technology

Tags:

License:

Standard YouTube License

Link to this comment:

Share to:
see all

All Comments (6)

Sign In or Sign Up now to post a comment!
  • Is there any place that we can watch for when this tool is released?

  • Really interesting :)

  • JuliaLLawall: we actually looked at Coccinelle before implementing the language, and found that it was not sufficient nor easy enough to extend for what we wanted to do in C++. Unfortunately C++ is a completely different beast from C - there are a lot more corner cases and little hidden things that are really important to match on.

  • It looks similar to what Coccinelle does, although Coccinelle provides pattern matching on the concrete syntax and allows the transformation specification to be integrated directly into the pattern specification, using a patch-like notation. It doesn't seem possible to provide an example on the youtube comment page, but there are examples on the web site. Currently, however, Coccinelle only supports C code, with a very minimal treatment of C++.

  • Really good talk!

Loading...
Alert icon
0 / 00Unsaved Playlist Return to active list
    1. Your queue is empty. Add videos to your queue using this button:
      or sign in to load a different list.
    Loading...Loading...Saving...
    • Clear all videos from this list
    • Learn more