Immutability and other attributes, please review

Jonathan M Davis jmdavisProg at gmx.com
Thu Jun 14 10:43:58 PDT 2012


On Thursday, June 14, 2012 21:27:58 Dmitry Olshansky wrote:
> On 14.06.2012 20:32, Roman D. Boiko wrote:
> > On Thursday, 14 June 2012 at 16:24:43 UTC, Jonathan M Davis wrote:
> >> On Thursday, June 14, 2012 17:32:03 Roman D. Boiko wrote:
> >>> I don't know how to put a variable of type float to the heap
> >> 
> >> auto f = new float;
> >> *f = 2.1;
> >> 
> >> - Jonathan M Davis
> > 
> > Except for immutable I would need to cast when passing into a function.
> > That's dangerous, given that *f might be changed later. But looks like
> > Timon's suggestion from my other question should work.
> > 
> > immutable a = [2.1].ptr;
> 
> That or pack the logic into a pure function, e.g. this should work:
> 
> immutable ap = newPureFloat(3.1415);
> 
> float* newPureFloat(float val)pure
> {
> float* p = new float;
> *p = val;
> return p;
> }

Yeah, I was just thinking that maybe we should make a generic function for 
this and add it to Phobos. Something like

auto makePtr(T, U)(U value) if(is(U : T)) {}
auto makePtr(T, Args...)(Args args) {}

where the first one works with primitive types and the second one works with 
structs. Then you could do

auto f = makePtr!(immutable float)(2.1);

I think that I'll have to see about throwing together something like that
tonight and create a pull request.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list