| & operator for treating keywords as identifiers | Delphi 2006 |
{$ALIGN} compiler directive can take additional parameter 16 to set 16 byte alignment | Delphi XE |
{$CODEALIGN} compiler directive | Delphi XE |
{$EXCESSPRECISION} compiler directive for 64 bit compilers only | Delphi XE2 |
{$EXTERNALSYM} compiler directive | Delphi 4 |
{$HIGHCHARUNICODE} compiler directive | Delphi 2009 |
{$IF} & {$IFEND} compiler directives | Delphi 6 |
{$IFEND} directive no longer required to close {$IF} statements: {$ENDIF} can now be used instead. | Delphi XE4 |
{$IFOPT} compiler directive supports long directives: e.g. {$IFOPT SCOPEDENUMS ON} | Delphi 13 |
{$LEGACYIFEND} compiler directive | Delphi XE5 |
{$LIBPREFIX}, {$LIBSUFFIX} & {$LIBVERSION} compiler directives | Delphi 6 |
{$MESSAGE} compiler directive | Delphi 6 |
{$METHODINFO} compiler directive | Delphi 2006 |
{$POINTERMATH} compiler directive | Delphi 2009 |
{$PUSHOPT}& {$POPOPT} compiler directives | Delphi 13 |
{$REGION}& {$ENDREGION} compiler directives | Delphi XE |
{$STRONGLINKTYPES} compiler directive | Delphi 4 |
{$TEXTBLOCK} compiler directive to determine how line breaks are treated in multiline strings. | Delphi 12 |
{$WARN} compiler directive | Delphi 7 |
{$WRITEABLECONST} compiler directive default value changes from ON to OFF. | Delphi 6 |
[ref] attribute | Delphi XE3 |
| 0..9 |
| 16 bit compiler & support for Windows 3.1 | Delphi 1 |
| 32 bit compiler & support for Windows 95 | Delphi 2 |
| 64 bit compiler | Delphi XE2 |
| 64 bit binary versions of the Delphi 32 and 64 bit compilers | Delphi 12.2 |
| A |
| Abstract classes | Delphi 2006 |
| Actions & action lists | Delphi 4 |
| Android 32 bit compiler & support | Delphi XE5 |
| Android 64 bit compiler | Delphi 10.4 |
| Anonymous methods / closures | Delphi 2009 |
| AnsiString replaces ShortString as the default string type | Delphi 2 |
| AnsiStrings (System.AnsiStrings) unit introduced | Delphi XE4 |
| Atomic intrinsic functions AtomicExchange, AtomicIncrement, AtomicCmpExchange & AtomicDecrement | Delphi XE3 |
| Attributes | Delphi 2010 |
| B |
Binary integer literals, e.g. %100101 | Delphi 11 |
| Build groups | Delphi XE |
| C |
| class constructors / destructors | Delphi 2010 |
Class data (class var) | Delphi 2006 |
| Class helpers | Delphi 2006 |
| Class helpers and record helpers can no longer access private data of the related class or record | Delphi 10.1 |
| Class properties | Delphi 2005 |
| Currency type | Delphi 2 |
| Custom managed records, with Initialize and Finalize class operators | Delphi 13 |
| Custom managed records, with Initialize and Finalize class operators simplified with implicit Self references | Delphi 10.4 |
| D |
| Default intrinsic compiler routine (undocumented) that gets the default value of a given type | Delphi 2009 |
| Default parameters in functions, procedures & methods | Delphi 4 |
delayed keyword (for loading of DLLs) | Delphi 2010 |
dependency directive (for specifying the dependencies of an external library) | Delphi XE4 |
deprecated directive | Delphi 6 |
deprecated directive with comment | Delphi 2009 |
| DirectX 10 support | Delphi XE3 |
DirectoryExists function moved to SysUtils unit from FileCtrl | Delphi 6 |
Digit separators in integer and floating point literals: e.g. 1_000_000 | Delphi 11 |
dispid directive | Delphi 3 |
dispinterface directive | Delphi 3 |
Dynamic array concatenation and addition extensions. Dynamic arrays can be initialised by assigning an array constant, as in DI := [1, 2, 3]; and can be concatenated using code like DI := DI + [1, 2, 3]; or DI := DJ + DK, where DI, DJ DK are all dynamic integer arrays | Delphi XE7 |
| Dynamic array intrinsic routines. The Concat, Insert & Delete compiler intrinsic routines now operate on dynamic arrays | Delphi XE7 |
| Dynamic arrays | Delphi 4 |
| E |
| EncodePath, EncodeAuth, EncodeQuery & EncodeForm functions | Delphi 10.1 |
| EOSError (instead of EWin32Error) | Delphi 6 |
| ExcludeTrailingPathDelimiter function | Delphi 6 |
| Exit with result parameter | Delphi 2009 |
experimental hinting directive | Delphi 6 |
| Extended type changes size depending upon the hardware and operating system | Delphi XE2 |
| F |
| FastMM memory manager | Delphi 2006 |
| Final methods | Delphi 2006 |
| FireMonkey cross platform framework (FMX) | Delphi XE2 |
| FireMonkey cross platform framework v2 (FM) | Delphi XE3 |
| FixedInt & FixedUInt types - 32 bit signed & unsigned integers respectively across all platforms | Delphi XE8 |
| Floating point number comparison routines added to Math unit. | Delphi 6 |
| Focus mode in IDE editor | Delphi 12.2 |
for.. in loops | Delphi 2005 |
| Form inheritence | Delphi 2 |
| Frames | Delphi 5 |
| Function inlining | Delphi 2005 |
| G |
| Generics | Delphi 2009 |
| GetCompilerVersion & GetRTLVersion routines to get compiler & RTL versions as 16 bit unsigned integers with major version in the high byte and minor version in the low byte | Delphi 12 |
| GetTypeKind intrinsic compiler function (undocumented) | Delphi XE7 |
| H |
HasWeakRef intrinsic compiler function (undocumented) | Delphi XE7 |
| Hash (System.Hash) unit | Delphi XE8 |
| I |
IInterface | Delphi 6 |
implements keyword for properties | Delphi 4 |
| IncludeTrailingPathDelim function | Delphi 6 |
Inline keyword | Delphi 2005 |
| Inline if statement (Conditional Ternary Operator) | Delphi 13 |
| Inline variable declarations | Delphi 10.3 |
| Inner exceptions | Delphi 2009 |
| Insert and Delete RTL routines can be used with dynamic arrays in a similar way to how they are used with strings | Delphi XE7 |
| Int8 type | Delphi 2009 |
| Int16 type | Delphi 2009 |
| Int32 type | Delphi 2009 |
| Int64 type | Delphi 4 |
| Interface to object casting | Delphi 2010 |
| iOS 32 bit compiler & support reintroduced | Delphi XE4 |
| iOS 64 bit compiler | Delphi XE8 |
IOUtils unit | Delphi 2010 |
is not operator | Delphi 2013 |
| IsConstValue intrinsic compiler function (undocumented) | Delphi XE7 |
| IsManagedType intrinsic compiler function (undocumented) | Delphi XE7 |
| IUnknown (COM based interfaces)7 | Delphi 3 |
| L |
| LargeUint type | Delphi 13 |
library directive | Delphi 6 |
| Linux compiler for server applications | Delphi 10.2 |
| Linux client platform support added via 3rd party FMXLinux library | Delphi 10.3.1 |
| Live bindings for VCL & FMX | Delphi XE2 |
| Long string literal support: string literals can now be longer than 255 characters | Delphi 12 |
| LongInt & LongWord type sizes become platform dependent: 32 bit on 32 bit platforms, 64 bit on 64 bit platforms | Delphi XE8 |
| LongWord type | Delphi 4 |
| M |
| MacOS ARM 64 bit compiler | Delphi 11 |
| macOS 32 bit compiler | Delphi XE2 |
| macOS 64 bit compiler | Delphi 10.4 |
| Margins and Padding properties on TControl | Delphi 2006 |
| MariaDB support added | Delphi 10.2 |
| Markdown support in IDE | Delphi 11.2 |
| Metropolis UI for Windows 8 back to XP | Delphi XE3 |
| Mobile form designer | Delphi XE4 |
| MSBuild & build events | Delphi 2007 |
Multiline string literals, delimited by triple quotes (''') | Delphi 12 |
| MySQL support | Delphi 2006 |
| N |
| Namespaces [more info] | Delphi 2005 |
NaN intrinsic function | Delphi 13 |
| NameOf type | Delphi 4 |
| NativeInt & NativeUInt types | Delphi 7 |
| NativeInt & NativeUInt types become weak references. They can no longer be used as separate types | Delphi 12 |
| Nested constants within classes / records | Delphi 2005 |
| Nested types within classes | Delphi 2005 |
not in operator | Delphi 13 |
| O |
| OLE automation | Delphi 2 |
| Operator overloading on records | Delphi 2006 |
out parameters & keywords | Delphi 3 |
overload directive | Delphi 4 |
| Overloading for functions, procedures and methods | Delphi 4 |
| P |
package keyword and change to install components in packages | Delphi 3 |
| Parallel library in RTL | Delphi XE7 |
platform directive | Delphi 6 |
| Pointer type size becomes platform dependent: 32 bit on 32 bit platforms, 64 bit on 64 bit platforms | Delphi XE2 |
| PosEx introduced | Delphi 7 |
| PosEx became obsolete. Pos got third offset argument | Delphi XE3 |
| R |
| real type changes from 8 bytes in size to 6 bytes and becomes an alias for Double. The Real48 is introduced as a 6 byte replacement for the old real | Delphi 4 |
| RaiseLastOSError procedure | Delphi 6 |
| Record Helpers for simple types | Delphi XE3 |
| Record Helpers for simple types TDateTime and Currency types | Delphi 11 |
| Records with methods | Delphi 2006 |
register calling convention | Delphi 2 |
| Regular expression library | Delphi XE |
resourcestring statement | Delphi 3 |
| REST services components | Delphi XE5 |
| RTTI enhancements | Delphi 2010 |
| S |
| SafeLoadLibrary function | Delphi 5 |
| Scoped enumerators (must have type name prefix) | Delphi 2009 |
| Sealed classes | Delphi 2006 |
| Sensor support for VCL & FMX | Delphi XE3 |
| Skia integration | Delphi 12 |
| Smart Code Insight with embedded AI | Delphi 12.2 |
| Split editor views in IDE | Delphi 12 |
static directive for class methods | Delphi 2005 |
strict private and strict protected visibility specifiers | Delphi 2005 |
string type is UnicodeString | Delphi 2009 |
StrUtils unit | Delphi 6 |
| T |
| TApplication.MainFormOnTaskbar property | Delphi 2007 |
| TArray type in System unit | Delphi 2010 |
| TBytes alias for array of Byte | Delphi 2007 |
| Text format form files | Delphi 5 |
| TForm.ShowInTaskbar property | Delphi 12 |
| TFormatSettings and overloaded format and conversion routines that use it | Delphi 7 |
threadvar keyword and threading support | Delphi 2 |
| TNoRefCountObject non-reference-counted IInterface implementation | Delphi 11 |
| TOrderedDictionary - a sorted generic dictionary class | Delphi 12.2 |
| TObject.Equals virtual method | Delphi 2009 |
| TObject.GetHashCode virtual method | Delphi 2009 |
| TObject.ToString virtual method | Delphi 2009 |
| TObject.UnitName method | Delphi 2009 |
| Touch support | Delphi 2010 |
| TPair<TKey,TValue> record | Delphi 2009 |
| TParallelArray - a class to enable running of some operations in parallel threads | Delphi 12.2 |
| TProc<T1,...>, TFunc<T1,...> & TPredicate<T> | Delphi 2010 |
| TRegistry supports access flags | Delphi 6 |
| TRegistry.OpenKeyReadOnly method | Delphi 4 |
| TryStrToXXXX routines added to SysUtils | Delphi 6 |
| TStream supports 64 bit size and seek offsets | Delphi 6 |
| TStringList.Create(OwnsObjects: Boolean) constructor overload | Delphi 2009 |
Typed constants can no longer be assigned values by default. The {$J+} compiler directive must be used to restore previous behaviour | Delphi 6 |
| Types unit | Delphi 6 |
| U |
| UInt8 type | Delphi 2009 |
| UInt16 type | Delphi 2009 |
| UInt32 type | Delphi 2009 |
| UInt64 type | Delphi 7 |
| Unicode identifier names | Delphi 2005 |
| Unicode source files | Delphi 2005 |
| Unicode support (inc Windows API) | Delphi 2009 |
| UnicodeString type | Delphi 2009 |
| Unit conversion handling (that's unit as in mm or inches, not unit as in source code unit) | Delphi 6 |
| Unit scope names [More info] | Delphi XE2 |
| UTF8 source files | Delphi 2005 |
| UTF8Decode and UTF8Encode routines | Delphi 6 |
| UTF8String type | Delphi 6 |
| V |
| Variants unit | Delphi 6 |
| VCL styles | Delphi XE2 |
| W |
| WebStencils - scriptable text-processing engine | Delphi 12.2 |
| WideString type | Delphi 3 |
| Windows 7 & 8.1 styles | Delphi XE6 |
| Windows 10 styles | Delphi 10 |
| Windows Vista support (glass & themes) | Delphi 2007 |
| Windows XP themes | Delphi 7 |
| X |
| XML support | Delphi 5 |
| XMLDoc documentation | Delphi 2005 |
| Z |
| Zip file support added with new TZipFile class | Delphi XE2 |