On Thursday, 7 March 2024 at 00:38:30 UTC, Richard (Rikki) Andrew Cattermole wrote:

On 07/03/2024 1:28 PM, Carl Sturtivant wrote:
On Wednesday, 6 March 2024 at 23:45:00 UTC, H. S. Teoh wrote:
In D, there's a pointer to the vtable and another pointer to a Monitor object (used for synchronized methods).  There was talk about getting rid of the Monitor field years ago, but nothing has happened yet.

Very interesting: is the monitor field ever touched by compiled D code at any point nowadays? Or is it just vestigial?

Yes its opt-in. https://dlang.org/spec/statement.html#synchronized-statement

I've stumbled over the Monitor/etc sometimes writing serialization, RPC, LUA etc modules iterating over class members, looking for UDAs, after trying to separate everything out using isFunction/isTemplate/etc, on top of dealing with overload spaghetti, I now just explicitly do something dumb like this to get those edge cases out of the way:

```d
static foreach (sym; __traits(allMembers, T))
static if (!["__ctor","__dtor","__xdtor","Monitor","factory"].canFind(sym)) {{
        ...
```

Reply via email to