Skip to content
Snippets Groups Projects
  • Raphaël Gomès's avatar
    4c5f6e95
    rust: make `Revision` a newtype · 4c5f6e95
    Raphaël Gomès authored
    This change is the one we've been building towards during this series.
    The aim is to make `Revision` mean more than a simple integer, holding
    the information that it is valid for a given revlog index.
    While this still allows for programmer error, since creating a revision
    directly and querying a different index with a "checked" revision are
    still possible, the friction created by the newtype will hopefully make
    us think twice about which type to use.
    
    Enough of the Rust ecosystem relies on the newtype pattern to be
    efficiently optimized away (even compiler in codegen tests¹), so I'm not
    worried about this being a fundamental problem.
    
    [1] https://github.com/rust-lang/rust/blob/7a70647f195f6b0a0f1ebd72b1542ba91a32f43a/tests/codegen/vec-in-place.rs#L47
    4c5f6e95
    History
    rust: make `Revision` a newtype
    Raphaël Gomès authored
    This change is the one we've been building towards during this series.
    The aim is to make `Revision` mean more than a simple integer, holding
    the information that it is valid for a given revlog index.
    While this still allows for programmer error, since creating a revision
    directly and querying a different index with a "checked" revision are
    still possible, the friction created by the newtype will hopefully make
    us think twice about which type to use.
    
    Enough of the Rust ecosystem relies on the newtype pattern to be
    efficiently optimized away (even compiler in codegen tests¹), so I'm not
    worried about this being a fundamental problem.
    
    [1] https://github.com/rust-lang/rust/blob/7a70647f195f6b0a0f1ebd72b1542ba91a32f43a/tests/codegen/vec-in-place.rs#L47