digitalmars.D - std.experimental.allocator and const etc.
- John Colvin (16/16) Jul 15 2018 Currently the API's don't support const(void)[], e.g.
- Nicholas Wilson (4/20) Jul 16 2018 Probably not, the lifetime of the referenced memory is over.
- Steven Schveighoffer (4/21) Jul 17 2018 I don't think it's something that was considered. I would expect at
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.
Jul 15 2018
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.
Jul 16 2018
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
Jul 17 2018