I regret supporting many oddities of what are now part of the "fpc" and "objfpc" modes long ago. Partially also out of "go our own way" partisanship.
Frankly, I think there's a lot of stuff in the Object Pascal language- possibly mandated by Delphi's former dominance- which should have been generalised rather than hardcoded.
Backwards compatibility is simply key. Both with self and Delphi. This is very on-topic since it touches the "purity" argument in this thread. You don't want a revision every few years that invalidates existing sources, that is something for compilers that will never amount to anything.
Sometimes living with the warts is better than the alternative.
Yes, a top down design for a legacy free new development system would be different. And it would have been different at any point during FPC's existence, but that is simply not what FPC is about.
Syntax-aware macros or whatever.
Ugh, no. Centralising and internalizing macros is one of the worst mistakes you can make with a language. Even when dressed up as a powertool for meta programming, it still is a statement that your language is a failure.
But anyway, with the unit/module system, macros would be toothless, since headers are not reevaluated when USES/IMPORT a unit/module. Clean uses are already covered by cross unit inline. So only macros in same source file or .incs would work.
Frankly I would rather remove the current macro facility, and point to an external macro processor like M4 for the very few cases when it is really needed.
But I write that from the position of having been around in the ALGOL days, and seeing things embedded in the language syntax which a few years later were "of course" implemented by libraries.
In an era where global/LTO optimisation is a buzzword, macros are IMHO a dated band-aid.
Let's consider an example. Pascal uses ' ' for strings, Modula-2 uses either ' ' or " ", neither supports multi-line string literals. There's sporadic debate in the FPC community about using either ` ` or ''' ''' to represent multi-line string literals, but wouldn't a better solution be a way to declare "/this/ sequence defines this derived string type which is closed by /this/ sequence" which would then work with the existing (excellent) polymorphic functions?
First mistake is assuming that every brainfart needs a language extension (a lesson that some of my co-developers IMHO still have to learn, 3 years hard labour on an ISP helpdesk taught me that every customer request doesn't necessary warrant action even if it sounds reasonable to an uneducated observer (read supervisor)).
But no. Such ploys will undoubtedly only lead to a slippery slope of escape chars to make exceptions to that again (you can imagine the pleas: but what if I want to embed the closing sequence?)
We really don't need more cruft added to the language: "FPC 2025" or whatever. What we need is to have Pascal's design revisited, and brought up to date in light of what's been learnt over its 50 year life.
Not every changement is an improvement.