One solution I like a lot actually comes from a terrible language. The Stata statistics package has its own language, that is awful. But at the top of each file, you can specify the version of the language that you are writing in. If the version isn't specified, it uses the most recent interpreter; otherwise it uses the interpreter specified by the version. It allows the syntax to evolve without ever breaking backwards compatibility. Newer versions can call functions[1] written in older versions, so they still have to maintain backwards compatibility of the virtual machine. But aside from that, they could completely rework the syntax and no old code would break.
From a programmer's perspective, it's a fairly elegant solution to handle different versions.
--edited a few times for clarity
[1] Stata doesn't really have a way to make user defined functions. Instead, they're called programs, which should give you some hint as to Stata's awfulness.
[feature]: http://perldoc.perl.org/feature.html
All the tests written for all the Perl modules on CPAN are effectively also tests for Perl itself, because when a new Perl snapshot causes any test in any CPAN distribution to break, the Perl maintainers are automatically notified so they can fix it. That's pretty cool by itself, but it also speaks to the attitude that if a change in Perl 5 core breaks a test, by default this is a bug in Perl 5 core that must be fixed.
It's interesting that by taking this seemingly limiting attitude ("don't break working code"), you gain the ability to treat all the tests for code written in your language as tests for your language.
Do any other languages have something like this?