- For-in loop support
- Generic records, arrays and procedural types
Okay, those might be useful.
Just a consequence of for-in-loops
- Support for class and record helpers
- Support for type helpers added
As long as only one of them can be active that is pretty much useless
- Support for non-local goto's
- True and False are not keywords anymore
That does not sound like a good idea
- Better support for Delphi-compatible classes - this includes newer Delphi versions too.
- Support for the Objective-Pascal dialect
- Scoped enumerations
- Basic ISO Standard Pascal support
- Support for &-escaping of keywords
- Support for univ parameters in MacPas mode
- CExtended floating point type
- Using the function name as alias for loading its current result value in MacPas mode
- nostackframe forbidden for Pascal subroutines
Those are just compatibility changes
If you do not use the things it became compatible to, they are irrelevant
- Overload modifier must be present in the interface
- Default values in implementation but not in interface/forward declaration
- Default values are now properly typechecked
Those have really annoyed me.
Now FPC cannot compile my old Delphi 4 code anymore
- Sealed and Abstract classes
- Advanced record syntax
- Custom deprecated messages
- Constref parameter modifier
- Support for nested procedure variables
- Anonymous inherited calls
- "strict protected" visibility modifier
- "strict protected" and "protected" visibility modifier in extended records
- "static" directive on non-class methods
- "static" directive on class operators
- Classes implementing forward-declared interfaces
- Comparative operators can have any result type
- For-in loop variable cannot be assigned to anymore
Such minor changes barely matter
- SAR intrinsics
- ROL/ROR intrinsics
- Bitscan intrinsics
- Boolean16, Boolean32 and Boolean64 types
Delphi 4 could just have those in a utils unit
- AnsiStrings are now codepage-aware
Too bad Lazarus ruined that by removing the ansi codepage
- Variant overload preference for string types
- Variant conversion preference for widechar
- Conversion preference of pansichar to various string types
Too bad it is not using utf8string
- Casting integer variables to floating point
Great, now I need to check all my casts if they still work in fpc 3
Big advantage of Delphi 4: Working source continues to work for decades and there are no random changes that break everything.