Author: Marc Perkel Date: To: exim-users Subject: Re: [exim] Syntax Inconsistencies
Philip Hazel wrote: > On Tue, 4 Jul 2006, Marc Perkel wrote:
>
>
>> It would be nice if the Exim syntax were consistent between the ACLs and
>> the transport/routers
>>
>> For example - ACLs allow multiple condition lines, routers don't. ACLs
>> allow !condition - routers don't. Exim would be far easier to work with
>> if the router and ACL commands were more consistent.
>>
>> Not trying to complain - just making a suggestion for improvement.
>>
>
> It's partly history (routers have been there since the start of Exim;
> ACLs were not there until Exim 4), and partly because
>
> (a) In a router, "condition", is an option. Options have one value;
> therefore you can set it only once. All the options in a router are set
> (though not necessarily evaluated) when the config is read. They may be
> given in (almost) any order.
>
> (b) An ACL is more like a script. The order in which things are listed
> matters, because they are obeyed in order. That is why you can have more
> than one of anything.
>
> Now, we could extend some options in routers to be vectors rather than
> scalars, and allow multiple occurrences to set multiple values, but for
> many router options (e.g. "driver"), it would not make sense. It would
> also introduce some notion of order, which would be a new thing. I am
> not convinced that it would actually reduce the diffences very much, and
> it could be equally confusing.
>
> One would have to change the notion of routers to be more script-like -
> which is a large, very incompatible change, to achieve anything like
> consistency.
>
I understand that as software grows it not always harmonious. Sometimes
it's worth going back and rewriting things so that you get back to a
solid foundation so that when you need to add new features you aren't
fighting old code. I used to go through building phases where I added
new capabilities and then cleanup phases where I went back and did
things right so that the next time I wanted to build I had a solid
foundation in code.
From a user's perspective Exim is like having several different
languages that are similar enough to create an expectation that they
should be the same while different enough to be very frustrating. I find
myself spending a lot of time fighting the syntax that I think is
necessary to get the job done. So - this it just something on my wish list.