+1 yes Otto s comment is correct so it seems to be the next logical step.

Otto Fowler <ottobackwa...@gmail.com> schrieb am Sa., 4. Feb. 2023, 15:42:

>  Any DSL at some point will consider stack / call / variable contexts.
> This seems reasonable.
>
> From: Christofer Dutz <christofer.d...@c-ware.de>
> <christofer.d...@c-ware.de>
> Reply: dev@plc4x.apache.org <dev@plc4x.apache.org> <dev@plc4x.apache.org>
> Date: February 4, 2023 at 05:18:59
> To: dev@plc4x.apache.org <dev@plc4x.apache.org> <dev@plc4x.apache.org>
> Subject:  [DISCUSS] Generally move to using "Context" objects inside our
> generated code?
>
> Hi all,
>
> recently I have been working on supporting dynamic tags like “_itemCount”,
> “_curItem” and “_lastItem” in array elements.
>
> In java I used ThreadLocals for this as it felt like a Java-Native way and
> it wouldn’t blow up the signatures of our Parser, Serializer and
> GetLengthInXYZ methods.
>
> Now when looking for something similar in Go, it seems in such cases
> Contexts are used. These are sort of like a HashMap wrapped with little
> util methods. In this HashMap you pass along values that are “in context” …
> if you change the context, a copy of the old context is created and then
> the updated/added values are updated/added to the HashMap.
>
> So, in an array I add the additional information to the existing one by:
>
> arrayCtx := spiContext.CreateArrayContext(ctx, int(_numItems),
> int(_curItem))
>
>
> and then simply pass in the „arrayContext”. And for accessing it I simply
> for this:
>
> spiContext.GetLastItemFromContext(ctx)
>
>
>
> Admittedly I’m not a big fan of crating copies of the full context every
> time, I would prefer to be able to push to sort of a context stack, but I
> guess that’s the way things work in Go.
>
>
>
> When I wanted to add the functionality of Java and Go to PLC4C I was a bit
> stuck, as neither concept really existed.
>
>
>
> However thinking a bit more about it, adding the concept of Contexts to C
> was actually quite simple.
>
>
>
> Now that got me thinking:
>
> Shouldn’t we implement the same pattern for Java? It should be easy to
> implement.
>
>
>
> And while I was thinking, I even thought: Shouldn’t we extend this idea and
> also get the ReadBuffer, WriteBuffer, the Encoding, the ByteOrder and
> anything we’re currently passing along with “WithXYZOption” var-args, into
> these Contexts and simply pass along one Context object?
>
> I think this would clean up the code quite a bit.
>
>
>
> What do you think?
>
>
>
> Chris
>

Reply via email to