Darren Duncan wrote:
For another thing, assuming in the typical case that any time a language
evolves, it still provides the means to accomplish anything it was
previously capable of, then each implementation needs no
backwards-compatibility internally, but just the state of the art.
Backwards compatibility can be achieved with version-specific shims over
top of this single core, which translate works written to an older spec
to their equivalent in the new one. Because versions are explicitly
declared, it is trivial to dispatch to the correct interpreter or
pseudo-interpreter.
As an addendum to this thought ...
If a system is also capable of generating a source work from a parsed version
that is effectively the same as the original, it should also be possible for a
user to request a source translation from some older understood spec version to
a newer/current one. So they can be assisted in keeping their sources up to
date without having to manually keep updating them, in general. Then when
support for older formats is deprecated and removed, by that time their source
will have been updated so it is still interpretable without manual updates.
Of course, supporting this is optional, but its useful.
Like a Perl 5 to Perl 6 translator but on much finer and easier to do scales.
-- Darren Duncan