On Saturday, 21 January 2017 at 09:56:29 UTC, ZombineDev wrote:
On Saturday, 21 January 2017 at 02:47:49 UTC, bitwise wrote:
When std.experimental.allocator was created, I was under the impression it was meant to be used to make containers. But since allocate() returns void[], casts are required before using that memory, which is unsafe.

Is my only option to wrap the casts in an @trusted helper function? or am I missing something?

 Thanks

There's no need for casts. You can just use the high-level wrappers:
http://dlang.org/phobos-prerelease/std_experimental_allocator#.make

http://dlang.org/phobos-prerelease/std_experimental_allocator#.makeArray

http://dlang.org/phobos-prerelease/std_experimental_allocator#.dispose

http://dlang.org/phobos-prerelease/std_experimental_allocator#.makeMultidimensionalArray

http://dlang.org/phobos-prerelease/std_experimental_allocator#.disposeMultidimensionalArray

Though, since you are implementing a container that manually manages memory, you won't be able to get away with no @trusted parts in your code. http://dlang.org/phobos-prerelease/std_experimental_allocator#.expandArray can help, but you'll still need to call dispose/deallocate somewhere yourself and you're the only that knows when is safe to do this. If you look at how Rust's standard library is implemented, you'll see the same pattern. The users have a safe API, but underneath you'll that the library uses many 'unsafe' blocks where the compiler doesn't see the full picture which only the author of the code knows.

Reply via email to