Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

syntax: Optimize some literal parsing #53521

Merged
merged 1 commit into from
Aug 21, 2018

Commits on Aug 20, 2018

  1. syntax: Optimize some literal parsing

    Currently in the `wasm-bindgen` project we have a very very large crate that's
    procedurally generated, `web-sys`. To generate this crate we parse all of a
    browser's WebIDL and we then generate bindings for all of the APIs contained
    within.
    
    The resulting Rust file is 18MB large (wow!) and currently takes a very long
    time to compile in debug mode. On the nightly compiler a *debug* build takes 90s
    for the crate to finish. I was curious what was taking so long and upon
    investigating a *massive* portion of the time was spent in the `lit_token`
    method of the compiler, primarily formatting strings via `format!`.
    
    Upon some more investigation it looks like the `byte_str_lit` was allocating an
    error message once per byte, causing a very large number of allocations to
    happen for large literals, of which wasm-bindgen generates quite a few (some are
    MB large).
    
    This commit fixes the issue by lazily allocating the error message, only doing
    so if the error message is actually needed (which should be never). As a result,
    the debug mode compilation time for our `web-sys` crate decreased from 90s to
    20s, a very nice improvement! (although we've still got some work to do).
    alexcrichton committed Aug 20, 2018
    Configuration menu
    Copy the full SHA
    5bf2ad3 View commit details
    Browse the repository at this point in the history