| What's the difference between importing some hundred's of lines from thiserror in rust vs importing the "error" package in go? If the difference is just "It's okay to use stdlib code, but not dependencies", then go's a great language by that metric. I don't think that's what matters at all. What matters is the abstraction that the programmer deals with. In go, the abstraction I deal with, as a programmer, is what I showed above. In rust, the abstraction I deal with is also what I showed above. One of those things is simpler. Further, the abstraction in go is leakier. My function returns a 'error' interface even if it can only be those two concrete types, so the caller of my function has to step into my function, reason through it to figure out all the error variants, and then check them with 'errors.Is' or such, and changes to what variants are returned aren't statically checked. In rust, I can look at the type-signature, write a 'match' statement, and never have to manually figure out all the variants returned, since the compiler just knows. My point here is that what matters is the abstraction that programmers interact with. Third party libraries are bad when they give a leaky abstraction that causes the programmer pain. Standard libraries likewise. In this case, the abstraction available in rust is cleaner and requires less code for me, the user of the package, so I don't think the lines of code used to build that abstraction matter. Why do you see this as something that matters? |
Again, you're comparing apples and oranges. It seems you didn't see my previous example, here it is again: