Feedback Thread: DIP 1039--Static Arrays with Inferred Length--Community Review Round 1
Luhrel
lucien.perregaux at gmail.com
Sat Jan 23 17:39:47 UTC 2021
On Wednesday, 6 January 2021 at 17:54:34 UTC, Dukc wrote:
> ...
>
> On to refining the feature if it's accepted anyway. This should
> work:
> ```
> int[$] bar(int[2] arr) // Error: not allowed in
> functions declarations
> {
> return arr ~ [3, 4];
> }
> ```
> Why? because you can use `auto` as return type. `Type[$]`
> should IMO work anywhere `auto` does. Of course this applies
> only if length of the returned array can be determined at
> compile time, as in this example.
>
I don't agree.
As stated in the DIP, I didn't allowed because of the partial
deduction.
>
> I do agree that this should probably not work:
> ```
> void bar(T)(T[$] a){}
> ```
> ...but I'd include the reasoning. That is, `auto a` would not
> be allowed either, and one can already achieve the same thing
> this way:
> ```
> void bar(T, size_t TLen)(T[TLen] a){}
> ```
>
> You need to mention that this DIP will break code in this,
> admittedly rare, case:
> ```
> int[] x = something;
> int y = something[0 .. staticArrFunc(cast(int[$])[1,2,3])];
>
As discussed in the community thread, `$` is only allowed between
braces (as been reported as a bug, but I don't know if it is
viable or not).
> ```
> I wonder if `$` should be allowed inside an expression, like
> this:
> ```
> int[$+2] a = [1,2,3]; //static array of [1,2,3,0,0]
> ```
It's a good idea, but then `int[5] a = [1,2,3];` should be
allowed too (it's not the case rn). I may add those features in
the DIP.
More information about the Digitalmars-d
mailing list