Re: std.experimental.allocator and const etc.

2018-07-17 Thread Steven Schveighoffer via Digitalmars-d

On 7/15/18 9:06 AM, John Colvin wrote:

Currently the API's don't support const(void)[], e.g.

import std.experimental.allocator : makeArray, theAllocator, dispose;
import std.experimental.allocator.mallocator : Mallocator;

void main()
{
     const a = theAllocator.makeArray!ubyte(100);
     theAllocator.dispose(a);
     // can't call RCIAllocator.deallocate(void[] b) with const(ubyte)[]

     const(void)[] b = Mallocator.instance.allocate(100);
     Mallocator.instance.deallocate(b);
     // can't call Mallocator.deallocate(void[] b) with const(void)[]
}

Is this deliberate? It's pretty annoying.


I don't think it's something that was considered. I would expect at 
least dispose to support it by casting away const.


-Steve


Re: std.experimental.allocator and const etc.

2018-07-16 Thread Nicholas Wilson via Digitalmars-d

On Sunday, 15 July 2018 at 13:06:16 UTC, John Colvin wrote:

Currently the API's don't support const(void)[], e.g.

import std.experimental.allocator : makeArray, theAllocator, 
dispose;

import std.experimental.allocator.mallocator : Mallocator;

void main()
{
const a = theAllocator.makeArray!ubyte(100);
theAllocator.dispose(a);
// can't call RCIAllocator.deallocate(void[] b) with 
const(ubyte)[]


const(void)[] b = Mallocator.instance.allocate(100);
Mallocator.instance.deallocate(b);
// can't call Mallocator.deallocate(void[] b) with 
const(void)[]

}

Is this deliberate? It's pretty annoying.


Probably not, the lifetime of the referenced memory is over. 
There's a couple of other places where we cast away const and 
shared before destroying and object.


std.experimental.allocator and const etc.

2018-07-15 Thread John Colvin via Digitalmars-d

Currently the API's don't support const(void)[], e.g.

import std.experimental.allocator : makeArray, theAllocator, 
dispose;

import std.experimental.allocator.mallocator : Mallocator;

void main()
{
const a = theAllocator.makeArray!ubyte(100);
theAllocator.dispose(a);
// can't call RCIAllocator.deallocate(void[] b) with 
const(ubyte)[]


const(void)[] b = Mallocator.instance.allocate(100);
Mallocator.instance.deallocate(b);
// can't call Mallocator.deallocate(void[] b) with 
const(void)[]

}

Is this deliberate? It's pretty annoying.