Uploaded image for project: 'Mesos'
  1. Mesos
  2. MESOS-7124

Replace monadic type get() functions with operator*

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • None
    • 1.8.0
    • libprocess, stout
    • Resource Mgmt RI11 Sp 41
    • 3

    Description

      In MESOS-2757 we introduced T* operator-> for Option, Future and Try. This provided a convenient short-hand for existing member functions T& get providing identical functionality.

      To finalize the work of MESOS-2757 we should replace the existing T& get() member functions with functions T& operator*.

      This is desirable as having both operator-> and get in the code base at the same time lures developers into using the old-style get instead of operator-> where it is not needed, e.g.,

      m.get().fun();
      

      instead of

      m->fun();
      

      We still require the functionality of get to directly access the contained value, but the current API unnecessarily conflates two (at least from a usage perspective) unrelated aspects; in these instances, we should use an operator* instead,

      void f(const T&);
          
      Try<T> m = ..;
      
      f(*m); // instead of: f(m.get());
      

      Using operator* in these instances makes it much less likely that users would use it in instances when they wanted to call functions of the wrapped value, i.e.,

      m->fun();
      

      appears more natural than

      (*m).fun();
      

      Note that this proposed change is in line with the interface of std::optional. Also, std::shared_ptr's get is a useful function and implements an unrelated interface: it surfaces the wrapped pointer as opposed to its operator* which dereferences the wrapped pointer. Similarly, our current get also produce values, and are unrelated to std::shared_ptr's get.

      Attachments

        Issue Links

          Activity

            People

              mzhu Meng Zhu
              bbannier Benjamin Bannier
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: