3 days ago

On Sunday, 5 October 2025 at 05:28:49 UTC, TwoOfCups wrote:

>

I am guessing I'm not the first person to think of this.

But allowing ref to be applied to the hidden this on member functions would be nice.
could be used for lazy init of objects, reassigning the lvalue and stuff.

This has previously been implemented here: https://github.com/dlang/dmd/pull/15389

It caused different problems, so it has been reverted here: https://github.com/dlang/dmd/pull/15637

2 days ago
On Sunday, 5 October 2025 at 07:40:25 UTC, TwoOfCups wrote:
> On Sunday, 5 October 2025 at 06:56:27 UTC, Richard (Rikki) Andrew Cattermole wrote:
>>
>> Why not use a static method instead?
>
>
> yeah i was thinking about doing that but like i said the serialization code is already a fucking mess of weird little special cases. so now i have to add checks for if the proxy functions are static and handle in a different way.

I use a static method for (de)serialization, it works pretty well.

You should require static methods IMO, this is the right abstraction. Because you are creating a new instance, and that requires different semantics than just overwriting an existing one.

-Steve
2 days ago
On Sunday, 5 October 2025 at 21:34:01 UTC, Steven Schveighoffer wrote:
> On Sunday, 5 October 2025 at 07:40:25 UTC, TwoOfCups wrote:
>> On Sunday, 5 October 2025 at 06:56:27 UTC, Richard (Rikki) Andrew Cattermole wrote:
>>>
>>> Why not use a static method instead?
>>
>>
>> yeah i was thinking about doing that but like i said the serialization code is already a fucking mess of weird little special cases. so now i have to add checks for if the proxy functions are static and handle in a different way.
>
> I use a static method for (de)serialization, it works pretty well.
>
> You should require static methods IMO, this is the right abstraction. Because you are creating a new instance, and that requires different semantics than just overwriting an existing one.
>
> -Steve

My original design was to just disallow classes completely. It was fully oriented towards basic types, sum types, structs and ranges. And it is pretty nice as just that. I just didn't want to do a type registry to make class inheritance in deserialization possible.

But time passes and the desire for inheritance in my serialization became too tempting. So I added a class registry and now I'm trying to go the next step of being able to properly serialize arbitrary graphs of object references where the correct references could be restored on deserialization..

so some kind of uuid gets written when an aggregate has an object of a special type of class. For general objects I just make a new object and serialize/deserialize the data in place.

But for a special type of object (the base class for all entities in a game) I want this uuid lookup system.

it is made more messy because I want the serialization code to handle top level serialization calls to these objects directly, aka serialize the data no uuid stuff, but then if this type is seen to be a member then we do the uuid behavior.

so my system has been evolving from one design decision to the next. I am trying to work with what I already have without needing to redesign large parts.
1 2
Next ›   Last »