{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreigq4lsz7wsujpnhqcvv5vdu7kq2ef6hb7wooqv2etsxetg75eovsi",
"uri": "at://did:plc:ivbknywyskln22er3nkssdhl/app.bsky.feed.post/3mhbutvfge7r2"
},
"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)`"
}