On 14/09/2020 19:41, Michael Van Canneyt via fpc-devel wrote:
Better add an additional (optional) parameter SkipInit : Boolean = False;

Michael.

That won't work because constructs such as "var Data: array of array of Byte; SetLength(Data, 25, 25);" are allowed.  Eevn if it's technically an intrinsic and the compiler can have customised handling, I think it will cause too much confusion to have an optional Boolean parameter like that.  Also, it might cause unnecessary additional overhead since it wastes a register to pass the Boolean value that, in most cases, is equal to False (implicitly or otherwise).

Finally, the fact it's a parameter implies that you can use a (non-deterministic) variable as an actual parameter, which is logically something that should never have a practical application in this case; i.e. why should initialising the data to zeroes be undecided at run-time? Surely you, the programmer, know what you're going to do with that data block.

I understand there's a risk of it breaking existing code should a unit have a subroutine with the name "SetLengthNoInit", although long names with multiple words reduces this risk, and if there is a clash, doesn't the compiler prioritise the subroutine defined in the unit? Should you want to use the internal "SetLengthNoInit" in this case, you will need to call "System.SetLengthNoInit", right?

Gareth aka. Kit


--
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to