On Wednesday, 30 November 2022 at 00:40:57 UTC, Vladimir Panteleev wrote:
On Tuesday, 29 November 2022 at 18:59:46 UTC, DLearner wrote:
Suggestion: it would be clearer if the two concepts were separated: 1. Convert 'int[] VarArr;' so it produces a straightforward _value-type_ variable array, called 'VarArr'; 2. Implement a new concept 'int slice Window;' to produce an object of type 'int slice', called 'Window'. 'Window' is a 'slice' into an int array, not an array itself or even a variable.

Opinions?

Yes, that's what Rust does. It has first-class variable-size value types, D doesn't have such a feature.

I'm not really familiar with Rust, but it also seems to have the concept of either making a full copy or creating a slice with a view into the existing array. Just the default assignment via `"let c = a;"` creates a copy. While creating a slice needs a more elaborate explicit syntax. Rust also appears to be picky about the order of operations:

```Rust
fn main() {
    let mut a = [1, 2, 3, 4, 5];
    let c = a;
    let b = &mut a;

    b[1] = 99;

    println!("{:?}", b); // [1, 99, 3, 4, 5]
    println!("{:?}", a); // [1, 99, 3, 4, 5]
    println!("{:?}", c); // [1, 2, 3, 4, 5]
}
```

It is too late to change it in D, nor is it often useful in practice.

If this is really desired, then the D compiler can probably introduce a more verbose syntax for shallow array copies and start spitting out warnings about simple assignments like `"auto b = a;"`. A few years later the old syntax can be dropped.

```D
import std;

void main() {
  auto a = [1, 2, 3, 4, 5];
auto b = a.slice; // Not supported right now, but maybe is more readable?
  auto c = a.dup;

  a[1] = 99;

  writeln(a); // [1, 99, 3, 4, 5]
  writeln(b); // [1, 99, 3, 4, 5]
  writeln(c); // [1, 2, 3, 4, 5]
}
```

But way too many languages behave in the same way as D right now. I personally don't see any problem.

Reply via email to