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

Move lev_distance to rustc_ast, make non-generic #79000

Merged
merged 1 commit into from
Nov 26, 2020

Commits on Nov 25, 2020

  1. Move lev_distance to rustc_ast, make non-generic

    rustc_ast currently has a few dependencies on rustc_lexer. Ideally, an AST
    would not have any dependency its lexer, for minimizing unnecessarily
    design-time dependencies. Breaking this dependency would also have practical
    benefits, since modifying rustc_lexer would not trigger a rebuild of rustc_ast.
    
    This commit does not remove the rustc_ast --> rustc_lexer dependency,
    but it does remove one of the sources of this dependency, which is the
    code that handles fuzzy matching between symbol names for making suggestions
    in diagnostics. Since that code depends only on Symbol, it is easy to move
    it to rustc_span. It might even be best to move it to a separate crate,
    since other tools such as Cargo use the same algorithm, and have simply
    contain a duplicate of the code.
    
    This changes the signature of find_best_match_for_name so that it is no
    longer generic over its input. I checked the optimized binaries, and this
    function was duplicated at nearly every call site, because most call sites
    used short-lived iterator chains, generic over Map and such. But there's
    no good reason for a function like this to be generic, since all it does
    is immediately convert the generic input (the Iterator impl) to a concrete
    Vec<Symbol>. This has all of the costs of generics (duplicated method bodies)
    with no benefit.
    
    Changing find_best_match_for_name to be non-generic removed about 10KB of
    code from the optimized binary. I know it's a drop in the bucket, but we have
    to start reducing binary size, and beginning to tame over-use of generics
    is part of that.
    Arlie Davis committed Nov 25, 2020
    Configuration menu
    Copy the full SHA
    5481c1b View commit details
    Browse the repository at this point in the history