[eeps] Request for comments on EEP-24

Richard O'Keefe <>
Thu Oct 30 22:06:11 CET 2008


On 31 Oct 2008, at 12:14 am, Andras Georgy Bekes wrote:
> I suggested the followings: Currently no operators are allowed in  
> module
> attributes,

This isn't _quite_ true:
unary + and unary - are allowed in front of numbers.
>

>  I proposed to allow every standard operator in attributes,
> and each X op Y subexpression in an attribute to be converted to
> {'op',X,Y}.

The question is WHY?
Why do you want to be able to write
	now+then
as well as
	{'+',now,then}
What is the advantage of allowing expression syntax
for things that are not, and certainly will not be
evaluated as, expressions?

The thing about F/A in (some) existing attributes is
it does not mean division and never has.  On the
contrary, it has always been converted to {F,A} for
processing by downstream tools.

Changing F/A to {'/',F,A} will certainly break downstream
tools.

The advantage of {F,A} over {'/',F,A} is that the former
is what the downstream tools are already expecting.

> The -record/2 attribute has two properties that can not be done with
> custom attributes:
> - it has arity 2
> - it can contain "fieldname=DefaultValue" like stuff.

It would have been nice if system attributes
and user attributes were always distinguishable.
For one thing, the last time I checked what attributes
were used in an Erlang/OTP release, one of them
was 'behavoiur'.

Perhaps another EEP could be considered,
with some kind of extended user-defined attributes
beginning with a + sign, and a promise that there
will never be any system-defined + attributes.

We'd still have the problem of distinguishing between
  - this is a +attribute containing e/1 and it is supposed
    to refer to the local e/1 function
  - this is a +attribute containing e/1 but it was meant to
    be the expression 4/1 (4 and e being neighbours on the
    keyboard).
>

> A different solution would be not to reject it by the compiler but to
> convert X = Y to {'=',X,Y}, and generalizing the idea, every X op Y
> could be converted to {'op',X,Y}. This implies that F/N should be
> converted to {'/',F,N}, which sounds bad, but the compiler could still
> convert it to {F,N} when building the exports list for the
> module_info/0,1 functions.

The point is that it needs to {F,N} for things *other than*
export lists.

> Parse transformations are so powerful, but on the other hand are so
> limited because of the parser accepts only a very limited set of
> operators and only in some places... Something should be done to
> improve the consistency of the language!

Something along the lines of
<custom attribute> ::= '+' <function call>.
might do the job.

What is the problem for which you wanted custom attributes
with arity higher than 1 and containing operators?






More information about the eeps mailing list