On Monday, 7 October 2024 at 18:06:30 UTC, Steven Schveighoffer
wrote:
On Sunday, 6 October 2024 at 05:41:10 UTC, ryuukk_ wrote:
There is no new syntax to invent
instead of writing this error:
```
onlineapp.d(8): Error: no identifier for declarator `stats`
```
you generate a random identifier and assign it
```D
extern(D) static Identifier
generateAnonymousId(const(char)[] name)
```
https://github.com/dlang/dmd/blob/master/compiler/src/dmd/identifier.d#L165
I'm very far from being bright, but i know simple logic
The problem is not the ability to generate an id, the problem
is that the declaration is over. Anything after the closing
brace is a *new declaration*.
Whitespace is not significant in D, so you have to invent a new
syntax to to mean the declaration continues.
D sees this:
```d
struct {
int x;
int y;
} something;
```
as this:
```d
struct {
int x;
int y;
}
// DECLARATION OF ANONYMOUS STRUCT OVER.
something; // this is something different, unrelated to the
struct above.
```
One declaration defines an anonymous struct, and one that is a
new declaration `something;`. Or if you are in a function,
`something;` is treated as a statement.
You can't change existing syntax, as that would break code, so
you need new syntax.
C allows this because structs are *required* to end with a
semicolon. So the compiler knows the thing after the brace is
part of the same declaration.
-Steve
Nonono, you overthink it
Store last anonamous struct
When you see a field without a type, you assign it with that
anonymous struct
D people love to complicate everything
Keep things simple and solve people's problem
Stop trying to write essays about simple stuff
ALl the languages have solved this, D will now have move
constructor lol, yet can't do basics well