[fpc-pascal] Generics vs templates
Graeme Geldenhuys
mailinglists at geldenhuys.co.uk
Wed Jan 10 00:37:16 CET 2018
On 2018-01-09 01:29, Ryan Joseph wrote:
> What does this have to do with generics exactly?
Everything I guess. ;-) That was the point of my reply.
When using the Generics.Collections unit of Delphi I can define a list
class that can hold Integer data types, by doing the following:
var
IntList: TList<Integer>;
begin
IntList := TList<Integer>.Create;
IntList.Add(12345);
How Generics does that (how it is implemented underneath), I don't know
- I never bothered to look. All I'm saying is that in our company the
developers love Generics, but then can't understand why performance
degrades is some areas of our project. Further testing revealed that the
usage of Generics was partly to blame.
I then investigated this, and compared some of those lists, and
implementing the equivalent manually (using TList, TObjectList and
such). For example, the above code example can be accomplish with a
TList only.
var
IntList: TList;
begin
IntList := TList.Create;
IntList.Add(Pointer(12345));
Yes, the second code sample might not look so nice (the casting), but it
was just the simplest and quickest example I could knock up to store
integers in a list. Either way, the non-Generics code example was
considerably faster in adding and freeing itself.
This was just one example. TObjectList (or a customised descendant...
eg: TAddressList) was another case where it was way faster than
Generics.Collections.pas unit provided.
Like I said, this was all tested under Delphi XE3. I didn't have time
today to test under FPC, but will try and do so tomorrow.
Regards,
Graeme
--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/
My public PGP key: http://tinyurl.com/graeme-pgp
More information about the fpc-pascal
mailing list