Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
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:
What's new in RAD Studio 11 Alexandria
What's new in Rad Studio 10.4 Sydney
What's new in Rad Studio 10.3 Rio
What's new in Delphi and C++Builder 10.2 Tokyo
What's new in Delphi and C++Builder 10.1 Berlin
What's new in Delphi and C++Builder 10 Seattle
What's new in Delphi and C++Builder XE8
What's New in Delphi and C++Builder XE7
What's New in Delphi and C++Builder XE6
What's New in Delphi and C++Builder XE5
What's New in Delphi and C++Builder XE4
What's New in Delphi and C++Builder XE3
What's New in Delphi and C++Builder XE2
What's New in Delphi and C++Builder XE
What's New in Delphi and C++Builder 2010
What's New in Delphi and C++Builder 2009
What's New in RAD Studio (Delphi for Win32 2007)
What's New in RAD Studio (C++Builder 2007)
What’s New in Delphi 2006
What’s New in Delphi 2005
What’s New in Delphi 7
What’s New in Delphi 6
What’s New in Delphi 5
What's New in Delphi 4
What's New in Delphi 3
What's New in Delphi 2
Delphi 1 Features
The full list from Embarcadero:
What's New
See also:
David I's list
See also:
Delphi Master Release List wiki
To summarize:
Delphi 11
Binary Literals and Digit Separators
Inline assembler support for AVX instructions (AVX-512)
New record helpers:
TDateTimeHelper
and
TCurrencyHelper
macOS ARM 64-bit target platform
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
Support for Linux server apps (Intel 64-bit using LLVM and ARC).
Assigning a dynamic arrays to a pointer using the
@
operator is only allowed when hard-casting the array.
More flexible namespace resolution of unit names
Delphi 10.1 Berlin
Native support for
Utf8String
and
RawByteString
type on all platforms
The
[weak]
,
[unsafe]
and
[volatile]
attributes
are supported on all compilers.
The size of extended on OSX is now 16 bytes.
class and record helpers cannot access private members of the classes or records they extend
.
Support for Android up to 6.01.
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
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
Android Support;
needs device with ArmV6 + Neon or ArmV7 for deployment
introduces
conditional define ANDROID
Operator overloading for classes (but only for the NextGen compiler {Android/iOS})
Delphi XE4
The following new conditionals are introduced/enabled in XE4:
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
NEXTGEN
UNDERSCOREIMPORTNAME
WEAKREF
WEAKINSTREF
WEAKINTREF
Reintroduced support for iOS.
New
dependency
directive
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,
$IF
statements could only be terminated with
$IFEND
, and the
$IFDEF
,
$IFNDEF
,
$IFOPT
directives 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
Record helpers for built-in types
Removed support for iOS.
Atomic intrinsic functions:
AtomicExchange()
,
AtomicIncrement()
,
AtomicCmpExchange()
,
AtomicDecrement()
Introduction of the
[ref] attribute
.
Delphi XE2
Cross platform support for Mac OSX (32-bit) and iOS;
Support for Win64;
Modified RTL to support cross platform;
Packed
Now 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
WIN64
Full unit scope names are now required in your
uses
clause.
{$ExcessPrecision on/off}
compiler directive
(x64 only)
The build-in types differ depending on the target platform (32/64-bit)
Extended Data Type Is 10 bytes on Win32, but 8 (!) bytes on Win64
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
Intrinsic type
string
now maps to
UnicodeString
;
{$HighCharUnicode on|off}
compiler directive
Generics
;
function Default(T): T
intrinsic function (Undocumented)
Smart pointers
;
Anonymous methods
;
Support for nested exceptions and exception tracing
;
support for pointermath and a new compiler directive:
{$PointerMath on|off}
;
Four new compiler warnings:
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'
;
The
Exit
function can take a parameter specifying a result;
resourcestrings
as Widestrings;
TObject
has a
extra hidden pointer to
TMonitor
in addition to its VMT pointer;
the
deprecated
keyword can now have additional text
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
Enhanced records
;
operator overloading
;
static
methods and properties;
FastMM is the default memory manager;
strict
private/protected visibility keyword
;
final
keyword for virtual methods;
{$METHODINFO}
directive;
Delphi 2005
for ... in
loops,
inline
keyword
Wildcard in uses statement allowed
nested types
nested constants
{$REGION}
/
{$ENDREGION}
directives
class helpers
(added in Delphi 8 for .net);
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
[TCustomVariantType][68]
provides
operator overloading for custom variant types
New compiler directives:
{$IFDEF MSWINDOWS}
{$IFDEF LINUX}
{$LIBPREFIX}
{$LIBSUFFIX}
{$LIBVERSION}
{$MESSAGE 'message'}
{$SetPEFlags}
Support for
{$IF}{$ELSE}
compiler directives
Compiler hinting directives:
experimental
,
deprecated
,
library
,
platform
(but without additional text for deprecated)
Variant is no longer based on COM but changed to be CLX compatible, COM based variant renamed to
OLEVariant
Typed constants cannot be assigned to
(Override with
{$J+}
)
Enumerated types can be assigned an explicit value (cf C++);
Interface properties
Support for calling
varargs
external functions (but only for the
cdecl
calling convention)
custom variants
Delphi 5
No new language features, but:
Support added for Frames
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.
–
–
–
The
jedi.inc
file used by the Dephi JEDI project exposes a series of feature defines. If your project is MPL-compatible, you could even use it for feature detection and save yourself the trouble of reinventing that particular wheel.
For example, it defines
SUPPORTS_FOR_IN
if the compiler supports enumerators. One could wrap your enumerator code in an
IFDEF
checking for that define rather than checking for a particular compiler version.
–
–
–
Thanks for contributing an answer to Stack Overflow!
-
Please be sure to
answer the question
. Provide details and share your research!
But
avoid
…
-
Asking for help, clarification, or responding to other answers.
-
Making statements based on opinion; back them up with references or personal experience.
To learn more, see our
tips on writing great answers
.