auto arr = [1, 2, 3] should be a static array, not a GC allocated array

ryuukk_ ryuukk.dev at gmail.com
Sat Jul 23 17:51:34 UTC 2022


On Saturday, 23 July 2022 at 17:37:04 UTC, Don Allen wrote:
> On Saturday, 23 July 2022 at 15:09:11 UTC, ryuukk_ wrote:
>> On Saturday, 23 July 2022 at 14:56:48 UTC, Don Allen wrote:
>>> Personally, I hope Walter ignores this conversation. I think 
>>> the current syntactic distinction (presence or absence of a 
>>> constant length) between static and dynamic arrays is fine 
>>> and whether a dynamic array is gc-allocated or 
>>> stack-allocated seems to me to be a compiler optimization 
>>> issue. I would think that if the compiler can prove that the 
>>> array doesn't need to be re-allocated due to expansion and if 
>>> allocation on the stack provides a sufficient lifetime, then 
>>> it can stack allocate. And we should only care whether dmd 
>>> does this optimization if it becomes clear that it is 
>>> important in a lot of use cases, which I doubt.
>>
>> I would be fine if the distinction was made by the compiler, 
>> but in critical performance scenarios, i don't want to gamble 
>> wether the compiler will optimize something or not
>>
>> I want to make sure that my intent is perfectly understood by 
>> the compiler
>>
>> I don't want any ambiguity, when i write the code, and more 
>> importantly when i read it
>>
>> "Oh it is `auto arr = [1, 2, 3]` will it be stack allocated? 
>> hmm idk, let me decypher this whole algorithm again`"
>
> If you don't want any ambiguity and want to be sure your array 
> is stack-allocated, then
> say so explicitly
> ````
> int arr[3]={1,2,3}
> ````
>
> rather than using auto.
>>
>>> And regarding that optimization, as hardware has gotten 
>>> faster and faster (remember the Cray 1 "supercomputer"? It 
>>> had an 80 mhz clock frequency), we have become more and more 
>>> guilty of premature optimization. The flip side of that is 
>>> that is the amount of software we all use daily that is 
>>> written in languages like Python, Javascript or PHP that are 
>>> perhaps 2 orders of magnitude slower than D and still provide 
>>> adequate performance even on our phones.
>>>
>>> My opinion.
>>>
>>> /Don
>>
>> Not everyone develop for High End devices
>>
>> Some people are fine paying more $$$ for higher Cloud instance 
>> tier, some are not
>>
>> I personally stick to the cheapest to host my stuff, and my 
>> care made me save lot of money, and my programs are all fast, 
>> no compromise, and the language shouldn't cater to the lower 
>> common denominator, the developer should make that choice
>
> And the developer *can* make that choice as the language stands 
> today.
>
> As for the gc-allocated vs static optimization, that only 
> applies to dynamic arrays and, as I said, it is far from clear 
> how important that is in the grand scheme of things, even on 
> cheap hardware. But if it's important to you that your arrays 
> be stack-allocated, use static arrays, specified explicitly 
> (not by using 'auto). And if passing by value is a problem for 
> you, pass pointers. What you want is in the language now.


I'm not asking how to write a static array in D, i'm asking to 
improve how we write them

I suggest you check the motive in the DIP 
https://github.com/dlang/DIPs/blob/master/DIPs/other/DIP1039.md



More information about the Digitalmars-d mailing list