Trying to understand multidimensional arrays in D

ag0aep6g anonymous at example.com
Tue Dec 22 17:42:20 UTC 2020


On Tuesday, 22 December 2020 at 16:56:18 UTC, Ali Çehreli wrote:
> On 12/22/20 6:35 AM, ag0aep6g wrote:
>
> > Flip the pointer syntax, too:
> >
> >      *Foo a; /* a pointer to a Foo */
>
> I am not a language expert but I think that would make D's 
> parsing complicated (like C++'s < token) because * already 
> means "derefence" in that position. So, the parser would see 
> *Foo as a potential compilation error but would have to parse 
> forward, etc.

I'm not seriously suggesting changing D's syntax. The current 
syntax is fine with me.

`Foo* a;` is already "complicated", though. `*` can also mean 
multiplication in that position:

----
struct F
{
     F opBinary(string op : "*")(F a) { return F(); }
     void opBinary(string op : "+")(int a) { import std.stdio; 
writeln("Hello, world!"); }
}
void main()
{
     F Foo;
     F a;
     Foo* a + 1; /* prints "Hello, world!" */
}
----

That's a convoluted example, of course. But it shows that the 
compiler already has to look ahead to decide what the `*` means. 
It doesn't just go "That's a type!" when it sees "Foo*".


More information about the Digitalmars-d-learn mailing list