{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreigq4lsz7wsujpnhqcvv5vdu7kq2ef6hb7wooqv2etsxetg75eovsi",
    "uri": "at://did:plc:ivbknywyskln22er3nkssdhl/app.bsky.feed.post/3mhazy6sz7j42"
  },
  "path": "/t/top-level-self-functions-fn-f-self-t/23620?page=2#post_21",
  "publishedAt": "2026-03-17T11:52:10.000Z",
  "site": "https://internals.rust-lang.org",
  "tags": [
    "Testing the waters: UMCS (Unified Method Call Syntax)",
    "Weird syntax idea(s) for UMCS",
    "`tap`",
    "`pipei`"
  ],
  "textContent": "Coincidentally, both this and the sister thread Testing the waters: UMCS (Unified Method Call Syntax) attempt to solve essentially the same problem, and both were originally (as far as I know) suggested in CAD97's Weird syntax idea(s) for UMCS.\n\nSince both approaches have their disadvantages — e.g., the `x.(func)(params)` syntax seems hard to swallow for some — to float another alternative: just adding multi-argument `pipe` (and `tap`?) to `std`. This has several major disadvantages, one of which being that you lose two-phase borrowing, the upside being that no new syntax is needed. As a prior: the single-argument `tap` crate is one of the most popular crates in terms of both all-time and recent downloads.\n\nWhy not have multi-argument pipe as a crate? You can — see `pipei` — but it requires nightly (`impl_trait_in_assoc_type`).",
  "title": "Top-level self functions `fn f(self: T)`"
}