ietf-mta-filters
[Top] [All Lists]

Re: Sieve extensions

1998-01-18 21:48:58
Date: Sun, 18 Jan 1998 20:36:36 -0500 (EST)
From: Rob Earhart <earhart+(_at_)cmu(_dot_)edu>
Organization: cmu

Tim Showalter <tjs+(_at_)andrew(_dot_)cmu(_dot_)edu> writes:
A regular syntax means you can't add new constructs that don't look like
old constructs, you can only add things like "commands" and "expressions",
never "loops" or "variables" (unless you do something really bizarre).

  It's actually not hard at all, if you plan it in advance.  (Granted,
it limits what you can do in the future, but it's possible to make the
syntax general enough so that it won't be a problem).

You are proposing one or more of
* prohibiting future extensions from doing anything to change the grammar
* the addition of macros

Which one?

Are you aware of any languages that didn't have some changes made to their
syntax?  Why should we be any different?

Perl does not have a clean syntax.  It has a few lucky assumptions that let
the programmers and new features at will, and has been fairly extensible as
a result of that.

  The point was that perl 5's syntax is cleaner than perl 4's syntax;
the progression of the language has been to remove special-case syntax
elements.

But perl gets to change its syntax.  Old interpreters don't get run on new
scripts.  If you do, they fail.  Problem solved.

I want the same flexibility.  There will be inevitable changes to the base
grammar.

(The counterscenario is that if we make Sieve have a non-extensible syntax,
we'll have old interpreters also not understanding new scripts, and nothing
changes.)

  I'm not quite sure what you mean, here - what's the difference
between any other language and Sieve?

Other languages have changes to their syntax.  Many have macro facilities
for this purpose, some cleaner than others.  You're asking for this to be
banned forevermore in Sieve in the interest of having old parsers be able
to give subtly different error messages.

-- 
                                          Tim Showalter 
tjs+(_at_)andrew(_dot_)cmu(_dot_)edu


<Prev in Thread] Current Thread [Next in Thread>