Skip to content

Name resolution has changed between 1.7.0 and 1.8.0 #33458

Description

@matklad

The following program:

fn main() {
    let x: i32 = 92;
    {
        const x: i32  = 62;
        println!("{}", x);
    }
}

prints 92 with rustc 1.7.0 and 62 with rustc 1.8.0. Is this intentional? I have not found a mention in the release notes. Also the reference could be a bit more clear on the scoping rules :)

Activity

  1. jonas-schievink commented on May 6, 2016

    @jonas-schievink
    Contributor

    cc @jseyfried @nrc

    FWIW I think 62 makes more sense, intuitively speaking, but the subtle change is a bit terrifying

  2. nagisa commented on May 6, 2016

    @nagisa
    Member

    Nominating for T-lang discussion.

  3. jseyfried commented on May 6, 2016

    @jseyfried
    Contributor

    This was intentional, see #31105.

  4. nagisa commented on May 7, 2016

    @nagisa
    Member

    This likely means that the change wasn’t communicated well enough?

  5. aturon commented on May 12, 2016

    @aturon
    Contributor

    Yes, for future reference, anything marked [breaking-change] should also have the relnotes tag applied.

  6. nikomatsakis commented on May 13, 2016

    @nikomatsakis
    Contributor

    We discussed this in the @rust-lang/lang meeting. The conclusion was that the change was legit (a bug fix), but there was a process failure in that we failed to tag the breaking change with "relnotes". D'oh, but I think this change had only very minor impact in practice?

  7. matklad commented on May 13, 2016

    @matklad
    ContributorAuthor

    I think this change had only very minor impact in practice?

    I also think so. I sometimes stumble upon such dark corners of the language, but it is only because we try to reimplement compiler fronted in IntelliJ Rust.

    We probably should close the issue, thanks for the clarification!

  8. jseyfried commented on May 14, 2016

    @jseyfried
    Contributor

    I agree that this change had very minor impact in practice -- constants and local variables can only have the same name by violating naming conventions, and consts in deep blocks are already uncommon.

    We have landed other [breaking-change] bug fixes with similarly low likelihoods of breakage (#32923, #32134, #32006, #31908, #31824, #30866, #30295, #30294, #32141, #31461) -- should these all have been tagged relnotes as well?

  9. shahn commented on Jun 12, 2016

    @shahn
    Contributor

    I think yes, they should be in the release notes. The release notes might help someone figuring out what's going on when they see some code breaking (maybe a breaking change had unintended/unforeseen consequences)

  10. matklad commented on Oct 4, 2016

    @matklad
    ContributorAuthor

    I think this is the intended behavior and the issue should be closed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    T-langRelevant to the language team

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions