Rust gives you seat belts.
It depends on you what you value more.
Rust gives you seat belts.
It depends on you what you value more.
Instead, Go provides what the language designers considered solutions to most problems. Window not having Unix permissions? Just fake a bunch of them. Path not valid unicode? Probably not a problem. As long ad you agree with the way the Go designers think, that'll save you tons of work.
Just don't use Go in situations where those solutions might not work out, like when you're iterating over arbitrary files instead of the files you've created yourself in Go code.
(This does mean that Go is constraining the set of problems it's easy to solve with it. But that's the nature of programming in general... We decide what problems need to be easier to solve at the expense of putting some problems outside the "sweet spot" and requiring more work to solve them).
- `ls` is wrong and should be fixed.
- The specs are wrong and should not allow filenames to be arbitrary bytesequences.
The third option ("The user is wrong even though they did exactly what was in the spec") is just unsatisfactory because it self-contradicts.
And "The user is wrong even though they did exactly what was in the spec" is pretty much the rule, not the exception.
Rust will get out of your way if you really want it to. It just gives you a seat belt because you are on the highway (writing systems code) but you are free to take it off.
To avoid the car analogy, let's use construction - an in construction building should be allowed to keep the scaffolding up while it's being built.
But maybe you should still clean the floors? Uh oh, it's getting away from me already.