On 19/10/13 10:37, Jerry Morrison wrote:

  * Use postfix syntax for pointer dereference, like in Pascal:
     (~rect).area() becomes  rect~.area() . That reads left-to-right
    with nary a precedence mistake.

    While Rust’s auto-dereference feature and type checker will
    sometimes catch that mistake, it's better to just fix the failure
    mode. All security holes in the field got past the type checker
    and unit tests.


Do you realise that `~rect` means "create an owned box [a pointer] that contains `rect`" and isn't not a dereference in Rust? (That is performed by `*rect`.)


  * Don’t let ; default its second operand. Require an explicit value,
    even if (). That fixes an opportunity to goof that might be
    frequent among programmers used to ending every statement with a ;.


`;` isn't a binary operator, and anyway `a; b` doesn't affect the behaviour of `b` at all. Could you describe what you mean a little more?

(Also the type system means that writing `fn foo() -> int { 1; }` (with the extra & incorrect semicolon) is caught immediately.)

  * AIUI,  let mut x, y defines 2 mutable variables but  |mut x, y|
    defines mutable x and immutable y. This is harder to learn and
    easier to goof.


`let mut x, y` doesn't exist at the moment precisely because of the confusion; one has to write `let mut x; let mut y;`. (Relatedly There is a proposal to make `mut <ident>` a valid pattern, so that `let (mut x, y)` is valid: https://github.com/mozilla/rust/issues/9792 )


Thanks for listening!

--
   Jerry


_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to