-
Content Count
576 -
Joined
-
Last visited
-
Days Won
7
Everything posted by Tommi Prami
-
Yellow, Has anyone done parallel tests, of some kind. Some tests I have to run takles quite a long time, and might be nice to run those in parallel., In this case tests are just procedure with all code, that does something for different inputs (from predefined array etc). So in theory it would be simple, with TTask from PPL. I was just thinking what I have to take into consideration if test fails etc. I would need to use PPL, for these, sadly OTL is not possibility. As far as I know, there is nothing built in in the DUnitX. -Tee-
-
Running tests in Parallel (or sub test in side one test)
Tommi Prami replied to Tommi Prami's topic in DUnitX
Yellow, again... Did Quick tests with PPL, seems that tested code it self did not work wery well when runniing in parallel. Do'h Heve to to think of this later... Code should be about thread safe, but did not cope, or at least I did not saw anything that was obviously not thhread safee and protected few spots with Critical section. -Tee- -
Yellow, I was pondering have you measured in some way will this actually speed things up. -Tee-
-
(FYI) Delphi can't optimize out unneeded inheritance
Tommi Prami posted a topic in Algorithms, Data Structures and Class Design
I was curious does the compiled optimize out inhetiance that is needlesly added. Turns out it can't. Is there any technical reason that this is not possible, how Delphi classes work, or it is just missing optimization from Delphi compiler., My point here is that, if you care, remove unneeded in heritance from ytou code base. Effect is very small, most likely not even measurable, but do as you please. In very tight loopå this might be porblem, most cases not. Why someone would add those, is different discussion. Sometimes I add overridden method, because I think I need to do something in there, but I just forget to remove it later. Test project: unit Unit27; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm27 = class(TForm) Button1: TButton; Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TBaseClass = class(TObject) strict private FList: TStringList; public constructor Create; destructor Destroy; override; end; TFoo1 = class(TBaseClass) strict private public constructor Create; destructor Destroy; override; end; TFoo2 = class(TFoo1) strict private public constructor Create; destructor Destroy; override; end; TFoo3 = class(TFoo2) strict private public constructor Create; destructor Destroy; override; end; TFoo4 = class(TFoo3) strict private public constructor Create; destructor Destroy; override; end; TFoo5 = class(TFoo4) strict private public constructor Create; destructor Destroy; override; end; TFoo6 = class(TFoo5) strict private public constructor Create; destructor Destroy; override; end; TFoo7 = class(TFoo6) strict private public constructor Create; destructor Destroy; override; end; TFoo8 = class(TFoo7) strict private public constructor Create; destructor Destroy; override; end; TFoo9 = class(TFoo8) strict private public constructor Create; destructor Destroy; override; end; TFoo10 = class(TFoo9) strict private public constructor Create; destructor Destroy; override; end; var Form27: TForm27; implementation {$R *.dfm} uses System.Diagnostics; procedure TForm27.Button1Click(Sender: TObject); const LOOP_COUNT = 1_000_000; var LSW: TStopwatch; begin LSW := TStopwatch.StartNew; for var I := 1 to LOOP_COUNT do begin var LObject := TBaseClass.Create; LObject.Free; end; LSW.Stop; Memo1.Lines.Add('BaseClass: ' + FormatFloat('0.00', LSW.Elapsed.TotalMilliseconds) + ' ms'); LSW := TStopwatch.StartNew; for var I := 1 to LOOP_COUNT do begin var LObject := TFoo10.Create; LObject.Free; end; LSW.Stop; Memo1.Lines.Add('unneeded inheritance: ' + FormatFloat('0.00', LSW.Elapsed.TotalMilliseconds) + ' ms'); end; procedure TForm27.FormCreate(Sender: TObject); begin end; { TBaseClass } constructor TBaseClass.Create; begin inherited Create; FList := TStringList.Create; end; destructor TBaseClass.Destroy; begin FList.Free; inherited Destroy; end; { TFoo9 } constructor TFoo9.Create; begin inherited Create; end; destructor TFoo9.Destroy; begin inherited Destroy; end; { TFoo1 } constructor TFoo1.Create; begin inherited Create; end; destructor TFoo1.Destroy; begin inherited Destroy; end; { TFoo2 } constructor TFoo2.Create; begin inherited Create; end; destructor TFoo2.Destroy; begin inherited Destroy; end; { TFoo3 } constructor TFoo3.Create; begin inherited Create; end; destructor TFoo3.Destroy; begin inherited Destroy; end; { TFoo4 } constructor TFoo4.Create; begin inherited Create; end; destructor TFoo4.Destroy; begin inherited Destroy; end; { TFoo5 } constructor TFoo5.Create; begin inherited Create; end; destructor TFoo5.Destroy; begin inherited Destroy; end; { TFoo6 } constructor TFoo6.Create; begin inherited Create; end; destructor TFoo6.Destroy; begin inherited Destroy; end; { TFoo7 } constructor TFoo7.Create; begin inherited Create; end; destructor TFoo7.Destroy; begin inherited Destroy; end; { TFoo8 } constructor TFoo8.Create; begin inherited Create; end; destructor TFoo8.Destroy; begin inherited Destroy; end; { TFoo10 } constructor TFoo10.Create; begin inherited Create; end; destructor TFoo10.Destroy; begin inherited Destroy; end; end. -
(FYI) Delphi can't optimize out unneeded inheritance
Tommi Prami replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
Any optimization that makes Object/Recor "init/deinit" faster is surely good optimization. These will make almost mall apps faster. Other good candidates would be TList, TStrings, TDataSet (and descendants), just on top of my head. All in those would help in many places. Surely there are tons of places in RTL thatb would need some love... -
(FYI) Delphi can't optimize out unneeded inheritance
Tommi Prami replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
That is quite nice. Thanks for info. -
(FYI) Delphi can't optimize out unneeded inheritance
Tommi Prami replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
For sure. I just thought (or hoped) that this kind of unneeded stuff would be optimized out quite from the start. Curiocity came from, that I stumbled upon that kind of code, not that deep for sure as my example, just wanted to measure, and report the results here. -Tee- -
(FYI) Delphi can't optimize out unneeded inheritance
Tommi Prami replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
True, Benefit would be very small. -
I think you need to fork, and make OTL work on ubuntu and make pull request, and hope it will be accepted. If Primoz don't use Linux him self, I think he has little interest to make it work on Linux, just for fun of it. -Tee-
-
Interesting read: Static search trees
Tommi Prami posted a topic in Algorithms, Data Structures and Class Design
https://curiouscoding.nl/posts/static-search-tree/ I have no clue does the claim of 40x speed hold up, but if it is 40% speed up, that would be very nice 🙂 -Tee- -
Interesting read: Static search trees
Tommi Prami replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
Also linked article: https://curiouscoding.nl/posts/cpu-benchmarks/ Could be interesting also. Article is work inn progress tough... -
Is there a (public) repository for this? Very interesting anyways, thanks...
-
What new features would you like to see in Delphi 13?
Tommi Prami replied to PeterPanettone's topic in Delphi IDE and APIs
And Delphi 64bit compiler is slow (at compiling) and resulted ASM is not too fast either. -
Registry need cleanup I think... Could not find it tough. I'll let you know if I find where this is coming from. Had typo while searching, found from expected place at the registry. This also caught my eye. Should this registration also be gone at the uninstall
-
function: how to return nil
Tommi Prami replied to jesu's topic in Algorithms, Data Structures and Class Design
Or just "setter" method with original code. Something like... function SetFloatParameter(const ADataSet: TDataSet; const AParamName: string; const AValueOK: Boolean; const AFloatValue: Double); begin Result := False; if AValueOK then begin ADataSet.ParamByName(AParamName).AsFloat := AFloatValue; Result := True; end else ADataSet.ParamByName(AParamName).Clear; end; -
Problem with Brace Highlight in IDE editor (D11.3 and D12.1)
Tommi Prami replied to Ruud's topic in Delphi IDE and APIs
Reported related that has annoyed me... https://embt.atlassian.net/servicedesk/customer/portal/1/RSS-2352 -
Buying a mini pc to install Delphi
Tommi Prami replied to Alberto Paganini's topic in Tips / Blogs / Tutorials / Videos
It depends quite a lot. But would go for I have and budget of xxx in my currency, what I can get with it. Ask people opinions about that, is it enough. And then decide to save more or purchase. I've been thinking of, if Company will get one, for my work computer. Mainly because I need laptop as laptop (the screen) maybe once or twice a year. Also with price of decent laptop, you get way better mini-PC (in terms of performance etc...). Problem being, for corporate use, that there are no good options usually from popular brands, and brands that make good models don't have support and service options that companies need. I think... IF someone has better info, I would be more than happy to stand corrected on this... -Tee- -
Interesting... Hope someone also gets involved and helps making bench marks more comprehensive. -Tee-
-
Dunno (first time heard about GetIT command line client), but would be nice be able to use wildards: getitcmd -i=FmxLinux*;ParnassusCoreEditor*;CodeSite*;AWSSDKforDelphi* or even: getitcmd -i=FmxLinux*;*Parnassus*;CodeSite*;AWSSDKforDelphi* PS. GetIT Seems to be down... Are the GetIT based installer and ISO installer compatible with each other. At least they used not to be??
-
Delphi bug reports or feature requests to "vote"/comment for (important, fatal etc)/
Tommi Prami posted a topic in Delphi IDE and APIs
Post bug reports or feature requests what you feel need some publicity. I'll post mine: Default "styled elements" appears to the inherited form needlessly (into dfm) https://embt.atlassian.net/servicedesk/customer/portal/1/RSS-779 Add Compiler/AST assisted "With remover" refactoring tool https://embt.atlassian.net/servicedesk/customer/portal/1/RSS-1666 SimpleRoundTo returns wrong value https://embt.atlassian.net/servicedesk/customer/portal/1/RSS-1651 -Tee- -
Constant declarations keeps baffling me (don't know enough I guess)
Tommi Prami posted a topic in RTL and Delphi Object Pascal
Helllo, Defining constants is pretty limited in delphi. some I think, related to single pass compiler. Latest was this case // Works MULTIPLIER = 1000; MULTIPLIED_CONSTANT = 1E-11 * MULTIPLIER; OTHER_FLOAT_CONSTANT: Double = 0.005; // Don't work MULTIPLIER: NativeInt = 1000; MULTIPLIED_CONSTANT = 1E-11 * MULTIPLIER; // <- E2026 Constant expression expected This seems kind of weird. Is this limitation or bug in the Compiler, or feature I don't know about. -Tee- -
Constant declarations keeps baffling me (don't know enough I guess)
Tommi Prami replied to Tommi Prami's topic in RTL and Delphi Object Pascal
Did not consider thsat they are those hybrid "varconsts", if type defined. If type could be defined for const could make some code cleaner. Make sure, some constant is always Double, not extended, in 32bit and also in 64bit... But anyways, thanks for info y'all... -tee- -
That feels like a bug to me. Seems that panel should not affect that, or am I missing something obvious. Vertical align into the edit would be quite nice to have. There must be palaces it would be useful. -tee-