If all you do in the Err(e) => ...
match arm is returning the error, then you absolutely should use the ?
operator instead.
If the match arm also converts the error type into another error type, implement the From
trait for the conversion, then you can use ?
as well.
If you want to add more information to the error, you can use .map_err(...)?
. Or, if you're using the anyhow
crate, .with_context(...)?
.
I can't remember ever needing more than two question marks (??
), and even that is very rare in my experience.
It's not possible to instantiate or assign, which is more like a never type than a unit
Actually, this is because void
is not a type, it is just a keyword, a placeholder used instead of the return type when a function doesn't return anything.
If it were a bottom type, that would mean that a method returning void
must diverge, which is simply not true.
Also, if it were a bottom type, it would be possible to write an "unreachable" method
void unreachable(void bottom) {
return bottom;
}
Even though it couldn't be called, it should be possible to define it, if void
was a bottom type. But it is not, because void
isn't a bottom type, it's no type at all.
No it's not, it is 100% a unit type (except it's not really a type, since you can only use it as return type and nowhere else)
Easy interop with legacy code is how kotlin took off, so maybe it will work out?
Good interop was a requirement for widespread adoption, but not the reason why programmers want to use it. There's also null safety, a much nicer syntax, custom DSLs, sealed classes, type inference, data classes, named and optional arguments, template strings, multi-line strings, computed properties, arbitrary-arity function types, delegation, custom operators, operator overloading, structural equality, destructuring, extension methods, inline functions and non-local control flow, reified types, ...
Some of these features have since been added to Java.
It gives you more type safety, because you use a ProxyᐸFooᐳ
instead of just usize
.
I do not use AI to solve programming problems.
First, LLMs like ChatGPT often produce incorrect answers to particularly difficult questions, but still seem completely confident in their answer. I don't trust software that would rather make something up than admit that it doesn't know the answer. People can make mistakes, too, but StackOverflow usually pushes the correct answer to the top through community upvotes.
Second, I rarely ask questions on StackOverflow. Most of the time, if I search for a few related keywords, Google will find an SO thread with the answer. This is much faster than writing a SO question and waiting for people to answer it; and it is also faster than explaining the question to ChatGPT.
Third, I'm familiar enough with the languages I use that I don't need help with simple questions anymore, like "how to iterate over a hashmap" or "how to randomly shuffle an array". The situations where I could use help are often so complicated that an LLM would probably be useless. Especially for large code bases, where the relevant code is spread across many files or even multiple repositories (e.g. a backend and a frontend), debugging the problem myself is more efficient than asking for help, be it an online community or a language model.
*removed externally hosted image*
I don't understand the "serde2" issue. Isn't "someusername/serde" strictly worse than "serde2"?
GitHub being the only auth provider is something the maintainers wanted to fix, but didn't have enough bandwidth to implement. I think they would welcome contributions!