[fpc-pascal] Re: operator overloading and counting references / creating / destoying anonymous instances
Bernd
prof7bit at googlemail.com
Thu Jul 28 18:59:34 CEST 2011
2011/7/28 Bernd <prof7bit at googlemail.com>:
> I have tried making
> use of Interface and TInterfacedObject and this seems to do what I
> want: for example when witing A := A + B the + operator would return a
> new instance and the reference counting would then automatically call
> the destructor of A when it assigns the newly created number.
I have profiled it
http://imagebin.org/165317
procedure Loop(a,b: IFoo);
var
I : Integer;
begin
for i := 0 to 10000 do begin
//BN_mul(b.Handle, a.Handle, a.Handle, b.Context);
b := a * a;
end;
end;
This creates and destroys an object of TFoo everytime and this in turn
will also create and free resources inside OpenSSL, its only spending
37% of the time doing actually useful work (BN_mul).
I think I'm not going to continue this route. I can't see any possible
way to make useful use of overloading these operators, other than
making a few lines in other places of the code look a little bit nicer
at the cost of degrading performance by a factor of 3 (for add instead
of mul its even factor 6).
Occasionally I hear other people mentioning operator overloading as a
must-have feature of any decent language but I wonder what real-world
problems they are actually solving with it. Are other compilers better
at dealing with these problems, is there room for improvement?
Bernd
More information about the fpc-pascal
mailing list