[webkit-dev] Terminology for giving up ownership: take, release, move

Ryosuke Niwa rniwa at webkit.org
Mon Sep 5 14:48:49 PDT 2016

On Mon, Sep 5, 2016 at 2:47 PM, Filip Pizlo <fpizlo at apple.com> wrote:
> On Sep 5, 2016, at 2:35 PM, Ryosuke Niwa <rniwa at webkit.org> wrote:
> On Mon, Sep 5, 2016 at 10:13 AM, Darin Adler <darin at apple.com> wrote:
> Hi folks.
> WebKit has some critical functions that involve asking an object to give up
> ownership of something so the caller can take ownership.
> In the C++ standard library itself, this is called move, as in std::move.
> In WebKit smart pointers, we call this operation release, as in
> RefPtr::releaseNonNull and String::releaseImpl.
> In WebKit collections, we call this operation take, as in HashMap::take and
> ExceptionOr::takeReturnValue.
> The release vs. take terminology is distracting to my eyes. The verb “take"
> states what the caller wishes to do, and the verb “release” states what the
> caller wants the collection or smart pointer to do. My first thought was be
> to rename the take functions to use the word release instead, but I fear it
> might make them harder to understand instead of easier and clearly it would
> make them longer.
> I agree the verb "take" is not semantically sound here.  How about
> HashMap::receiveReleased / ExceptionOr::receiveReleased?  Or simply
> HashMap::released / ExceptionOr::takeReleased?  Even HashMap::receive
> / ExceptionOr::receiveReturnValue might work better because "receive"
> is more a passive form of accepting the ownership of something.
> I don't think that HashMap::receiveReleased() fits with
> Subject::verbPhrase().  In HashMap::take(), the HashMap is releasing
> ownership of a value.  So, it is releasing it.  It's definitely not
> receiving it.

Oh I see.  Sorry, I had assumed they were just taking Ref<>&& as an
argument.  In that case, release() definitely seems like the right
terminology to use.

- R. Niwa

More information about the webkit-dev mailing list