Rusty thoughts on "Parse, don't validate"

(eli.thegreenplace.net)

26 points | by ingve 6 hours ago

3 comments

  • jph 1 hour ago
    Good article on Rust's strengths with types. If you like this, you may be curious how you might build your own parse capabilities. I like the Rust crates Winnow and Nom, and also the Rust traits From and Into.
  • jelder 28 minutes ago
    This is great. Alexis King actually stated that, had she known how popular “Parse, Don’t Validate” had been, she would have written it in a language more widely used than Haskell.
    • esafak 5 minutes ago
      With its rich type system, Haskell is the perfect language to demonstrate the dictum.
  • tjadfsaj 33 minutes ago
    Nonempty type wrappers are a stark reminder that we are missing out on refinement types.
    • bunderbunder 19 minutes ago
      I was thinking about its implementation, too, and ended up deciding that it was probably a performance optimization.

      `Vec<T>` stores all data on the heap, so getting anything out of it involves a pointer deref and possibly also an array bounds check. This `NonEmpty<T>` type keeps the first element of the list in a location that supports some low-level optimization that might make a significant difference in situations where accessing the first element is much more common than accessing subsequent elements.

    • andrepd 18 minutes ago
      Rust has a proposal for this, in the form of pattern types. It's on nightly, but quite far from being ready for prime time.