First, sorry to re-open an old thread and thanks for all the awesome work done on Elixir. I humbly think I might have 1 or 2 original thoughts on the matter.
I am in the camp of either (1) getting back to 1.3 behavior or less ideally (3) narrow down to only the cases when we have a function and a variable with the same name. The original issue seems to be poor variable and function naming coupled with some unexpected pollution from imports. I don't think it's an issue with the language itself. If you take the case of the `conn` and `Plug.Test.conn/0` collisions, renaming the function to `build_connection/0` seems more straightforward than requiring everyone to use `()` for zero parameter function calls. Furthermore, having namespaces of variable and function mixing together seems to be the original intent of the language. Same way Ruby allows to not care if an object come from some code or it's already there. Of course, José Valim would know better what was the original intentions, but bare with me! If we want a strict separation of these 2 namespaces with the end goal of reducing cognitive load, shouldn't we have a different way of naming variable like other languages are doing with for example `$variable`? I know Dave Thomas wasn't serious, but I even like the idea of adding a dot in front of every functions - `.function` - keeping variables untouched. It feels embracing even more the functional way. It seems too late to make this kind of changes though. Finally, my main point will be to make the parallel with Python `3.0` changes. Adding brackets to every function calls in order to be more explicit. The scope was larger, and Python `3.0` added also some other controversial changes in the way strings were handled that weren't liked by everyone. But, the push to require brackets was the main point of discord and it resulted in a schism in the community. Even after almost a decade, Python 2.7 is still there and Python 3.5 still has trouble making his nest despite being now faster and more features rich. I think we all want Elixir to succeed. It means more people will be using it resulting in less bugs and more libraries. However, this kind of changes - that seems trivial and reasonable - can hurt a community a lot more than it seems. However, at the end of the day, this is not a democracy, and we'll all respect whatever you will decide. Thanks, Julian On Tuesday, December 6, 2016 at 12:51:32 PM UTC-6, Michał Muskała wrote: > > > > On 6 Dec 2016, at 19:48, [email protected] <javascript:> wrote: > > > > Would it be possible to have a flag attribute to disable warnings on > particular modules or something? Not the greatest solution, but it could > potentially be enough to support DSLs and IEx helpers > > > > In DSLs you could manually upgrade the variable into a function call > instead of relying on the compiler to do so (and emit a warning). > > The AST of a variable is {name, meta, context}, while AST of a function > call is {name, meta, args}, in case of 0-arity calls the last argument > would always be an empty list. > > Michał. > > -- You received this message because you are subscribed to the Google Groups "elixir-lang-core" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/d8f5e848-2fc9-460b-8b55-e8dfc00ced56%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
