| > 1. Error handling. The lack of built-in support for multi-error or error union in Result is painful in dealing with different types of error in a function. Support for Result<Value, Error1 | Error2 | Error3> would be helpful. Or may be support for easily converting one type of error to another. Now there's lots of boiler plate code to deal with error conversion. Error chaining would be nice, too. There are a couple of crates that support this; personally, I recommend the "error-chain" crate. However, I do wish that Rust promoted the most capable of those to the standard library. > 2. Lack of stack trace when an error occurs. Now that stacktrace starts when panic!() is called, which is kind of late. error-chain provides that. > 3. Better support for conversion between &str and String. Dealing with strings is so prevalent in programming that making it easier to work with the two types would be a huge boost to productivity. Can you give some specific examples of cases you've found cumbersome? String has a Deref instance for &str, so taking a reference to a String automatically works as a &str. You can also call .as_str(). Going in the other direction, you can call .to_string() to make a copy of a &str as a new String. |
Also, error handling is so prevalent in Rust. If error chain is the way to go, make it as built-in. As right now, everyone has to hit a brick wall with Result, and then hunt around for the same solution.
3. It's the other way around &str to String, having to call .to_string() everywhere. Make it implicit and automatic if the type expects a String while a &str is passed in.