List of Delphi language features and version in which they were introduced/deprecated

Note that this answer only lists new language features
not new VCL/FMX features.

Here are the links to the RAD Studio docwiki:

The full list from Embarcadero: What’s New
See also: David I’s list


To summarize:

Delphi 10.4

  • Unified memory management on all platforms – full ARC compiler has been removed and all compilers now use manual (classic) memory management for objects
  • Custom managed records
  • Support for macOS 64-bit
  • Support for Android 64-bit

Delphi 10.3

  • The 64-bit Linux compiler no longer uses ARC, it instead uses the default manual managed, which is the same as in the Windows compiler. This makes porting code from Windows or OSX to Linux much easier.
  • Inline variables with automatic type inference
  • 8 bit AnsiChar/AnsiString support in enabled on Linux.
  • C++Builder and Delphi now use the same ABI for all calls.

Delphi 10.2 Tokyo

Delphi 10.1 Berlin

Delphi 10 Seattle

  • Support for Android 5.1.1 and iOS 8.4
  • Improved OSX exception handling

Delphi XE8

  • Support for 64-bit iOS;
  • New integer types: FixedInt, FixedUInt 32-bit integer types on all platforms;
  • New platform dependent integer types: LongInt, LongWord (64-bits on iOS-64, 32-bits on all other platforms);

Delphi XE7

Delphi XE6

Delphi XE5

Delphi XE4

At XE4, this changed so that $ENDIF became an accepted terminator for $IF, $IFDEF, $IFNDEF, and $IFOPT.

Delphi XE3

Delphi XE2

Delphi XE

  • The {$STRINGCHECKS} compiler directive is ignored in XE;
  • New 16-byte value for the {$ALIGN} directive:
    The acceptable values for the {$ALIGN} directive now include 1, 2, 4, 8, and 16.
  • new {$CODEALIGN} directive, this sets the starting address for a procedure or function.
  • The {$STRONGLINKTYPES ON} directive
  • Support for regular expressions.

Delphi 2010

  • Enhanced Delphi RTTI (Run Time Type Information).
  • Attributes
  • The as operator can be used to cast an interface reference back to the object from which it was extracted.
  • The is operator can be used to verify whether an interface reference was extracted from a certain class.
  • Normal unsafe casting can be performed on an interface: TObject(SomeInterface).
  • new delayed directive indicates that an external library such as a DLL is not to be loaded at declaration time but is to wait until the first call to the method
  • Class Constructor/Destructor

Delphi 2009

Delphi 2007

  • No language changes that I know of;
    Note that Delphi 2007 is a non-breaking release, DCU’s from D2006 will work unchanged in D2007;
  • (The .NET ‘personality’ of 2007 introduced generics)

Delphi 2006

Delphi 2005

  • for ... in loops,
  • inline keyword
  • Wildcard in uses statement allowed
  • nested types
  • nested constants
  • {$REGION}/{$ENDREGION} directives

Delphi 7

  • three additional compiler warnings:
  • Unsafe_Type,
  • Unsafe_Code, and
  • Unsafe_Cast. These warnings are disabled by default, but can be enabled
  • new compiler directive {$WARN UNSAFE_CODE ON}
  • Overloads of routines that format and parse numbers, date-time values, and currency using a TFormatSettings structure.

Delphi 6

Delphi 5

No new language features, but:

Delphi 4

  • Dynamic arrays
  • LongWord and Int64; Cardinal is an UINT32 (before it was unsigned 31-bit value)
  • Real takes 8 bytes and is the same as double (previously it was 6 bytes);
    • Override with the new {$REALCOMPATIBILITY ON} compiler directive;
    • REAL48 replaces the old 6-byte real;
  • Support for resourcestrings
  • Method overloading
  • Default parameters
  • {$EXTERNALSYM} and {$NODEFINE} directives
  • implements keyword for properties

Delphi 3

  • Wordbool, longbool and bytebool store true as -1 instead of 1 (Boolean is unchanged)
  • Components must be installed using packages.
  • Assertions.
  • out parameters.
  • Widestring
  • interface and dispinterface keyword and COM (dispid) support.

Delphi 2

  • Support for 32-bit;
  • Ansistring replaces shortstring as the default string type
  • Currency
  • Variant (for interop with OLE automation).
  • Threading support and ThreadVar keyword.
  • 4 byte data is 4 byte aligned new packed keyword overrides this behavior;
  • TDateTime starts at 1899/12/30 under D1 it started at 0000/00/00
  • new finalization keyword
  • register and stdcall calling conventions added.
  • packed keyword.

Leave a Comment