Immutability and other attributes, please review

Jonathan M Davis jmdavisProg at gmx.com
Thu Jun 14 11:00:53 PDT 2012


On Thursday, June 14, 2012 21:50:31 Dmitry Olshansky wrote:
> On 14.06.2012 21:43, Jonathan M Davis wrote:
> > 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) {}
> 
> I think make new would be more self-explanatory. Ptr doesn't imply heap.
> Other then this, it looks useful.
> (I'd love to see an optional allocator parameter... but have to wait I
> guess)

Well, we use make with std.container already for essentially the same thing, 
only it's specifically for containers.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list