On Tuesday, 19 July 2022 at 14:04:09 UTC, Quirin Schroll wrote:
> On Thursday, 14 July 2022 at 13:14:59 UTC, ryuukk_ wrote:
> It is misleading, nobody expect this to be GC allocated
It should be equal to:
int[3] arr = [1, 2, 3]
Also why it is GC allocated without requiring new
?
Because it’s useful to more people than if it were the opposite. If you find that staticArray
too verbose, there’s a single-keystroke way to get pseudo-literals for static arrays:
struct s
{
static typeof([ Ts.init ][0])[Ts.length] opIndex(Ts...)(auto ref Ts args)
{
import std.functional : forward;
return [ forward!args ];
}
}
Usage:
void main()
{
auto empty = s[];
static assert(is(typeof(empty) == void[0]));
auto xs = s[1,cast(byte)2,3];
static assert(is(typeof(xs) == int[3]));
static struct NoCopy { @disable this(this); }
auto noCopies = s[NoCopy(), NoCopy()];
}
You’re free to choose any name (except keywords). If you name it stackalloc
, it almost looks like taken from C#.
That's not the point..
The difference between:
- having to write the helper code
- having to tap into the std
- having then to import this helper module everywhere
- having to spend time doing all of the above and carry that file in all my projects
vs
Having to just type stackalloc
in the C# example, or _
in some other languages
For something as basic as wanting an inferred fixed static array length
So the language can help me so i don't have to manually count how many elements are in there: auto arr = [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
Let's stick with C then, why bother coming up with a better language?
Same with Tagged Union, same with Tuple, same with Nullable
And then it always end up in these endless discussion where one has to constantly remind people this simple fact, and then he feels demotivated, and then withdraw his suggestion, and then gets interested in an other language instead
I'm not a compiler/language developer, i am a language user, little things like that makes the difference