|
|
|
|
|
by wk_end
55 days ago
|
|
The point of parse-don't-validate is that the type checker prevents you from having a value of a particular type that's invalid. Pointer-or-NULL doesn't work, because all pointers are nullable in C; you can always have a Foo* (NULL) that's doesn't actually point to a valid Foo. Invalid sentinel values are definitionally values of a particular type that are invalid. Same with an is_valid field. An out field in the constructor means that whatever you actually return in the case of an error is going to be a well-typed Foo that's invalid. |
|
Sure, Optional is more elegant, but the end result is the same: Now none of the other code needs to validate; it's already been verified valid at all points where a parse error could have occurred.
C may not be an easy language, but with the right tooling you can make code safer, and idioms like parse-dont-validate possible.