Before I begin, I would like to point out that I have honestly and genuinely searched repeatedly and exhaustively via Google for such a thing, and been unable to find one.
I require (for a project I’m developing) a list of all Delphi (2007 to the very latest released version, I no longer support any version older than 2007) “Language Features”, and the versions in which they were introduced and (where applicable) deprecated, improved or removed.
I have noted similar questions to this on Stack Overflow before, though most of those were phrased in the form of “which feature is best”, and closed as deemed unsuitable.
If anyone knows of such a list (or has enough spare time to compile one), I would be very grateful.
The accepted answer will either contain a link to such a list, or the list itself.
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
See also: Delphi Master Release List wiki
To summarize:
Delphi 12
Delphi 11
Delphi 10.4
Delphi 10.3
Delphi 10.2 Tokyo
@operator is only allowed when hard-casting the array.Delphi 10.1 Berlin
[weak],[unsafe]and[volatile]attributes are supported on all compilers.Delphi 10 Seattle
Delphi XE8
Delphi XE7
String-Like Operations Supported on Dynamic Arrays
Parallel Library added to the RTL
New compiler intrinsic routines (undocumented):
function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;Delphi XE6
Delphi XE5 (wayback)
needs device with ArmV6 + Neon or ArmV7 for deployment
introduces conditional define ANDROID
Delphi XE4
The following new conditionals are introduced/enabled in XE4:
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
IOS
NEXTGEN
UNDERSCOREIMPORTNAME
WEAKREF
WEAKINSTREF
WEAKINTREF
Reintroduced support for iOS.
New
dependencydirective for specifying the dependencies of an external library (undocumented until XE8).ARC support in NextGen compilers (including TObject.DisposeOf).
Note that much of the groundwork for ARC was already in XE3, but much of it was disabled
Before the XE4 release,
$IFstatements could only be terminated with$IFEND, and the$IFDEF,$IFNDEF,$IFOPTdirectives could only be terminated with$ENDIF.At XE4, this changed so that $ENDIF became an accepted terminator for $IF, $IFDEF, $IFNDEF, and $IFOPT.
Delphi XE3
AtomicExchange(),AtomicIncrement(),AtomicCmpExchange(),AtomicDecrement()Delphi XE2
Cross platform support for Mac OSX (32-bit) and iOS;
Support for Win64;
Modified RTL to support cross platform;
PackedNow Forces Byte Alignment of Records (Pre XE2 it did not necessarily do this)Eight new DEFINEs have been added:
ALIGN_STACK
CPUX86
CPUX64
MACOS (Mac operating system)
MACOS32
PC_MAPPED_EXCEPTIONS
PIC
WIN64
Full unit scope names are now required in your
usesclause.{$ExcessPrecision on/off}compiler directive (x64 only)The build-in types differ depending on the target platform (32/64-bit)
Delphi XE
{$STRINGCHECKS}compiler directive is ignored in XE;{$ALIGN}directive:The acceptable values for the
{$ALIGN}directive now include 1, 2, 4, 8, and 16.{$CODEALIGN}directive, this sets the starting address for a procedure or function.{$STRONGLINKTYPES ON}directiveDelphi 2010
asoperator can be used to cast an interface reference back to the object from which it was extracted.isoperator can be used to verify whether an interface reference was extracted from a certain class.TObject(SomeInterface).delayeddirective 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 methodDelphi 2009
stringnow maps toUnicodeString;{$HighCharUnicode on|off}compiler directivefunction Default(T): Tintrinsic function (Undocumented){$PointerMath on|off};W1057 Implicit string cast from '%s' to '%s',W1058 Implicit string cast with potential data loss from '%s' to '%s',W1059 Explicit string cast from '%s' to '%s',W1060 Explicit string cast with potential data loss from '%s' to '%s';Exitfunction can take a parameter specifying a result;resourcestringsas Widestrings;TObjecthas a extra hidden pointer toTMonitorin addition to its VMT pointer;deprecatedkeyword can now have additional textDelphi 2007
Note that Delphi 2007 is a non-breaking release, DCU’s from D2006 will work unchanged in D2007;
Delphi 2006
staticmethods and properties;strictprivate/protected visibility keyword;finalkeyword for virtual methods;{$METHODINFO}directive;Delphi 2005
for ... inloops,inlinekeyword{$REGION}/{$ENDREGION}directivesDelphi 7
{$WARN UNSAFE_CODE ON}TFormatSettingsstructure.Delphi 6
{$IFDEF MSWINDOWS}{$IFDEF LINUX}{$LIBPREFIX}{$LIBSUFFIX}{$LIBVERSION}SO link{$SetPEFlags}{$IF}{$ELSE}compiler directivesexperimental,deprecated,library,platform(but without additional text for deprecated)OLEVariant{$J+})varargsexternal functions (but only for thecdeclcalling convention)Delphi 5
No new language features, but:
Delphi 4
LongWordandInt64;Cardinalis an UINT32 (before it was unsigned 31-bit value)Realtakes 8 bytes and is the same asdouble(previously it was 6 bytes);{$REALCOMPATIBILITY ON}compiler directive;REAL48replaces the old 6-bytereal;resourcestrings{$EXTERNALSYM}and{$NODEFINE}directivesimplementskeyword for propertiesDelphi 3
trueas-1instead of 1 (Boolean is unchanged)packages.outparameters.Widestringinterfaceanddispinterfacekeyword and COM (dispid) support.Delphi 2
Ansistringreplacesshortstringas the default string typeCurrencyVariant(for interop with OLE automation).ThreadVarkeyword.packedkeyword overrides this behavior;1899/12/30under D1 it started at0000/00/00finalizationkeywordregisterandstdcallcalling conventions added.packedkeyword.