is my code to get CTFE instantiated object valid D ?
chmike via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 27 22:30:26 PDT 2016
On Friday, 27 May 2016 at 21:41:02 UTC, Kagamin wrote:
> On Friday, 27 May 2016 at 20:20:36 UTC, chmike wrote:
>> Is this code valid D or is the behavior undefined due to the
>> cast ?
>
> A mutable object can be synchronized on:
> synchronized(Category.instance){}
> This will create and store a mutex in the object (sad but true,
> design taken from java). If the immutable object is in readonly
> memory, it will crash on write.
That is a good argument. Thanks. It would indeed be a good idea
to put immutable objects in a read only portion of the code.
Would it be different if the object was declared const instead of
immutable ?
I want compile time instantiation and mutable references to the
object. Apparently only immutable and const objects can be
instantiated at compile time. I also want an app wide singleton
(not stored in TLS). If I use _gshared I apparently wouldn't get
a compile time instantitation.
It's to implement the flyweight pattern. I don't want to use
Rebindable because the assembly code generated by dmd is
currently inefficient. Rebindable cast away the const but the non
constant reference is not exposed.
What is the difference between a const and immutable object ?
would a const object be allowed to modify itself by using a hash
table or caching results inside ? Is a static const Category c
variable a TLS variable ?
This is a bit frustrating because it is trivial to implement in C
and C++.
More information about the Digitalmars-d-learn
mailing list