# Combined SE-0366 (third review) and SE-0377 (second review): rename \`take\`/\`taking\` to \`consume\`/\`consuming\`

**URL:** <https://forums.swift.org/t/combined-se-0366-third-review-and-se-0377-second-review-rename-take-taking-to-consume-consuming/61904>\
**Category:** Proposal Reviews\
**Tags:** ownership\
**Created:** [December 7, 2022, 8:25pm UTC](https://forums.swift.org/t/combined-se-0366-third-review-and-se-0377-second-review-rename-take-taking-to-consume-consuming/61904 "2022-12-07T20:25:34Z")\
**Posts on this page:** 1\
**Showing post:** 13

<div class="post-metadata">

**Author:** ![ksluder](https://avatars.discourse-cdn.com/v4/letter/k/eada6e/32.png) [@ksluder](https://forums.swift.org/u/ksluder)\
**Post date:** [December 10, 2022, 6:13am UTC](https://forums.swift.org/t/combined-se-0366-third-review-and-se-0377-second-review-rename-take-taking-to-consume-consuming/61904/13 "2022-12-10T06:13:46Z")

</div>

Personally, I expect to use these modifiers a _lot_. Maybe not quite as much as `std::move`, but they will certainly be important tools when working on real-time graphics in Swift. So I’d be happy with shorter forms in which punctuation played a more prominent role.

Punctuation could also address @John_McCall’s points:

> [@John\_McCall](#):
>
> The & / inout spellings for mutable borrows stand out as the most inconsistent here, and you could certainly argue that, if we were starting from scratch, they ought to be spelled mutate / mutate.

Defining `&` to mean “operate on this binding” (much like how `$` means “operate through this property wrapper”) could make these feel more closely related.

> [@John\_McCall](#):
>
> I find myself torn about the use of the imperative form for the parameter modifiers.

My suggestion is to drop the imperatives entirely and embrace the dichotomy between expressions and declarations:

```swift
protocol Renderable {
  func appendDisplayList(to frame: inout Frame) // familiar
}

struct Renderer {
  func render(_ frame: inout(let) Frame) // f.k.a. `borrow Frame`
  func releaseResources(for frame: in Frame) // f.k.a. `consume Frame`
}

class World {
  var entities: [any Renderable]
  func draw(in renderer: Renderer) {
    let frame = Frame()
    for entity in entities {
      entity.appendDisplayList(to: &frame)
    }
    renderer.render(&frame)
    renderer.releaseResources(for: &frame)
    // could also do _ = &frame
}

```

Do we really need syntax to distinguish between lending and forfeiting at the call site? I don’t think it can be ambiguous as to which operation applies. Anyone familiar with `inout` parameters can immediately apprehend that `&x` operates on the binding named `x`, not the value held within it, and why `render(&Frame())` doesn’t work.

---

_[View the full topic](https://forums.swift.org/t/combined-se-0366-third-review-and-se-0377-second-review-rename-take-taking-to-consume-consuming/61904)._
