Hey @shawjef3, thanks for opening a discussion around this.
Generally, I don't think this is a huge problem.
I think by-name parameters are useful as they are -- they are syntactic sugar for
Function0. I am not aware of any evaluation semantics difference between the two. The syntactic changes you propose would make the use of by-name parameters difficult and clunky, which contradicts the idea of having syntactic sugar for the use of parameterless functions.
However, I think there's some room for improvement.
As by-name parameters is not a common concept in other programming languages, Scala developers have to learn it when they bump into it (it's difficult to guess what they are from just seeing it in the wild). If by-name parameters semantics are not intuitive, it's an education problem -- something that we should address in the docs and Scala learning material.
I guess this refers to the fact that by-name parameters are executed every time there is a reference to it from the method body. I had a casual discussion with @odersky to consider changing it so that by-name parameters are only executed once. However, I do not remember what Martin told me in response, so I cannot clarify whether that is possible or not. This change seems to go against the real semantics of named parameters. However, I think that changing the semantics would be better than what you propose. Do you agree?
However, I am aware of several places that depend on these semantics of by-name. For example, I remember seeing some Scala standard library code relying on this. Breaking this code is something that, if done, has to be done with care, and probably in a major version of Scala (2.13.x or Dotty).