ndslice and RC containers

2016-09-22 Thread Nordlöw via Digitalmars-d-learn
Is ndslice' Slice() prepared for integration with containers with 
reference counting semantics?


I wonder because according to the docs they internally store a 
pointer and an offset. What is that pointer supposed to point to 
except from obviously currently a GC-allocated array?


See:

https://dlang.org/phobos/std_experimental_ndslice_slice.html#.Slice


Re: ndslice and RC containers

2016-09-22 Thread ZombineDev via Digitalmars-d-learn

On Thursday, 22 September 2016 at 12:38:57 UTC, Nordlöw wrote:
Is ndslice' Slice() prepared for integration with containers 
with reference counting semantics?


I wonder because according to the docs they internally store a 
pointer and an offset. What is that pointer supposed to point 
to except from obviously currently a GC-allocated array?


See:

https://dlang.org/phobos/std_experimental_ndslice_slice.html#.Slice


ndslice (i.e. Slice(size_t N, Range) ) is a generalization of D's 
built-in slices (i.e. T[]) to N dimensions. Just like them, it 
doesn't handle memory ownership - it just provides a view over 
existing data. Usually, there are two use cases:

1) Wrapping an existing array:
   1.1) You allocate an array however you want (GC, RC, plain 
malloc)
or just use a slice to an array returned from a 
third-party library

   1.2) Wrap it via sliced [1]
   1.3) Use it
   1.4) Free it:
   1.4.a) Let the GC reclaim it
   1.4.b) Let the RC reclaim it
   1.4.c) Free it manually.

2) Making a new array
   2.1.a) Using the GC via slice [2]
   2.1.b) Using std.experimental.allcator via makeSlice [3]
   2.2) Use it
   2.3) Free it:
   2.3.a) Let the GC reclaim it automatically
   2.3.b) Manually dispose [4] it from the allocator it was 
allocated from

  (look for the allocator.dispose(tuple.array) pattern in
  the examples of makeSlice).

Please note that the support for creating ndslices via custom 
memory allocators (i.e. makeSlice) was added after dmd-2.071 was 
branched, so you either have to wait for dmd-2.072, or use a 
nightly build (which I recommend).



[1]: 
http://dlang.org/phobos-prerelease/std_experimental_ndslice_slice.html#.sliced


[2]: 
http://dlang.org/phobos-prerelease/std_experimental_ndslice_slice.html#.slice


[3]: 
http://dlang.org/phobos-prerelease/std_experimental_ndslice_slice.html#.makeSlice


[4]: 
http://dlang.org/phobos-prerelease/std_experimental_allocator.html#.dispose


Re: ndslice and RC containers

2016-09-22 Thread Ilya Yaroshenko via Digitalmars-d-learn

On Thursday, 22 September 2016 at 13:30:28 UTC, ZombineDev wrote:

On Thursday, 22 September 2016 at 12:38:57 UTC, Nordlöw wrote:

[...]


ndslice (i.e. Slice(size_t N, Range) ) is a generalization of 
D's built-in slices (i.e. T[]) to N dimensions. Just like them, 
it doesn't handle memory ownership - it just provides a view 
over existing data. Usually, there are two use cases:

1) Wrapping an existing array:
   1.1) You allocate an array however you want (GC, RC, plain 
malloc)
or just use a slice to an array returned from a 
third-party library

   1.2) Wrap it via sliced [1]
   1.3) Use it
   1.4) Free it:
   1.4.a) Let the GC reclaim it
   1.4.b) Let the RC reclaim it
   1.4.c) Free it manually.

[...]


Thank you ZombineDev, good answer!


Re: ndslice and RC containers

2016-09-22 Thread Nordlöw via Digitalmars-d-learn

On Thursday, 22 September 2016 at 13:30:28 UTC, ZombineDev wrote:
ndslice (i.e. Slice(size_t N, Range) ) is a generalization of 
D's built-in slices (i.e. T[]) to N dimensions. Just like them, 
...
Please note that the support for creating ndslices via custom 
memory allocators (i.e. makeSlice) was added after dmd-2.071 
was branched, so you either have to wait for dmd-2.072, or use 
a nightly build (which I recommend).


How will this interact with DIP-1000, specifically, will ref 
returning members of Slice() be scope-qualified?


Thx!


Re: ndslice and RC containers

2016-09-25 Thread Ilya Yaroshenko via Digitalmars-d-learn

On Thursday, 22 September 2016 at 20:23:57 UTC, Nordlöw wrote:
On Thursday, 22 September 2016 at 13:30:28 UTC, ZombineDev 
wrote:
ndslice (i.e. Slice(size_t N, Range) ) is a generalization of 
D's built-in slices (i.e. T[]) to N dimensions. Just like 
them, ...
Please note that the support for creating ndslices via custom 
memory allocators (i.e. makeSlice) was added after dmd-2.071 
was branched, so you either have to wait for dmd-2.072, or use 
a nightly build (which I recommend).


How will this interact with DIP-1000, specifically, will ref 
returning members of Slice() be scope-qualified?


Thx!


No, `Slice` structure is not data owner.