Skip to content

Commit 0b8c25c

Browse files
committed
Numerous additions to Delphi Version Features page
1 parent f22da64 commit 0b8c25c

File tree

1 file changed

+119
-21
lines changed

1 file changed

+119
-21
lines changed

notes/version-features.html

+119-21
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<h1>Delphi Version Features</h1>
88

9-
<p>This page contains notes about which features were introduced in which versions of Delphi<a href="#footnote-1"><sup>1</sup></a>.</p>
9+
<p>This page contains an incomplete list of which features were introduced in which versions of Delphi<a href="#footnote-1"><sup>1</sup></a>.</p>
1010

1111
<p>If you have any additions or corrections please <a href="https://github.com/delphidabbler/delphidabbler.github.io/issues">create an issue</a> on GitHub (<small>GitHub account required</small>).</p>
1212

@@ -49,10 +49,22 @@ <h1>Delphi Version Features</h1>
4949
<td><code>{$MESSAGE}</code> directive</td>
5050
<td>Delphi 6</td>
5151
</tr>
52+
<tr>
53+
<td><code>{$POINTERMATH}</code> directive</td>
54+
<td>Delphi 2009</td>
55+
</tr>
56+
<tr>
57+
<td><code>{$TEXTBLOCK}</code> directive to determine how line breaks are treated in multiline strings.</td>
58+
<td>Delphi 12</td>
59+
</tr>
5260
<tr>
5361
<td><code>{$WARN}</code> directive</td>
5462
<td>Delphi 7</td>
5563
</tr>
64+
<tr>
65+
<td>64 bit binary versions of the Delphi 32 and 64 bit compilers</td>
66+
<td>Delphi 12.2</td>
67+
</tr>
5668
<tr>
5769
<td>64 bit compiler</td>
5870
<td>Delphi XE2</td>
@@ -69,6 +81,10 @@ <h1>Delphi Version Features</h1>
6981
<td>Attributes</td>
7082
<td>Delphi 2010</td>
7183
</tr>
84+
<tr>
85+
<td>Binary integer literals, e.g. <code>%100101</code></td>
86+
<td>Delphi 11</td>
87+
</tr>
7288
<tr>
7389
<td>class constructors / destructors</td>
7490
<td>Delphi 2010</td>
@@ -109,10 +125,18 @@ <h1>Delphi Version Features</h1>
109125
<td>Dynamic arrays</td>
110126
<td>Delphi 4</td>
111127
</tr>
128+
<tr>
129+
<td>Digit separators in integer and floating point literals: e.g. <code>1_000_000</code></td>
130+
<td>Delphi 11</td>
131+
</tr>
112132
<tr>
113133
<td>Dynamic array concatenation and addition extensions. Dynamic arrays can be initialised by assigning an array constant, as in <code>DI := [1, 2, 3];</code> and can be concatenated using code like <code>DI := DI + [1, 2, 3];</code> or <code>DI := DJ + DK</code>, where <var>DI</var>, <var>DJ</var> &amp; <var>DK</var> are all dynamic integer arrays.</td>
114134
<td>Delphi XE7</td>
115135
</tr>
136+
<tr>
137+
<td><var>EncodePath</var>, <var>EncodeAuth</var>, <var>EncodeQuery</var> &amp; <var>EncodeForm</var> functions</td>
138+
<td>Delphi 10.1</td>
139+
</tr>
116140
<tr>
117141
<td><var>EOSError</var> (instead of <var>EWin32Error</var>)</td>
118142
<td>Delphi 6</td>
@@ -125,10 +149,18 @@ <h1>Delphi Version Features</h1>
125149
<td><var>Exit</var> with result parameter</td>
126150
<td>Delphi 2009</td>
127151
</tr>
152+
<tr>
153+
<td><var>Extended</var> type changes size depending upon the hardware and operating system<sup><a href="#footnote-5">5</a></sup></td>
154+
<td>Delphi XE2</td>
155+
</tr>
128156
<tr>
129157
<td>Final methods</td>
130158
<td>Delphi 2006</td>
131159
</tr>
160+
<tr>
161+
<td><var>FixedInt</var> &amp; <var>FixedUInt</var> types - 32 bit signed &amp; unsigned integers respectively across all platforms</td>
162+
<td>Delphi XE8</td>
163+
</tr>
132164
<tr>
133165
<td>Floating point number comparison routines added to <var>Math</var> unit.</td>
134166
<td>Delphi 6<a href="#footnote-3"><sup>3</sup></a></td>
@@ -149,6 +181,14 @@ <h1>Delphi Version Features</h1>
149181
<td>Generics</td>
150182
<td>Delphi 2009</td>
151183
</tr>
184+
<tr>
185+
<td><var>GetCompilerVersion</var> &amp; <var>GetRTLVersion</var> routines to get compiler &amp; RTL versions as 16 bit unsigned integers with major version in the high byte and minor version in the low byte.</td>
186+
<td>Delphi 12</td>
187+
</tr>
188+
<tr>
189+
<td>Hash (System.Hash) unit</td>
190+
<td>Delphi XE8</td>
191+
</tr>
152192
<tr>
153193
<td><var>IInterface</var></td>
154194
<td>Delphi 6</td>
@@ -158,7 +198,7 @@ <h1>Delphi Version Features</h1>
158198
<td>Delphi 6</td>
159199
</tr>
160200
<tr>
161-
<td>Inline variable declarations</td>
201+
<td>Inline variable declarations: e.g. <code><strong>for var</strong> I: Integer := 0 <strong>to</strong> 9 <strong>do</strong></code> or, with type inference, <code><strong>for var</strong> I := 0 <strong>to</strong> 9 <strong>do</strong></code></td>
162202
<td>Delphi 10.3</td>
163203
</tr>
164204
<tr>
@@ -174,15 +214,7 @@ <h1>Delphi Version Features</h1>
174214
<td>Delphi XE7</td>
175215
</tr>
176216
<tr>
177-
<td><var>Int8</var> type</td>
178-
<td>Delphi 2009</td>
179-
</tr>
180-
<tr>
181-
<td><var>Int16</var> type</td>
182-
<td>Delphi 2009</td>
183-
</tr>
184-
<tr>
185-
<td><var>Int32</var> type</td>
217+
<td><var>Int8</var>, <var>Int16</var> &amp; <var>Int32</var> types</td>
186218
<td>Delphi 2009</td>
187219
</tr>
188220
<tr>
@@ -193,10 +225,26 @@ <h1>Delphi Version Features</h1>
193225
<td>Interface to object casting</td>
194226
<td>Delphi 2010</td>
195227
</tr>
228+
<tr>
229+
<td>IOUtils unit</td>
230+
<td>Delphi 2010</td>
231+
</tr>
196232
<tr>
197233
<td><strong>library</strong> directive</td>
198234
<td>Delphi 6</td>
199235
</tr>
236+
<tr>
237+
<td>Linux compiler for server applications</td>
238+
<td>Delphi 10.2</td>
239+
</tr>
240+
<tr>
241+
<td>Long string literal support: string literals can now be longer than 255 characters.</td>
242+
<td>Delphi 12</td>
243+
</tr>
244+
<tr>
245+
<td><var>LongInt</var> &amp; <var>LongWord</var> type sizes become platform dependent: 32 bit on 32 bit platforms, 64 bit on 64 bit platforms.</td>
246+
<td>Delphi XE8</td>
247+
</tr>
200248
<tr>
201249
<td><var>LongWord</var> type</td>
202250
<td>Delphi 4</td>
@@ -205,10 +253,26 @@ <h1>Delphi Version Features</h1>
205253
<td><var>Margins</var> and <var>Padding</var> properties on <var>TControl</var></td>
206254
<td>Delphi 2006</td>
207255
</tr>
256+
<tr>
257+
<td>Multiline string literals, delimited by triple quotes (<code>'''</code>)</td>
258+
<td>Delphi 12</td>
259+
</tr>
208260
<tr id="namespaces">
209261
<td>Namespaces [<a href="https://docwiki.embarcadero.com/RADStudio/Alexandria/en/Using_Namespaces_with_Delphi">more info</a>]. See also: <a href="#unit-scope-names"><em>Unit scope names</em></a>.</td>
210262
<td>Delphi 2005</td>
211263
</tr>
264+
<tr>
265+
<td>NaN number comparisons supported</td>
266+
<td>Delphi 12</td>
267+
</tr>
268+
<tr>
269+
<td><var>NativeInt</var> &amp; <var>NativeUInt</var> types</td>
270+
<td>Delphi 7<a href="#footnote-4"><sup>4</sup></td>
271+
</tr>
272+
<tr>
273+
<td><var>NativeInt</var> &amp; <var>NativeUInt</var> types become weak references. They can no longer be used as separate types.</td>
274+
<td>Delphi 12</td>
275+
</tr>
212276
<tr>
213277
<td>Nested constants within classes / records</td>
214278
<td>Delphi 2005</td>
@@ -229,12 +293,20 @@ <h1>Delphi Version Features</h1>
229293
<td><strong>platform</strong> directive</td>
230294
<td>Delphi 6</td>
231295
</tr>
296+
<tr>
297+
<td><var>Pointer</var> type size becomes platform dependent: 32 bit on 32 bit platforms, 64 bit on 64 bit platforms.</td>
298+
<td>Delphi XE2</td>
299+
</tr>
300+
<tr>
301+
<td>Predefined record helpers for cores types: simple types and <strong>string</strong>, <var>TDateTime</var> and <var>Currency</var> types.</td>
302+
<td>Delphi 11</td>
303+
</tr>
232304
<tr>
233305
<td><var>RaiseLastOSError</var> procedure</td>
234306
<td>Delphi 6</td>
235307
</tr>
236308
<tr>
237-
<td>Record Helpers for simple types</td>
309+
<td>Record Helpers for simple types and sets</td>
238310
<td>Delphi XE3</td>
239311
</tr>
240312
<tr>
@@ -261,6 +333,10 @@ <h1>Delphi Version Features</h1>
261333
<td>Sealed classes</td>
262334
<td>Delphi 2006</td>
263335
</tr>
336+
<tr>
337+
<td>Skia integration</td>
338+
<td>Delphi 12</td>
339+
</tr>
264340
<tr>
265341
<td><strong>static</strong> directive for class methods</td>
266342
<td>Delphi 2005</td>
@@ -293,10 +369,22 @@ <h1>Delphi Version Features</h1>
293369
<td>Text format form files</td>
294370
<td>Delphi 5</td>
295371
</tr>
372+
<tr>
373+
<td><var>TForm.ShowInTaskbar</var> property</td>
374+
<td>Delphi 12</td>
375+
</tr>
296376
<tr>
297377
<td><var>TFormatSettings</var> and overloaded format and conversion routines that use it</td>
298378
<td>Delphi 7</td>
299379
</tr>
380+
<tr>
381+
<td><var>TNoRefCountObject</var> non-reference-counted <var>IInterface</var> implementation</td>
382+
<td>Delphi 11</td>
383+
</tr>
384+
<tr>
385+
<td><var>TOrderedDictionary</var> - a sorted generic dictionary class.</td>
386+
<td>Delphi 12.2</td>
387+
</tr>
300388
<tr>
301389
<td><var>TObject.Equals</var> virtual method</td>
302390
<td>Delphi 2009</td>
@@ -317,6 +405,18 @@ <h1>Delphi Version Features</h1>
317405
<td>Touch support</td>
318406
<td>Delphi 2010</td>
319407
</tr>
408+
<tr>
409+
<td><var>TPair&lt;TKey,TValue&gt;</var> record</td>
410+
<td>Delphi 2009</td>
411+
</tr>
412+
<tr>
413+
<td><var>TParallelArray</var> - a class to enable running of some operations in parallel threads.</td>
414+
<td>Delphi 12.2</td>
415+
</tr>
416+
<tr>
417+
<td><var>TProc&lt;T1,...&gt;</var>, <var>TFunc&lt;T1,...&gt;</var> &amp; <var>TPredicate&lt;T&gt;</var></td>
418+
<td>Delphi 2010</td>
419+
</tr>
320420
<tr>
321421
<td><var>TRegistry</var> supports access flags</td>
322422
<td>Delphi 6</td>
@@ -342,15 +442,7 @@ <h1>Delphi Version Features</h1>
342442
<td>Delphi 6</td>
343443
</tr>
344444
<tr>
345-
<td><var>UInt8</var> type</td>
346-
<td>Delphi 2009</td>
347-
</tr>
348-
<tr>
349-
<td><var>UInt16</var> type</td>
350-
<td>Delphi 2009</td>
351-
</tr>
352-
<tr>
353-
<td><var>UInt32</var> type</td>
445+
<td><var>UInt8</var>, <var>UInt16</var> &amp; <var>UInt32</var> types</td>
354446
<td>Delphi 2009</td>
355447
</tr>
356448
<tr>
@@ -405,6 +497,10 @@ <h1>Delphi Version Features</h1>
405497
<td>XMLDoc documentation</td>
406498
<td>Delphi 2005</td>
407499
</tr>
500+
<tr>
501+
<td>Zip file support added with new <var>TZipFile</var> class</td>
502+
<td>Delphi XE2</td>
503+
</tr>
408504
</tbody>
409505

410506
</table>
@@ -418,6 +514,8 @@ <h1>Delphi Version Features</h1>
418514
<li id="footnote-1">All this information relates to the native Delphi compiler, not the .NET compiler.</li>
419515
<li id="footnote-2">From Delphi XE5 the use of the <code>{$IFEND}</code> directive results in a compiler error unless a <code>{$LEGACYIFEND}</code> directive precedes the first <code>{$IFEND}</code> directive or unless the use of legacy <code>{$IFEND}</code> is enabled in project options.</li>
420516
<li id="footnote-3">Source: EFG's Computer Lab (<small>defunct website</small>). This source also stated that the Math unit did not change from Delphi 4 to Delphi 5.</li>
517+
<li id="footnote-4"><var>NativeInt</var> and <var>NativeUInt</var> were introduced as 64 bit signed / unsigned integers respectively with Delphi 7. Delphi 2009 redefined them as 32 bit and Delphi XE2 made them either 32 or 64 bit depending on the operating system's native integer size. Source: <a href="https://blog.dummzeuch.de/2018/09/08/nativeint-nativeuint-type-in-various-delphi-versions/">twm's blog.</a></li>
518+
<li od="footnote-5">See the <a href="https://docwiki.embarcadero.com/Libraries/en/System.Extended">Embarcadero DocWiki for the <var>Extended</var> type</a> for a full explanation.</li>
421519
</ol>
422520
</div><!-- /.well .well-sm -->
423521
</footer>

0 commit comments

Comments
 (0)