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

Replace monadic type get() functions with operator*

    Details

    • Type: Improvement
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: libprocess, stout
    • Labels:

      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.

        Issue Links

          Activity

          There are no comments yet on this issue.

            People

            • Assignee:
              Unassigned
              Reporter:
              bbannier Benjamin Bannier
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:

                Development