-
Notifications
You must be signed in to change notification settings - Fork 13k
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
Add changelog for 1.13.0 #37600
Add changelog for 1.13.0 #37600
Conversation
For the reasoning behind improvement to compile times, the compile-time optimizations are the most likely causes. I don't believe any other PRs intentionally optimized the compiler (at least majorly). If you or @steveklabnik want to note it, I know that there are at least a few more places that I know of where we may be able to make some potentially large gains in terms of memory usage at least, and possibly performance too. Edit: By "note it" I mean in the blog post that someone (@steveklabnik?) writes up. |
This release includes builds for several new platforms, the standard library, compiler, and cargo:
The builds have a deficiency though. I don't see "rust" packages for them on beta, so they can't be installed easily, either by "rust" tarball or by It may not be worth mentioning them yet if they are hard to install. |
* [Optimize the parser's last token handling][36527] | ||
* [Only instantiate #[inline] functions in codegen units referencing | ||
them][36524]. This leads to big improvements in rare cases, including the | ||
common winapi crate. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Depending on how big, but significant improvements are not rare. Many libraries compile a lot faster.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm I just compiled the winapi crate on stable/beta/nightly and it took 30s on stable, 25s on beta, and 25s on nightly. We may not want to claim too much of a perf improvement here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
winapi 0.2 did not have every single function marked as inline, unlike winapi 0.3 which does.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like winapi 0.3 isn't out yet, so I better change this to not claim anything about it.
Yes, usually @brson writes the release notes and then I write the draft of the blog post. |
* [Add --all-features flag to cargo][cargo/3038] | ||
* [Reject path-based dependencies in `cargo package`][cargo/3060] | ||
* [Don't parse the home directory more than once][cargo/3078] | ||
* [Don't try to generate Gargo.lock on empty workspaces][cargo/3092] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/G/C/ :smile:
Can we repro the perf improvements by hand rather than using the perf.rust-lang.org? We had some problems last time trying to repro them. |
@jonathandturner At least for the |
The |
☔ The latest upstream changes (presumably #37597) made this pull request unmergeable. Please resolve the merge conflicts. |
One of the major improvements to compile time was the futures-rs-test-all test case which is basically exactly what #35761 targeted. Compiling the current test locally goes from 5.2s on stable to 4.7 on beta, but note that the test in the futures-rs repo is likely no longer exactly what's on the benchmark suite (I think I broke it up as it took too long to compile). Compiling the entire test suite of futures-rs takes 9.3s on stable and 9.2s on beta. We... may not want to claim 40% perf improvements? |
Hm so testing again, I wonder, is perf.rust-lang.org doing |
25% in release mode sounds good. Can we check a few more packages just to be sure? (I'd do it but I'm traveling today) Jonathan On Sun, Nov 6, 2016 at 12:30 PM -0500, "Alex Crichton" [email protected] wrote: Hm so testing again, I wonder, is perf.rust-lang.org doing --release? The numbers I just gave for futures were in debug mode, but compiling the entire test suite in release mode takes 22.7s on stable and 16.9s on beta, a 25% improvement. Maybe that's what's being measured? — |
From what I can tell, it's not. |
Whoa ok scratch that I was accidentally using nightly when I thought I was using stable ok, current numbers I'm getting are:
So it actually looks kind bad in some cases. While we universally improved stable -> beta we ended up regressing almost universally beta -> nightly. |
Compilers I used were:
|
For winapi 0.3 where every single function is inline.
This is a 37% reduction in time, which is pretty close to 40%. |
My impression was that the inline PR had a huge impact on build times of various libraries. Trying a relatively small library I get this now:
That's basically reducing the build time by 50%. For the curious, the timing on current nightly is
|
Can confirm that the above is true for MIPSel and MIPS64el, as |
Yeah, looks good - hyper-0.5.0: 57.25s (stable) vs 36.93s (beta) Definitely some improvement there. |
@alexcrichton - did you file issues on the perf regressions? |
Oh yes! Thanks for pointing that out. Also attributes on statements: #36995 |
Updated to add |
I'm going to port this to beta now. |
@Mark-Simulacrum would either |
I'd guess that winapi would be non-trivial to add since (AFAIK) it compiles next to nothing on *nix platforms, which is what the perf server is. Adding ndarray should be relatively trivial--let me know if you'd like that to happen, and I'll try and get it done soon. |
@Mark-Simulacrum Cross compilation of winapi is trivially easy because it's just an rlib so you don't even need a linker or system libraries. Just libcore compiled for a windows target is enough. Don't forget to pass |
please don't use ndarray for that. Maybe I can propose some application of it to use instead (i.e. where the ndarray operations are actually instantiated and used). |
* [Stabilize the `?` operator][36995]. `?` is a simple way to propagate | ||
errors, like the `try!` macro, described in [RFC 0243]. | ||
* [Stabilize macros in type position][36014]. Described in [RFC 873]. | ||
* [Stabilize attributes on statements][36995]. Described in [RFC 0016]. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this issue number correct? it has the same ID as the Stabilize the ?
operator, and redirects to the same PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes. They were stabilized in the same PR.
I'm a bit confused how the ? operator is already hitting stable, if it just got stabilized 4 weeks ago? Isn't it supposed to be in beta first? Seems like it just skipped a cycle? Also the code suggests that it should be in 1.14 instead: https://github.com/rust-lang/rust/blob/master/src/libsyntax/feature_gate.rs#L357 // `expr?`
(accepted, question_mark, "1.14.0", Some(31436)), |
Another new feature in 1.13 that I can't see in the changelog: This simplifies ad-hoc type based dispatch on stable (as used by ndarray to call f32- and f64-specific linear algebra functions). |
Hey Folks any ideas on when 1.13 will be stable? |
@brson is this just waiting for an r+? Given that we just shipped 1.13.0 seems like no, but just wanted to make sure :) |
Yeah this needs an r+. |
@bors: r+ Ok! |
📌 Commit 0f817a0 has been approved by |
Add changelog for 1.13.0 The diagnostics PRs are excellent and some have excellent examples thanks @jonathandturner @estebank. [Here are some notes about the performance changes during the release. Compile times are improved %40 in some cases](https://gist.github.com/brson/1404c4bf4868d7d108f240a6ecba7f31). This desires to be backported to beta for 1.13. Sadly, the [1.12.1 changelog PR](rust-lang#37317) has not merged to master yet, and is sitting in a [rollup PR](rust-lang#37597). r? @rust-lang/lang @rust-lang/compiler @rust-lang/libs @rust-lang/core
Add changelog for 1.13.0 The diagnostics PRs are excellent and some have excellent examples thanks @jonathandturner @estebank. [Here are some notes about the performance changes during the release. Compile times are improved %40 in some cases](https://gist.github.com/brson/1404c4bf4868d7d108f240a6ecba7f31). This desires to be backported to beta for 1.13. Sadly, the [1.12.1 changelog PR](rust-lang#37317) has not merged to master yet, and is sitting in a [rollup PR](rust-lang#37597). r? @rust-lang/lang @rust-lang/compiler @rust-lang/libs @rust-lang/core
Rollup of 30 pull requests - Successful merges: #37190, #37368, #37481, #37503, #37527, #37535, #37551, #37584, #37600, #37613, #37615, #37659, #37662, #37669, #37682, #37688, #37690, #37692, #37693, #37694, #37695, #37696, #37698, #37699, #37705, #37708, #37709, #37716, #37724, #37727 - Failed merges: #37640, #37689, #37717
The diagnostics PRs are excellent and some have excellent examples thanks @jonathandturner @estebank.
Here are some notes about the performance changes during the release.
Compile times are improved %40 in some cases.
This desires to be backported to beta for 1.13.
Sadly, the 1.12.1 changelog PR has not merged to master yet, and is sitting in a rollup PR.
r? @rust-lang/lang @rust-lang/compiler @rust-lang/libs @rust-lang/core