1. No Garbage Collector. While some understanding of object lifetime is required, the constant need to manage allocation and de-allocation of objects takes a lot of energy away from the writing code.
2. Naming variables in a separate Var block. This is really cumbersome and detracts from the development experience. This was somewhat fixed in Delphi 10.3 which was released in 2018 or rather 23 years after the first Delphi version.
3. The unrealistic pricing of Delphi. The high cost of licensing has throughout the times meant that other programming languages have been chosen on this fact alone.
If (1) and (3) could be fixed then Delphi might stand a chance to gain significant market share.
And while 2 can be mildly annoying, there's a reason Borland compilers are so fast, and that's the somewhat restricted syntax of the language.
> 1. No Garbage Collector
I somewhat disagree. Strings are refcounted which removes 90% of the potential pain. Interfaces could be used to ensure objects were freed at end of function scope. Full GC would have ruined Delphi IMHO (if you wanted GC you used VB, or Java which had downsides related to it’s GC. Delphi Apps worked great on low resource machines).