Immutability and other attributes, please review

Dmitry Olshansky dmitry.olsh at gmail.com
Thu Jun 14 10:50:31 PDT 2012


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)
>
> 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


-- 
Dmitry Olshansky


More information about the Digitalmars-d-learn mailing list