As I said on the PR, I am strongly opposed to deprecating parse. It is ubiquitous in Rust code, and the churn it would cause is mind boggling, especially since it still works just fine. Its main problem is that it is a bit redundant. I personally don't feel like that rises to level of deprecating it.
Deprecating FromStr wouldn't be as bad as deprecating parse (if that's even possible), but it is still widely used, and as with parse, works just fine.
Overall, I'd like to see fewer deprecations in general, or at the very least, group them together so that they can all be addressed at once instead of spreading them out. But this particular deprecation doesn't seem well motivated IMO.
Perhaps we could start with a blanket impl<T> FromStr for T where T: TryFrom<&str>? We could keep parse() while at the same time guiding developers towards the more general TryFrom trait.
Personally I'm not as a big a fan of parse() since I feel it is pretty hard to understand how that works if you're encountering as a new user. By comparison, I feel like try_into() generalizes better and makes it slightly clearer what's going on under the covers.
I'm pretty sure that's potentially unsound because of lifetime specializations (any specialization only using a trait bound is potentially unsound). This means we can't expose it in a public api, because specialization is likely to change in significant ways to fix this soundness hole. (Also, we don't expose unstable features, like specialization in public apis, i.e. it should be possible to remove all uses of specialization without breaking anyone's builds).
One thing I love about parse() is it's an inherent method and therefore you don't need any traits in scope to use it.
At present TryInto is not in the prelude, so using it for parsing means you have to import it every time.
This makes the most sense to me. I'd suggest not deprecating parseat least until when/if TryInto winds up in a future (edition) prelude and can then be used as easily as parse() can today.
One problem that I haven't seen mentioned is that TryFrom doesn't get to use deref coercion the same way FromStr can due to the lack of an explicit receiving type. Using TryFrom exclusively would require a lot of additions of as_ref() or &* to code that otherwise just works via FromStr.