-
Content Count
1518 -
Joined
-
Last visited
-
Days Won
154
Everything posted by Stefan Glienke
-
GNU License 🤦♂️ Some of the methods in that helper are obsolete since XE7 because we have Insert, Add, Delete for dynamic arrays. Most of the other methods are in Spring.pas TArray which is not a helper for the System.Generics.Collections one but reimplements its methods and adds its own. For the TArrayRecord<T> type Spring.pas has Vector<T> (the naming is taken from C++ where this is the dynamic array type name)
-
Micro optimization: Math.InRange
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Indeed here it's the opposite, due to the way it's written it always has to perform both checks (see my third point). But depending on what you do after the if it could be done completely branchless. -
Micro optimization: Math.InRange
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
While your assessment on Math.InRange is true (it is coded in a bad way plus the compiler produces way too many conditional jumps - https://quality.embarcadero.com/browse/RSP-21955) you certainly need to read some material on how to properly microbenchmark and how to read assembly. First of all, even though the Delphi compiler is pretty terrible at optimizing away dead code it might omit the if statement if there is nothing to do after it. Second - be careful if one of your loops spans multiple cache lines while others don't this affects the outcome slightly and can in such a case affect the result in a noticeable way. Third - with a static test like this you prove nothing - the branch predictor will do its job. If you want to benchmark the raw performance of one vs the other you need to give it random data which does not follow the "not in range for a while, in range for a while, not in range until the end" pattern -
Fast lookup tables - TArray.BinarySearch vs Dictionary vs binary search
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
An impressive number of implemented collections for sure but it's only compatible with FreePascal and from a quick look you won't easily make that code Delphi compatible. But thanks for mentioning it - I will certainly run some benchmarks to compare. -
Fast lookup tables - TArray.BinarySearch vs Dictionary vs binary search
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
@Dany Marmur Agreed - it's the job of runtime library developers to get the most out of their data structures and algorithms so the users of those libraries don't have to worry 99.9% of the time but just chose the reasonable type/algo for the job. Funny enough I am currently in the process to do exactly that for my library and can tell you that for the RTL it's certainly not the case, unfortunately. -
Is set a nullable type? (record constraint)
Stefan Glienke replied to Eugine Savin's topic in RTL and Delphi Object Pascal
No version ever compiled this code - I just checked with XE8 to 10.4 (all the latest update/hotfixes) Reported since 10.0.1 - see https://quality.embarcadero.com/browse/RSP-13198 -
Fast lookup tables - TArray.BinarySearch vs Dictionary vs binary search
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
And then after you spent quite some time implementing this without defects that it would not be any faster than all the ready-to-use collection types or the actual performance improvement would be completely negligible. -
Do bug fix patches really require active subscription?
Stefan Glienke replied to David Heffernan's topic in General Help
@Remy Lebeau Selective perception? If a compiler is not a critical product function I don't know what is. -
Do bug fix patches really require active subscription?
Stefan Glienke replied to David Heffernan's topic in General Help
I think at least in Germany the court would say otherwise - keyword: Nachbesserung und Gewährleistung -
Good quality Random number generator implementation
Stefan Glienke replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
pcg32 should be easy enough to implement from the c code. -
Several F2084 Internal Error on Delphi 10.4.2
Stefan Glienke replied to Davide Angeli's topic in Delphi IDE and APIs
That's what QA said before 10.4.2 released -
Several F2084 Internal Error on Delphi 10.4.2
Stefan Glienke replied to Davide Angeli's topic in Delphi IDE and APIs
Or he just wants to see the correct values when inspecting them while debugging? -
Find exception location from MAP file?
Stefan Glienke replied to A.M. Hoornweg's topic in RTL and Delphi Object Pascal
No need to assume or guess anything - the base addresses are in the map file. -
What type of collections do you have in mind? Not all types of collections can be implemented completely lock-free in an efficient way or they are hilariously complex to implement. Depending on the implementation some operations might not have the same characteristics of a regular thread-unsafe implementation.
-
Several F2084 Internal Error on Delphi 10.4.2
Stefan Glienke replied to Davide Angeli's topic in Delphi IDE and APIs
No, we are not - some individuals who also happen to be MVP are. -
Good quality Random number generator implementation
Stefan Glienke replied to Tommi Prami's topic in Algorithms, Data Structures and Class Design
https://xkcd.com/221/ -
LSP has nothing to do with that but the filter in the suggestion box. There were several plugins that could do that for ages.
-
What about additional free open source C++ libraries on GetIt ?
Stefan Glienke replied to Rolf Fankhauser's topic in General Help
Because what percentage of overall C++ development is being done in Visual Studio again? -
Display Componant like Gauges Led and Graphic for Delphi FMX
Stefan Glienke replied to Remi1945's topic in I made this
https://choosealicense.com/ is also a good help to decide which one to pick. -
What about additional free open source C++ libraries on GetIt ?
Stefan Glienke replied to Rolf Fankhauser's topic in General Help
Nuget is for .Net, not for C++. C++ has a bunch of package managers but none of them is considered the de facto standard that almost everyone uses. -
Display Componant like Gauges Led and Graphic for Delphi FMX
Stefan Glienke replied to Remi1945's topic in I made this
This: This means it will be basically useless for commercial projects. -
64bit Debugger Not Handling Memory Problems
Stefan Glienke replied to CB2021's topic in General Help
That dialog there is definitely not from the debugger. Make sure you did not accidentally disable breaking on exceptions. -
RegEx performance
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Opinions on regex differ - however for this case using a regex is like using a bucket-wheel excavator to plant a pansy. -
RegEx performance
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Just skip any spaces and then check if it's '(' or not: function IsFunctionInString(const aFunction, aStr: string): boolean; var vPos: Integer; p: PChar; begin vPos := Pos(aFunction, aStr); if vPos > 0 then begin p := @aStr[vPos + aFunction.Length]; while p^ = ' ' do Inc(p); Result := p^ = '('; end else Result := False; end; -
But what if I would not answer there 😉 Seriously - I understand people getting their area here if they don't have their own place already - Spring4D already has its own place.