<p dir="auto">I start to get the feeling that the float parts of core are too huge to have them linked into every rust program. Besides, <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="4072811" data-permission-text="Title is private" data-url="https://github.com/rust-lang/rust/issues/2187" data-hovercard-type="issue" data-hovercard-url="/rust-lang/rust/issues/2187/hovercard" href="https://github.com/rust-lang/rust/issues/2187">#2187</a> suggests an overhaul of math.  So is it time to pull it into a separate lib, just like in C, and only keep as few as possible but required minimal bits in core?</p>
<p dir="auto">The borrow checker gives different results when functions are manually inlined, giving confusing or annoying results.</p>
<p dir="auto">The following compiles:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="struct Foo {
    x: int,
    y: int,
}

impl Foo {
    pub fn foo(&amp;mut self) {
        let y = &amp;mut self.y;
        self.x = self.x + *y;
    }
}"><pre class="notranslate"><code class="notranslate">struct Foo {
    x: int,
    y: int,
}

impl Foo {
    pub fn foo(&amp;mut self) {
        let y = &amp;mut self.y;
        self.x = self.x + *y;
    }
}
</code></pre></div>
<p dir="auto">The following does not:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="struct Foo {
    x: int,
    y: int,
}

impl Foo {
    pub fn foo(&amp;mut self) {
        let y = self.bar();
        self.x = self.x + *y;
    }

    pub fn bar(&amp;mut self) -&gt; &amp;mut int {
        &amp;mut self.y
    }
}"><pre class="notranslate"><code class="notranslate">struct Foo {
    x: int,
    y: int,
}

impl Foo {
    pub fn foo(&amp;mut self) {
        let y = self.bar();
        self.x = self.x + *y;
    }

    pub fn bar(&amp;mut self) -&gt; &amp;mut int {
        &amp;mut self.y
    }
}
</code></pre></div>
<p dir="auto">I don't believe this to be a duplicate of <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="14199471" data-permission-text="Title is private" data-url="https://github.com/rust-lang/rust/issues/6393" data-hovercard-type="issue" data-hovercard-url="/rust-lang/rust/issues/6393/hovercard" href="https://github.com/rust-lang/rust/issues/6393">#6393</a>, because this has not only to do with scoping, but also the fact that a member function always borrows all of <code class="notranslate">self</code>.</p>