On Thursday, 17 July 2014 at 22:59:27 UTC, Brad Anderson wrote:
Walter's prototype[1] for removing allocations from a phobos function (std.path.setExtension) got hung up on the naming of the function. It couldn't keep the same name because it differed only by return type.

Walter doesn't like explicitly naming them as lazy because existing lazy functions like most of std.algorithm don't have names that state they are lazy. On the other hand, setExt is controversial because it's an arbitrary abbreviation done just to avoid the naming conflict. Not every function we'd like to see adopt the same approach would be amenable to a simple abbreviation to dodge the naming issue.

I think it's probably a good time to come up with a naming scheme for these lazy versions of existing functions so things are consistent throughout Phobos.

David Nadlinger offered a few ideas in the thread: setExtensionLazy, extensionSetter, or withExtension.

I find the "with" prefix particularly attractive. It implies the lazy behavior, is short, and reads well when chained with other calls. Hypothetical example I gave in the Pull Request comments:

  auto contents =
      "  FILE".withStrip()
              .withLowercase()
              .withExtension(".txt")
              .readText();

At the risk of bikeshedding, I thought it would be useful to solicit the wider forum audience for ideas and opinions. Thoughts?

1. https://github.com/D-Programming-Language/phobos/pull/2149

Are you planning to deprecate the non-lazy functions at some (maybe very distant) point? If yes, I agree that it's a good opportunity for a cleanup, and there's no point to add prefixes/suffixes.

Reply via email to