[eeps] EEP 24 -- F/N converts to {F,N} in *all* directives
Ulf Wiger
ulf@REDACTED
Mon Oct 20 11:35:59 CEST 2008
The suggestion was to make this change in all *directives*.
I agree that this should be done, and have on several occasions
been frustrated that I can't provide user-defined directives that are
as readable as the built-in ones.
I also agree that it wasn't entirely clear at first what the EEP actually
suggested. To us who don't have English as a native language,
perhaps EEPs should strive to be very explicit. I didn't find the
difference in the examples so dramatic that I could tell without
doubt which one the author preferred. (:
So in the interest of clarity:
-module(test).
-export([foo/1]).
-deprecated([{foo,1}]). % user-defined directive
foo(X) ->
{foo,X}.
works, but neither
-export([{foo,1}]) % [1]
nor
-deprecated([foo/1]) % [2]
does.
[2] should be allowed, while [1] arguably doesn't contribute much.
BR,
Ulf W
2008/10/20 Christian <chsu79@REDACTED>:
> 1) Reading the EEP, my first impression was that F/N notation would be
> deprecated/removed and that {F,N} would be required everywhere. And
> people would need to do this to their code-base.
>
> Perhaps "Allow F/N notation as shorthand for {F,N} in all directives,
> not only in -export() and -import()".
>
>
>
> 2) "The improvement in readability is dramatic."
>
> I do not find the improvement to be dramatic, but i find using such
> language in a EEP to be dramatic. :)
>
> I mean, yes, it looks more succinct and there is less noisy curly brackets.
>
> What I worry slightly about is this sedimenting as one of those rules
> that add to language complexity. While this notation alone is not
> difficult, together with everything else it adds up as an exception
> that will make it yet another thing to grasp. However, as it already
> exists in export and import without seemingly causing much confusion,
> maybe my concern isn't motivated.
>
> ( However, look at how much confusion guards cause just because they
> look like function calls, but you cant call functions. A similar
> thing is how people define a function called square and expect
> lists:map(square, [1,2,3,4]) to work. Robert Virding consider it a
> feature that term construction and term patterns look the same, i.e. X
> = <<Foo:64/integer>>, <<Bar:64/integer>> = X, it is a symmetry that
> makes it easier to grasp. )
>
>
>
> 3) Reference Implementation
>
> Where would this be implemented, in the grammar making the tokens
> atom, '/' and integer reduce to a 2-tuple of atom and integer? As a
> parse transform turning the parse tree of a float division on a
> literal atom and positive integer into a 2-tuple?
>
> How does it affect the needs of tools like wrangler that need to have
> identity in unparse(parse(Code))-like operations, so that whitespace
> and other notation is kept ?
>
> Will i be able to have code like:
>
> foo(X) ->
> Y = foo/1,
> {ok, Y}.
>
> Or will it be contained to where this expansion works?
> _______________________________________________
> eeps mailing list
> eeps@REDACTED
> http://www.erlang.org/mailman/listinfo/eeps
>
More information about the eeps
mailing list