|
|
|
|
|
by grumpyprole
1046 days ago
|
|
> but also seem to erroneously suggest that Rust’s type system somehow can. I didn't bring Rust into this discussion, it is hardly a model implementation of sum types and using them for proofs, but it is certainly a step in the right direction. > My issue here is not with the utility of sum types, but with the erroneous claim that they somehow remove the need for linters or compiler warnings You are misrepresenting my posts, I am responding to an erroneous claim that linters are a satisfactory substitute for sum types. |
|
>> no chance of forgetting to check the error, and works just as well as a stronger type system
>A linter-based syntactic check is no substitute for a proper type system. A type system gives a machine checked proof. A heuristic catches some but not all failures to handle errors, it will also give false positives.
Thread B:
> Go's lack of sum types mean that there is no static check for whether the error has actually been handled or not.
>>I dunno, my IntelliJ calls out unhandled errors. I imagine go-vet does as well.
>>>A simple syntactic check will only ever work as a heuristic. Heuristics don't work for all cases and can be noisy. The point is, no modern language should need such hacks. This problem was completely solved in the 70s with sum types. [emphasis mine]
What you said in these two threads seemed to suggest that the functionality of Go error linters can be subsumed by a 'proper type system' that includes sum types, and that such a type system would catch all failures to handle errors. But sum types by themselves do nothing to force handling of errors. You could add sum types to Go and you'd still need a linter to perform the exact same error handling checks that Go linters currently perform. Whatever kind of value a fallible function returns, you can always ignore that value as far as the type checker is concerned (unless you add something like linear types to your type system, which are orthogonal to sum types).
Apologies for the confusion re Rust. For Rust just read 'a language that handles errors using sum types'.