Versioning info, was Re: Languages with no reserved words?

On Sun, 19 Feb 2006 thomas.mertes@xxxxxx wrote:

randyhow...@xxxxxxxxxxxxxxxxx wrote:

Is that versioning info in the include file name?

Most of the language definitions (statements, operators, types, ... )
are defined in "seed7_05.s7i". This makes "seed7_05.s7i" special.
Without it, it would not be Seed7. A different language or a new version
of Seed7 could be defined in a another include file. So it is really a
versioning info in the include file name.

You can see it this way:
The programmer informs the interpreter (or compiler) which version
of the language he is using (Currently there is just one version).

You haven't clarified the key point for me (and I bet for Randy):
Is this a Good Use of versioning, or a Bad Use?

A hypothetical example of good use, in C: [1]

#include <stdio_C89.h>
/* #include <stdio_C99.h> adds snprintf */

A hypothetical example of bad use, in C:

#include <stdio_gcc321.h>
/* next version of GCC will #include <stdio_gcc401.h> */

In other words, is this really "versioning info," or would it be more accurately described as "branch info"? The latter is okay; you can develop two different branches of your language in parallel, and a client
can write code to work with one branch forever. But if it's really versioning information --- i.e., the next version of your compiler or
libraries will increment the _05 to an _06 --- then it will be impossible
for anyone to write stable code in Seed7, because every time a new version comes out, people will have to update all their $include directives.

So the important decision points are:
(1) Does the _05 ever change to _06? If so, that could be bad; continue.
If not, remove it entirely, and then your design will be good.
(2) How often will that number change? If more than once every decade,
that's very bad; rethink your design. If not, continue.
(3) Will it be possible to release bugfix versions of seed7_05.s7i once
the first version of seed7_06.s7i is released? If not, that's very bad;
rethink your design. If so, your design is okay.

my $.02,

[1] - C doesn't actually do either kind of versioning, which is a Good Thing because it avoids the bad use, and a minor Bad Thing because it avoids the good use. However, avoiding versioning altogether means that
you get some backwards compatibility --- you can usually compile C89
with a C99 compiler, which you wouldn't be able to do if there were
funky suffixes on all the standard #includes.