[m-dev.] Infix syntax proposal

Douglas Michael Auclair dauclair at hotmail.com
Wed Aug 14 21:43:24 AEST 2002


Dear all,

I propose the following amendment to the infix syntax -- add a declaration 
to the language of the form:

:- infix foo, bar, baz.

This declaration allows the above binary functions (foo, bar, and baz) to be 
used in the following way (e.g.):

X foo Y, 3 bar 7, "Quux" baz 42.

It transforms the above into:

X `foo` Y, 3 `bar` 7, "Quuz" `baz` 42.

Justification:

Working a good deal with the pprint module has made Doc1 `<>` Doc2 both 
tedious and alien.  I also define quite a few binary functions and would 
like them to be on equal footing with the builtins at the source level when 
I plan to use them as infix functions.

Demonstration:

I have attached a toy program that transforms files with infix declarations 
(let's call the file foo.infix) to .m files.  It is used thus:

./infix < foo.infix > foo.m

I propose that this infix transformer, if accepted, become part of the 
(m)make process, so that the first source transformation resolves infix 
calls and is transparent to users of mmake/mmc.

Costs:

1. Very little to compilation time: running infix over large programs is not 
noticeable.  There is one more IR that must be passed around either in 
memory or as a (temporary) file.
2. No syntactic/semantic _cost_:  old modules compile as before, and, even 
with an infix declaration, one may still use the back-quote convention or 
the prefix style -- a smart infix pass will not disturb these pre-existing 
constructs (even the attached "toy" program works well with these 
constructs).
3. New-style infix modules will not compile under the old system without 
first being transformed.
4. Increased opportunities for compile-time errors:  the user must remember 
to declare target binary functions as infix, otherwise the compiler will 
report an error at or near the infix call.

Benefits:

1. User-defined and declared infix calls are treated as equals to builtin 
binary functions at the source level.

Testing:

I have used this proposed infix syntax and the transforming program on two 
projects so far.  The new syntax seems more natural to use and to review 
than the back-quote convention.

Sincerely,
Douglas Auclair

_________________________________________________________________
Chat with friends online, try MSN Messenger: http://messenger.msn.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: infix.tgz
Type: application/x-gzip-compressed
Size: 1547 bytes
Desc: not available
URL: <http://lists.mercurylang.org/archives/developers/attachments/20020814/0304c55a/attachment.bin>


More information about the developers mailing list