> If you want to compile code your wrote 20 years ago, use a compiler version from 20 years ago.
I want to compile code i wrote 20 years ago alongside code i wrote 10 years ago and yesterday, not just compile some old project. Though even compiling some old project should be as friction free as possible too.
The point is that once i write some code that i know works, it should keep working in future versions so i wont have to worry about updates (which is now the case with both Free Pascal and Lazarus/LCL - i even use the development versions directly from the repository).
> Forcing backwards compatability hinders a languages growth and forces it to stick by decisions that, in hindsight, may not have been the best.
And ignoring backwards compatibility forces all users of the language (which unless it is a toy project, are way more numerous than the developers of the language) to waste time keeping their projects up to date instead of working on new features and/or bugfixes for their projects.
Also Free Pascal does have a way to avoid this (to some extent) using modes and modeswitches - the former affect the Pascal dialect being used for a file (which can be mixed with other files with other modes) and the latter enable/alter syntactical features that would otherwise break existing code, thus allowing it to be improved piecemeal without breaking anything else.
AFAIK similar features exist for some other languages (i remember reading that Rust's epochs are meant to do something like that though i don't know if files from multiple epochs can be mixed).