I, for one, would really like to see rust steal named and optional
arguments from OCaml. They're a huge boon to code readability.


On Tue, Feb 25, 2014 at 10:24 PM, Aran Donohue <[email protected]> wrote:

>  Hey,
>
>  I’m not sure how people feel about Option types but there seem to be a
> few hundred uses in the rust codebase. Wanted to share an idea we use in
> our custom type system (“Hack”) at Facebook to make it a bit nicer to
> safely deal with null references. We don’t use Option types directly. I
> don’t think this adds any theoretical power or new possible efficiency
> gains, it’s mostly for making the code a bit simpler.
>
>  Type declarations prefixed with a question mark represent references
> which might be null. So ‘?Foo' is somewhat like a shorthand for
> 'Option<Foo>’.
>
>  function demo(?Car $maybe_car, Car $car) {…}
>
>  We use these like possibly-null pointers. Usually you write an if
> statement prior to using a value.
>
>  function demo(?Car $maybe_car, Car $car) {
>   $car->start();
>   if($maybe_car) { $maybe_car->start(); }
> }
>
>  Sometimes we use these in combination with a special function
> “invariant", an assertion function that throws an exception if a condition
> is not met:
>
>  function demo(?Car $car) {
>   invariant($car, ‘Expected non-null car for the demo’);
>   $car->start();
> }
>
>  If you forget to check for null one way or the other, the type-checker
> complains. This is a static, ahead-of-time check.
>
>  function demo(?Car $car) {
>   $car->start(); // error
> }
>
>  There are some natural annoying edge cases to be covered.
>
>  class Smash {
>   private ?Car $car;
>
>    function demo() {
>     if ($this->car) {
>       $this->smashCar();
>       $this->car->start(); // error
>     }
>   }
> }
>
>  A downside of this approach vs. Option is that code written using
> pattern matching over Option is more easily upgraded to code using pattern
> matching over Result (or something else).
>
>  Anyway, we like this feature and I’d be happy to see it adopted
> elsewhere. Tossing it out there as I don’t know anything about the Rust
> compiler or how language design decisions get made for it :)
>
>  -Aran
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
>


-- 
Clark.

Key ID     : 0x78099922
Fingerprint: B292 493C 51AE F3AB D016  DD04 E5E3 C36F 5534 F907
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to