Rust: String::as_ref() Into<String> type inference regression

Created on 19 May 2019  Â·  23Comments  Â·  Source: rust-lang/rust

The following code has been working with stable compiler (rustc 1.34.2), but doesn't compile with nightly (rustc 1.36.0-nightly (963184bbb 2019-05-18)).

fn takes_string<S: Into<String>>(input: S) {
    let s = input.into();
    println!("{}", s);
}

fn main() {
    let foo = String::from("Hello world");
    takes_string(foo.as_ref());
}

code in playground

Error the nightly compiler is given:

error[E0283]: type annotations required: cannot resolve `std::string::String: std::convert::AsRef<_>`
  --> src/main.rs:10:22
   |
10 |     takes_string(foo.as_ref());
   |                      ^^^^^^

error: aborting due to previous error

However, stable compiler is happy with the code and prints the expected hello world.

Stable compiler:

rustc 1.34.2 (6c2484dc3 2019-05-13)
binary: rustc
commit-hash: 6c2484dc3c532c052f159264e970278d8b77cdc9
commit-date: 2019-05-13
host: x86_64-apple-darwin
release: 1.34.2
LLVM version: 8.0

Nightly compiler:

rustc 1.36.0-nightly (963184bbb 2019-05-18)
binary: rustc
commit-hash: 963184bbb670c1ffa97fc28a98cd5e8473118859
commit-date: 2019-05-18
host: x86_64-apple-darwin
release: 1.36.0-nightly
LLVM version: 8.0
T-libs regression-from-stable-to-beta

Most helpful comment

Specifically, since this is essentially inference breakage it is permitted
per our policies. If there is some reason this causes significant
difficulty for you, though, we'd like to hear about that and may reconsider.

All 23 comments

Likely caused by https://github.com/rust-lang/rust/pull/59825, but considered acceptable breakage.

This breaks some crates that compiled before, e.g. dipstick and lettre_email. Just curious, why is this considered acceptable in this case?

These cases can be made to work again by locally elaborating types or the used impl (eg. using <Type as Trait>::method(...) syntax), so the fallout is easy to fix.

Specifically, since this is essentially inference breakage it is permitted
per our policies. If there is some reason this causes significant
difficulty for you, though, we'd like to hear about that and may reconsider.

@Mark-Simulacrum Thanks for your response. This doesn't cause any problem at all for me – I was just curious about what kind of breakage is permitted and what isn't. I found the commitments in this blog post as well.

I hit this problem today when trying to update to the latest nightly release when one of my dependencies (rustyline) depended on this behavior. Because of this I'm unable to update because I don't control the dependency.

Edit: Looks like rustyline has already fixed this issue upstream. Sorry for the noise :)

This libs team discussed this yesterday and agreed this falls within our policy. If anyone has any difficulty upgrading though or working through this, please let us know and we can try to help out.

Triaging crater, this caused a number of regressions. Code-ified most of the detailed regression lists below to avoid pinging lots of folks who are not the root cause of the regression; I'm reopening this due to the extent of the ecosystem damage here and re-nominating.

root: rustyline - 73 detected crates which regressed due to this; cc @kkawakam, @gwenn

 * cmdr-0.3.4: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/cmdr-0.3.4/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/cmdr-0.3.4/log.txt); cc @mendelt
 * csv-query-cli-0.4.1: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/csv-query-cli-0.4.1/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/csv-query-cli-0.4.1/log.txt); cc @jaysonsantos
 * davincibot-0.0.19: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/davincibot-0.0.19/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/davincibot-0.0.19/log.txt); cc @NQNStudios
 * eva-0.2.3: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/eva-0.2.3/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/eva-0.2.3/log.txt); cc @NerdyPepper
 * interact_prompt-0.3.3: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/interact_prompt-0.3.3/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/interact_prompt-0.3.3/log.txt); cc @da-x
 * kanils-1.0.1: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/kanils-1.0.1/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/kanils-1.0.1/log.txt); cc @meso
 * lamcal-repl-0.4.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/lamcal-repl-0.4.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/lamcal-repl-0.4.0/log.txt); cc @haraldmaida
 * lincoln-0.1.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/lincoln-0.1.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/lincoln-0.1.0/log.txt); cc @earthengine
 * littlewing-0.5.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/littlewing-0.5.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/littlewing-0.5.0/log.txt); cc @vinc
 * melon-0.14.1: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/melon-0.14.1/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/melon-0.14.1/log.txt); cc @sphinxc0re
 * parsley-0.9.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/parsley-0.9.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/parsley-0.9.0/log.txt); cc @g-s-k
 * rash-shell-0.1.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/rash-shell-0.1.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/rash-shell-0.1.0/log.txt); cc @absurdhero
 * red-editor-0.2.1: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/red-editor-0.2.1/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/red-editor-0.2.1/log.txt); cc @badboy
 * reframe-0.1.9: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/reframe-0.1.9/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/reframe-0.1.9/log.txt); cc @anvie
 * sn0int-0.10.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/sn0int-0.10.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/sn0int-0.10.0/log.txt); cc @kpcyrd
 * sonnerie-0.4.2: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/sonnerie-0.4.2/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/sonnerie-0.4.2/log.txt); cc @njaard
 * upgradedb4pg-0.1.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/upgradedb4pg-0.1.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/upgradedb4pg-0.1.0/log.txt); cc @hjiayz
 * voile-0.0.3: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/voile-0.0.3/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/voile-0.0.3/log.txt); cc @ice1000
 * Ansvia/reframe: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Ansvia.reframe/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Ansvia.reframe/log.txt); cc @Ansvia
 * GyrosOfWar/gfycat_uploader: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/GyrosOfWar.gfycat_uploader/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/GyrosOfWar.gfycat_uploader/log.txt); cc @GyrosOfWar
 * INOVA-Technology/ZSD: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/INOVA-Technology.ZSD/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/INOVA-Technology.ZSD/log.txt); cc @INOVA-Technology
 * Istar-Eldritch/simple-db: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Istar-Eldritch.simple-db/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Istar-Eldritch.simple-db/log.txt); cc @Istar-Eldritch
 * JoshMcguigan/monkey: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/JoshMcguigan.monkey/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/JoshMcguigan.monkey/log.txt); cc @JoshMcguigan
 * Kianenigma/c-interpreter: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Kianenigma.c-interpreter/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Kianenigma.c-interpreter/log.txt); cc @Kianenigma
 * LiamOW/RustyCalculator: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/LiamOW.RustyCalculator/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/LiamOW.RustyCalculator/log.txt); cc @LiamOW
 * Ludwigette/basic: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Ludwigette.basic/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Ludwigette.basic/log.txt); cc @Ludwigette
 * MinusKelvin/lambda-calculus: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/MinusKelvin.lambda-calculus/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/MinusKelvin.lambda-calculus/log.txt); cc @MinusKelvin
 * NQNStudios/davincibot: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/NQNStudios.davincibot/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/NQNStudios.davincibot/log.txt); cc @NQNStudios
 * NerdyPepper/eva: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/NerdyPepper.eva/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/NerdyPepper.eva/log.txt); cc @NerdyPepper
 * PlasmaPower/curve25519-repl: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/PlasmaPower.curve25519-repl/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/PlasmaPower.curve25519-repl/log.txt); cc @PlasmaPower
 * Srynetix/chip8: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Srynetix.chip8/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Srynetix.chip8/log.txt); cc @Srynetix
 * Water-bamboo/hello-rust: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Water-bamboo.hello-rust/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Water-bamboo.hello-rust/log.txt); cc @Water-bamboo
 * akerber47/knoxide: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/akerber47.knoxide/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/akerber47.knoxide/log.txt); cc @akerber47
 * alex/csv-sql: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/alex.csv-sql/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/alex.csv-sql/log.txt); cc @alex
 * badboy/red: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/badboy.red/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/badboy.red/log.txt); cc @badboy
 * blinry/minitools: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/blinry.minitools/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/blinry.minitools/log.txt); cc @blinry
 * dakatsuka/rust-monkey-lang: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/dakatsuka.rust-monkey-lang/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/dakatsuka.rust-monkey-lang/log.txt); cc @dakatsuka
 * databricks/click: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/databricks.click/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/databricks.click/log.txt); cc @databricks
 * deciduously/blispr: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/deciduously.blispr/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/deciduously.blispr/log.txt); cc @deciduously
 * erikgrinaker/rustcalc: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/erikgrinaker.rustcalc/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/erikgrinaker.rustcalc/log.txt); cc @erikgrinaker
 * fearofcode/arete: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/fearofcode.arete/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/fearofcode.arete/log.txt); cc @fearofcode
 * fredrik-jansson-se/rusty-lisp: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/fredrik-jansson-se.rusty-lisp/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/fredrik-jansson-se.rusty-lisp/log.txt); cc @fredrik-jansson-se
 * g-s-k/rsch: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/g-s-k.rsch/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/g-s-k.rsch/log.txt); cc @g-s-k
 * gears-project/gears-cli: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/gears-project.gears-cli/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/gears-project.gears-cli/log.txt); cc @gears-project
 * gefjon/conlang: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/gefjon.conlang/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/gefjon.conlang/log.txt); cc @gefjon
 * hjiayz/upgradedb4pg: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/hjiayz.upgradedb4pg/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/hjiayz.upgradedb4pg/log.txt); cc @hjiayz
 * jD91mZM2/generic-turing-machine: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/jD91mZM2.generic-turing-machine/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/jD91mZM2.generic-turing-machine/log.txt); cc @jD91mZM2
 * jeehoonkang/sparc: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/jeehoonkang.sparc/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/jeehoonkang.sparc/log.txt); cc @jeehoonkang
 * jonkgrimes/lox: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/jonkgrimes.lox/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/jonkgrimes.lox/log.txt); cc @jonkgrimes
 * jrop/rust-calc: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/jrop.rust-calc/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/jrop.rust-calc/log.txt); cc @jrop
 * juancgalan/rust-lisp: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/juancgalan.rust-lisp/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/juancgalan.rust-lisp/log.txt); cc @juancgalan
 * kRITZCREEK/siml: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/kRITZCREEK.siml/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/kRITZCREEK.siml/log.txt); cc @kRITZCREEK
 * kapstok/Ambassade: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/kapstok.Ambassade/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/kapstok.Ambassade/log.txt); cc @kapstok
 * kyren/luster: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/kyren.luster/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/kyren.luster/log.txt); cc @kyren
 * liushiqi/rust-mcmod: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/liushiqi.rust-mcmod/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/liushiqi.rust-mcmod/log.txt); cc @liushiqi
 * macdavid313/calc-rs: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/macdavid313.calc-rs/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/macdavid313.calc-rs/log.txt); cc @macdavid313
 * mendelt/rusty-cave: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/mendelt.rusty-cave/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/mendelt.rusty-cave/log.txt); cc @mendelt
 * netromdk/carapace.rs: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/netromdk.carapace.rs/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/netromdk.carapace.rs/log.txt); cc @netromdk
 * onlyhavecans/gurps: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/onlyhavecans.gurps/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/onlyhavecans.gurps/log.txt); cc @onlyhavecans
 * parth-shel/pshell: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/parth-shel.pshell/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/parth-shel.pshell/log.txt); cc @parth-shel
 * phamlequang/turtle: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/phamlequang.turtle/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/phamlequang.turtle/log.txt); cc @phamlequang
 * pikobyte/kratzer: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/pikobyte.kratzer/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/pikobyte.kratzer/log.txt); cc @pikobyte
 * psinghal20/rush: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/psinghal20.rush/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/psinghal20.rush/log.txt); cc @psinghal20
 * shibafu528/yuzuki: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/shibafu528.yuzuki/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/shibafu528.yuzuki/log.txt); cc @shibafu528
 * sindreij/rust-gb-emu: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/sindreij.rust-gb-emu/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/sindreij.rust-gb-emu/log.txt); cc @sindreij
 * tatref/synacor-challenge: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/tatref.synacor-challenge/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/tatref.synacor-challenge/log.txt); cc @tatref
 * thinkyfish/stapl: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/thinkyfish.stapl/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/thinkyfish.stapl/log.txt); cc @thinkyfish
 * tyler-cromwell/Rush: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/tyler-cromwell.Rush/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/tyler-cromwell.Rush/log.txt); cc @tyler-cromwell
 * wduquette/bonaventure: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/wduquette.bonaventure/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/wduquette.bonaventure/log.txt); cc @wduquette
 * yenwel/db: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/yenwel.db/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/yenwel.db/log.txt); cc @yenwel
 * yorodm/shsh: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/yorodm.shsh/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/yorodm.shsh/log.txt); cc @yorodm
 * zesterer/atto: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/zesterer.atto/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/zesterer.atto/log.txt); cc @zesterer
 * zummenix/xcopen: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/zummenix.xcopen/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/zummenix.xcopen/log.txt); cc @zummenix

root: ucg - 2 detected crates which regressed due to this; cc @zaphar

 * ucg-0.5.8: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/ucg-0.5.8/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/ucg-0.5.8/log.txt); cc @zaphar
 * zaphar/ucg: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/zaphar.ucg/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/zaphar.ucg/log.txt); cc @zaphar

root: wee-rl - 1 detected crates which regressed due to this; cc @jblondin

 * piske-0.1.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/piske-0.1.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/piske-0.1.0/log.txt); cc @jblondin

root: tcalc-rustyline - 1 detected crates which regressed due to this; cc @dubrowgn

 * tcalc-1.6.13: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/tcalc-1.6.13/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/tcalc-1.6.13/log.txt); cc @dubrowgn

root: amethyst_assets - 6 detected crates which regressed due to this; cc @Xaeroxe, @torkleyy, @Rhuagh, @jojolepro, @Moxinilian

 * amethyst_animation-0.5.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/amethyst_animation-0.5.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/amethyst_animation-0.5.0/log.txt); cc @Xaeroxe, @Rhuagh, @jojolepro, @Moxinilian
 * amethyst_controls-0.4.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/amethyst_controls-0.4.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/amethyst_controls-0.4.0/log.txt); cc @Xaeroxe, @jojolepro, @Moxinilian
 * amethyst_gltf-0.5.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/amethyst_gltf-0.5.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/amethyst_gltf-0.5.0/log.txt); cc @Xaeroxe, @Rhuagh, @jojolepro, @Moxinilian
 * amethyst_input-0.6.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/amethyst_input-0.6.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/amethyst_input-0.6.0/log.txt); cc @Xaeroxe, @Rhuagh, @jojolepro, @Moxinilian
 * amethyst_locale-0.4.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/amethyst_locale-0.4.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/amethyst_locale-0.4.0/log.txt); cc @jojolepro
 * amethyst_utils-0.5.0: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/amethyst_utils-0.5.0/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/amethyst_utils-0.5.0/log.txt); cc @Xaeroxe, @Rhuagh, @jojolepro, @Moxinilian

root: fbxcel - 1 detected crates which regressed due to this; cc @lo48576

 * IcanDivideBy0/fbx-parser-bug: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/IcanDivideBy0.fbx-parser-bug/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/IcanDivideBy0.fbx-parser-bug/log.txt); cc @IcanDivideBy0

root: fui - 1 detected crates which regressed due to this; cc @xliiv

 * xliiv/ff: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/xliiv.ff/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/xliiv.ff/log.txt); cc @xliiv

root: lettre_email - 13 detected crates which regressed due to this; cc @amousset

 * CL4PTP/phil_checker: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/CL4PTP.phil_checker/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/CL4PTP.phil_checker/log.txt); cc @CL4PTP
 * Dooskington/Mail-Journal: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Dooskington.Mail-Journal/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Dooskington.Mail-Journal/log.txt); cc @Dooskington
 * Ophirr33/commencement-ticket-resell: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Ophirr33.commencement-ticket-resell/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Ophirr33.commencement-ticket-resell/log.txt); cc @Ophirr33
 * SEQUOIIA/ssh-notify: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/SEQUOIIA.ssh-notify/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/SEQUOIIA.ssh-notify/log.txt); cc @SEQUOIIA
 * ahamez/scrape_hwg_ste: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/ahamez.scrape_hwg_ste/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/ahamez.scrape_hwg_ste/log.txt); cc @ahamez
 * busarovalex/accounting: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/busarovalex.accounting/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/busarovalex.accounting/log.txt); cc @busarovalex
 * ffimnsr/simple-webservice-rust: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/ffimnsr.simple-webservice-rust/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/ffimnsr.simple-webservice-rust/log.txt); cc @ffimnsr
 * koshkin-kna/maxim_ip_learn: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/koshkin-kna.maxim_ip_learn/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/koshkin-kna.maxim_ip_learn/log.txt); cc @koshkin-kna
 * nurelin/rust2email: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/nurelin.rust2email/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/nurelin.rust2email/log.txt); cc @nurelin
 * patternseek/resticmgr: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/patternseek.resticmgr/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/patternseek.resticmgr/log.txt); cc @patternseek
 * renato-zannon/lotr-watcher: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/renato-zannon.lotr-watcher/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/renato-zannon.lotr-watcher/log.txt); cc @renato-zannon
 * sunny4381/twitnot: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/sunny4381.twitnot/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/sunny4381.twitnot/log.txt); cc @sunny4381
 * whl36512/email_client: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/whl36512.email_client/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/whl36512.email_client/log.txt); cc @whl36512

root: liquid - 8 detected crates which regressed due to this; cc @johannhof

 * cargo-tarball-0.0.1: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/cargo-tarball-0.0.1/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/cargo-tarball-0.0.1/log.txt); cc @epage
 * gust-0.1.4: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/gust-0.1.4/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/gust-0.1.4/log.txt); cc @saresend
 * stager-0.3.4: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/reg/stager-0.3.4/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/reg/stager-0.3.4/log.txt); cc @epage
 * PurpleMyst/repoman: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/PurpleMyst.repoman/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/PurpleMyst.repoman/log.txt); cc @PurpleMyst
 * crate-ci/cargo-tarball: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/crate-ci.cargo-tarball/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/crate-ci.cargo-tarball/log.txt); cc @crate-ci
 * dzamlo/multitest: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/dzamlo.multitest/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/dzamlo.multitest/log.txt); cc @dzamlo
 * phideg/neptungen: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/phideg.neptungen/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/phideg.neptungen/log.txt); cc @phideg
 * sunilbandla/draw-charts: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/sunilbandla.draw-charts/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/sunilbandla.draw-charts/log.txt); cc @sunilbandla

root: redis-async - 5 detected crates which regressed due to this; cc @benashford

 * Idein/actix-rate-limit: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/Idein.actix-rate-limit/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/Idein.actix-rate-limit/log.txt); cc @Idein
 * approveapi/actix-web-magic-link-auth: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/approveapi.actix-web-magic-link-auth/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/approveapi.actix-web-magic-link-auth/log.txt); cc @approveapi
 * sadkovoy/protego: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/sadkovoy.protego/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/sadkovoy.protego/log.txt); cc @sadkovoy
 * semyon2105/authsrv: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/semyon2105.authsrv/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/semyon2105.authsrv/log.txt); cc @semyon2105
 * yinyanlv/partner: [start](https://crater-reports.s3.amazonaws.com/beta-1.36-2/1.35.0/gh/yinyanlv.partner/log.txt) v. [end](https://crater-reports.s3.amazonaws.com/beta-1.36-2/beta-2019-05-30/gh/yinyanlv.partner/log.txt); cc @yinyanlv

Regarding redis-async this was fixed in version 0.4.5 a couple of weeks ago. Those five crates that failed to build have versions 0.4.3 or 0.4.4 in their Cargo.lock file, but a cargo update should fix them without any other intervention required.

Regarding rustyline, this was fixed in version 4.1.0.

cc @rust-lang/libs, this was reopened due to the impact found on crater (see above). We'll discuss this in the next triage meeting but figured y'all would want to be aware ahead of time.

fbxcel has 0.4.x release (which compiles with nightly) and the regressed version is 0.2.0.
Should I release 0.2.1 with a fix?

It's up to you, of course, but if you don't then it's likely that downstream crates which still depend on the 0.2.x series will stop compiling in 1.36+.

FWIW in the build/test crater run which seems to hit more crates I'm seeing numerous regressions beyond even those listed above (if it'd be helpful, I can spend some time preparing a full list, pinging the relevant folks, etc.). However, I'm thinking that we should revert the change that caused this -- the impl doesn't seem sufficiently useful (essentially saving a .clone()).

Fixed in amethyst by https://github.com/amethyst/amethyst/pull/1619
The next release is scheduled to be out soon.

Fixed in fbxcel 0.2.1.

We discussed this at libs triage again yesterday but reached the same conclusion as before. If anyone has difficulties in migrating though please let us know and we can try to help out!

I suspect this will catch a lot of users by surprise when stable is released. The as_ref/into pattern seems to be widely used according to the crater run and our internal crate breakage report.

There have been several questions about why stringVariable.asRef() no longer compiles, particularly with developers using older pinned versions of libraries.

It certainly looks like there was an awareness that this change was going to cause some pain, but there was no mention of the type of errors in the 1.36 announcement or release notes that I saw. I also spent some time looking for documentation on what is considered acceptable breakage, and couldn't find it. (I was surprised it wasn't easy to find on the website.)

Is it worth-while to communicate (more) about acceptable breakage?

My thought is that when an issue this arises, at least acknowledge that 'acceptable breakage' was found during the beta automated testing, and provide at least a link to the GitHub issue in the release notes (and if more explanation is needed, perhaps a blog article).

The stability commitments are explained in this blog post, which I linked in an earlier comment in this thread. I agree that this information deserves a more prominent location.

Specifically AsRef will be hopefully better documented soon (#62586); we've mostly hesitated from doing so in the past because there's technically a ton of possible breakage that users might encounter that is similar to this -- any impl, method added may cause conflicts downstream. I do agree that some way of saying "here's how to fix that" would be great, or at least pointing users at what we already found. But we have no great place to do that today -- the releases.md file isn't a great place. Maybe we can start a page on forge.rust-lang.org or something along those lines.

While I understand this type of breakage is acceptable and falls within stability guarantees, would it have made sense to first add a warning/deprecation notice for one or two releases prior to the actual change? Assuming that is doable without a large effort of course.

There's no infrastructure to do that currently AFAIK.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

nikomatsakis picture nikomatsakis  Â·  210Comments

nikomatsakis picture nikomatsakis  Â·  412Comments

nikomatsakis picture nikomatsakis  Â·  331Comments

Leo1003 picture Leo1003  Â·  898Comments

withoutboats picture withoutboats  Â·  213Comments