Immutability and other attributes, please review
Roman D. Boiko
rb at d-coding.com
Fri Jun 15 01:50:01 PDT 2012
On Friday, 15 June 2012 at 08:31:08 UTC, dennis luehring wrote:
> Am 15.06.2012 08:25, schrieb Jacob Carlborg:
>> On 2012-06-14 17:32, Roman D. Boiko wrote:
>>
>>> I agree, just looking how to accomplish my goals. I decided
>>> to get rid
>>> of casting, and will store everything on heap. I don't know
>>> how to put a
>>> variable of type float to the heap, and thought that it would
>>> be nice to
>>> allow the user to pass anything inside, but copy when that is
>>> not an
>>> l-value.
>>
>> Do you really need to put a float on the heap? Just pass it
>> around as a
>> value type, it's not like it's a big struct.
>>
>
> i think he needs to - else he encapsulate the float into an
> struct which is then also on the heap
>
> (ast/whatever)
> nodex -> float
> nodey -> string
> nodez -> int
> nodew -> double
>
> etc.
>
> in this example a node can contain from n types values - how
> would you solve that? or better what is the smallest(maybe
> fastest) representation
>
> there need to be a queryable tree in the end - so there is a
> need to hold the values - yes he can copy by value - but into
> whom?
>
> in the end it will be an variant-like type (with members for
> each type) on heap - whichs is not that good because that will
> cost much more mem
>
> or something like an class FloatValue -> NodeValue -> Value
> oop-hierachy whichs also will get onto the heap
>
> i would try to use something like an base-types pool for all
> the small
> float,double,int,string etc values... and pointer to this pool
> - or just use the heap :)
Well, my case is actually more complicated:
https://github.com/roman-d-boiko/dct/blob/master/fe/syntax.d
Node is a struct that holds:
* instances of Syntax **classes** (these are immutable AST nodes
without identity; please don't confuse Node which is a struct and
node which is a general term for part of a tree)
* information about their positions of Syntax nodes in source
code,
* and links to parent Node instances.
This way we have the ability to reuse most of Syntax nodes during
incremental source code edits, only regenerating lightweight Node
structs that introduce unique identity to those Syntax nodes.
As I already mentioned, Syntax nodes are immutable classes. They
have to be polymorphic (thus classes), but they are value types
without identity. They form immutable trees where each parent
knows its children. They don't know their positions in source
code, only their widths. Node structs know their parent Node
structs and on demand can quickly compute their children as
Node[] using information about children from their Syntax field.
More information about the Digitalmars-d-learn
mailing list