On 12/22/2016 02:22 AM, Eric Rahm wrote:
> The key point for me is that we're hiding the return. I'm fine with the
> more verbose 
> explicitly-return-and-make-it-easier-for-the-reviewer-to-call-out-issues
> form. I understand this is going to have differing opinions -- I think
> there's merit to more concise code -- but for the things I look at I much
> prefer an explicit return.

It's a fair cop.  I'm still about ---> <---- close to thinking the macro's 
hidden early-return is just bad (and very nearly Result too is just bad, 
because the one without the other is pretty small-potatoes), and the whole idea 
should go.  

To me, the key is we're not designing anew.  We're implementing an established 
idiom from another language.  It's a fresh, new language not everyone is 
familiar with.  But it's also a language that's *our* language as near as 
anything can be, with lots of our own input on it, with lots of us working with 
it, with our having shipped Firefox depending on it, and with (at the time) its 
foreseeably becoming a Firefox build requirement (and now *is* one).

Against that backdrop, MOZ_TRY is quite similar to try!, and developers who 
have seen even small amounts of Rust will have seen try!.  The naming 
similarity will suggest its sense.  And the documentation in Result.h should 
fully clarify that meaning.  (Incidentally: questions/comments about 
functionality should probably funnel into MFBT bugs to improve the 
documentation.  Asking questions here, or on IRC, or wherever, does not scale.  
Clear documentation in headers does.)

That said, these were my conclusions over the several months mozilla::Result 
was percolating.  Only just this week I learned Rust has a new postfix ? 
operator, that does much the same thing as try!, including "hiding" an early 
return:

  let file = std::fs::File::create("foobar.txt")?;
  file.write_all(format!("line 1").as_bytes())?;
  file.write_all(format!("line 2").as_bytes())?;
  file.write_all(format!("line 3").as_bytes())?;

Mozilla's Rust compiler requirement is sufficient to ensure support for this 
operator.  So I would expect most people writing Rust, and most people writing 
Rust in Gecko, will decreasingly see try! in real-world code.

Given that, will try! remain enough of a Rust idiom for it and MOZ_TRY to 
symbiotically reinforce each other?  I don't know.  If there's no real 
precedent, is MOZ_TRY justifiable?  I don't know.  Maybe people teaching Rust 
will travel through try! before reaching ?, and so try! remains a (diminished) 
precedent.  Or maybe they won't.  Suffice to say that a newly-discovered 
operator a few days later isn't enough to convince me to rethink this so 
drastically.

Jeff
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to