digitalmars.D.learn - Hidden members of Class objects
- Carl Sturtivant (8/8) Mar 06 I notice that a class with no data members has a size of two
- H. S. Teoh (8/12) Mar 06 In D, there's a pointer to the vtable and another pointer to a Monitor
- Carl Sturtivant (3/7) Mar 06 Very interesting: is the monitor field ever touched by compiled D
- kinke (6/13) Mar 06 It's (lazily initialized and) used by the
- Richard (Rikki) Andrew Cattermole (2/9) Mar 06 Yes its opt-in. https://dlang.org/spec/statement.html#synchronized-state...
- cc (15/26) Mar 07 I've stumbled over the Monitor/etc sometimes writing
- Carl Sturtivant (5/7) Mar 26 As you mentioned in another thread there's handy ABI
I notice that a class with no data members has a size of two words (at 64 bits). Presumably there's a pointer to a table of virtual functions, and one more. Is the Vtable first? A COM class that inherits from IUnknown and has no data members has a size of three words, presumably as before plus something that ordinarily is in the Vtable but can't be for a COM object as it has its own layout of that. What is actually in these objects using that space?
Mar 06
On Wed, Mar 06, 2024 at 11:39:13PM +0000, Carl Sturtivant via Digitalmars-d-learn wrote:I notice that a class with no data members has a size of two words (at 64 bits). Presumably there's a pointer to a table of virtual functions, and one more. Is the Vtable first?[...]What is actually in these objects using that space?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. T -- MAS = Mana Ada Sistem?
Mar 06
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?
Mar 06
On Thursday, 7 March 2024 at 00:28:17 UTC, Carl Sturtivant wrote:On Wednesday, 6 March 2024 at 23:45:00 UTC, H. S. Teoh wrote:It's (lazily initialized and) used by the `synchronized(<expression>)` statement (§3 of https://dlang.org/spec/statement.html#synchronized-statement) and the mentioned `synchronized` class methods (https://dlang.org/spec/class.html#synchronized-methods).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?
Mar 06
On 07/03/2024 1:28 PM, Carl Sturtivant wrote:On Wednesday, 6 March 2024 at 23:45:00 UTC, H. S. Teoh wrote:Yes its opt-in. https://dlang.org/spec/statement.html#synchronized-statementIn 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?
Mar 06
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: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)) {{ ... ```On Wednesday, 6 March 2024 at 23:45:00 UTC, H. S. Teoh wrote:Yes its opt-in. https://dlang.org/spec/statement.html#synchronized-statementIn 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?
Mar 07
On Thursday, 7 March 2024 at 00:38:30 UTC, Richard (Rikki) Andrew Cattermole wrote:Yes its opt-in. https://dlang.org/spec/statement.html#synchronized-statementAs you mentioned in another thread there's handy ABI documentation for classes and interfaces just here [https://dlang.org/spec/abi.html#classes](https://dlang.org/sp c/abi.html#classes) that spells out the story.
Mar 26