> Result violates the single responsibility principle and tries to make what are distinct paths into a single thing.

Only in languages that struggle to represent multiple shapes of values with a single type. I don't think I ever want to use a language with exceptions again.

What language do you use which does not have exceptions?

C, Rust, Go. With a little effort, Scala can be used this way quite naturally, simply by allowing exceptions to crash the process.

How do you handle situations where crashing the process is inappropriate. I may not care that a library doesn't like its log file or network socket disappearing, but I very much care if its exception about that event kills the entire process.