Re: Phobos addition formal review: std.experimental.allocator

2015-08-13 Thread Tofu Ninja via Digitalmars-d
Something I thought about today, if a class or struct is 
allocated by an allocator(say a malloc based allocator) and one 
of its fields is populated with a reference to GCed memory, will 
the GC know to scan the allocator memory to keep that GCed memory 
alive?





Re: Phobos addition formal review: std.experimental.allocator

2015-08-13 Thread Tofu Ninja via Digitalmars-d

On Thursday, 13 August 2015 at 21:05:28 UTC, rsw0x wrote:

On Thursday, 13 August 2015 at 20:56:36 UTC, Tofu Ninja wrote:
Something I thought about today, if a class or struct is 
allocated by an allocator(say a malloc based allocator) and 
one of its fields is populated with a reference to GCed 
memory, will the GC know to scan the allocator memory to keep 
that GCed memory alive?


http://dlang.org/phobos/core_memory.html#.GC.addRange


Yeah I know about that, I was just asking if all the allocators 
would be marked to be scanned by default. Or if they might try to 
only mark as needing to be scanned if they contain types that 
could contain references.


The information of which types have internal references seems to 
be available at least to the GC. Theoretically an allocator could 
use that information to mark its allocations as needing to be 
scanned as well.


Or it could be a wrapper allocator that simply marks things as 
needing to be scanned when they need to be, that way it would be 
an opt-in type deal.


just some thoughts...


Re: Phobos addition formal review: std.experimental.allocator

2015-08-13 Thread rsw0x via Digitalmars-d

On Thursday, 13 August 2015 at 20:56:36 UTC, Tofu Ninja wrote:
Something I thought about today, if a class or struct is 
allocated by an allocator(say a malloc based allocator) and one 
of its fields is populated with a reference to GCed memory, 
will the GC know to scan the allocator memory to keep that GCed 
memory alive?


http://dlang.org/phobos/core_memory.html#.GC.addRange


Re: Phobos addition formal review: std.experimental.allocator

2015-07-14 Thread Jacob Carlborg via Digitalmars-d

On 2015-07-12 18:10, Dmitry Olshansky wrote:


But then a Parent allocator would like to know if the child actually
doesn't support reallocate vs say failing to reallocate. In the former
case a lot of extra logic is simply removed at compile-time.


Perhaps this is a simplified view, but most cases there were no 
difference between failing to reallocate or does not support reallocate.


deallocate, for example, was used like this:

static if (hasMember!(deallocate))
deallocate();

No else, no action was taken when it didn't support deallocate. I 
haven't look through the whole source code.


--
/Jacob Carlborg


Re: Phobos addition formal review: std.experimental.allocator

2015-07-14 Thread Jacob Carlborg via Digitalmars-d

On 2015-07-13 20:52, Andrei Alexandrescu wrote:


That design would have been possible, e.g. have deallocate return false,
owns return Ternary.unknown, expand return false, alignedAllocate return
null etc.


Perhaps it's a simplified view, but for all examples in the talk it 
seems it would work without changing the API. The branch which was 
executed for does not support this operation was the same for this 
operation failed. Example:


static if (hasMember!(deallocate))
deallocate();

There was no else, no action when deallocate was not supported. Or:

static if (hasMember!(reallocate))
return reallocate();
else
return false;

Of course I haven't look through the whole source code.


I see the following issues with that design:

1. Many incorrect or grossly unfit allocators can be statically defined,
for example a FallbackAllocator putting in the front an allocator that
has a dummy implementation of owns. Unittesting could be expected to
reasonably get rid of most.

But there are many byzantine failure modes that are likely to escape
even thorough unittesting. Consider, for example, building a Segregator
out of several allocators, most of which support alignedAllocate, but
some that don't (i.e. return null). During testing, if only the
supported size ranges are tested, it all works. In production, if the
wrong size is asked for in alignedAllocate, the allocator will return
null as if the system ran out of memory.

2. Efficiency becomes increasingly tenuous. Simple cases of calls to
do-nothing functions can be reasonably expected to be handled by the
optimizer, but e.g. AllocatorList does significant work in owns,
deallocate, deallocateAll, etc. - all under the assumption that the
parent does implement the expected functionality.

Emery Berger told me this was a constant source of concern with
HeapLayers; he'd need to look at disassembly and tweak code in various
ways to obtain the desired inlining, which when absent would cause
dramatic slowdowns. Compiler technology has improved since that work,
but also Heap Building Blocks go quite a longer distance than HeapLayers.

With the DbI approach, the performance profile of a composite allocator
is immediate and obvious.


Yeah, my suggestion assumes the compiler can optimize away all these 
dummy functions.


--
/Jacob Carlborg


Re: Phobos addition formal review: std.experimental.allocator

2015-07-14 Thread Andrei Alexandrescu via Digitalmars-d

On 7/14/15 7:35 AM, Jacob Carlborg wrote:

On 2015-07-13 20:52, Andrei Alexandrescu wrote:


That design would have been possible, e.g. have deallocate return false,
owns return Ternary.unknown, expand return false, alignedAllocate return
null etc.


Perhaps it's a simplified view, but for all examples in the talk it
seems it would work without changing the API. The branch which was
executed for does not support this operation was the same for this
operation failed. Example:

static if (hasMember!(deallocate))
 deallocate();

There was no else, no action when deallocate was not supported. Or:

static if (hasMember!(reallocate))
 return reallocate();
else
 return false;


I explained matters at length in the post you're replying to, and from 
what I can tell this reply is a reiteration of your same point. I don't 
know what to add - you may want to pay some more mind to that post.



Of course I haven't look through the whole source code.


One easy way to take a look at things is to clone the branch and then:

git grep --context=5 hasMember

or however many lines you need.


Yeah, my suggestion assumes the compiler can optimize away all these
dummy functions.


There were two other considerations.


Andrei




Re: Phobos addition formal review: std.experimental.allocator

2015-07-13 Thread Andrei Alexandrescu via Digitalmars-d

On 7/12/15 11:08 AM, Jacob Carlborg wrote:

On 2015-06-12 13:06, Dicebot wrote:

The legendary allocator package by Andrei Alexandrescu has arrived at
your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs:
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator



I just looked at Andrei's dconf talk and started to look at the source
code how this hasMember is used. To me it looks like in most cases the
optional methods, like deallocate, owns, expand and so on, could
instead be required methods. Allocators that don't support these methods
would need to have dummy implementations. But at the same time it would
be easier for the user of the allocators, doesn't need to use all these
static if.


That design would have been possible, e.g. have deallocate return false, 
owns return Ternary.unknown, expand return false, alignedAllocate return 
null etc.


I see the following issues with that design:

1. Many incorrect or grossly unfit allocators can be statically defined, 
for example a FallbackAllocator putting in the front an allocator that 
has a dummy implementation of owns. Unittesting could be expected to 
reasonably get rid of most.


But there are many byzantine failure modes that are likely to escape 
even thorough unittesting. Consider, for example, building a Segregator 
out of several allocators, most of which support alignedAllocate, but 
some that don't (i.e. return null). During testing, if only the 
supported size ranges are tested, it all works. In production, if the 
wrong size is asked for in alignedAllocate, the allocator will return 
null as if the system ran out of memory.


2. Efficiency becomes increasingly tenuous. Simple cases of calls to 
do-nothing functions can be reasonably expected to be handled by the 
optimizer, but e.g. AllocatorList does significant work in owns, 
deallocate, deallocateAll, etc. - all under the assumption that the 
parent does implement the expected functionality.


Emery Berger told me this was a constant source of concern with 
HeapLayers; he'd need to look at disassembly and tweak code in various 
ways to obtain the desired inlining, which when absent would cause 
dramatic slowdowns. Compiler technology has improved since that work, 
but also Heap Building Blocks go quite a longer distance than HeapLayers.


With the DbI approach, the performance profile of a composite allocator 
is immediate and obvious.


3. Layout decisions cannot be made with dummy implementations.

Currently there are no layout decisions in std.allocator that depend on 
presence of members, but ScopedAllocator came very closed to such. 
(There are many layout decisions that depend on instance size.) Going 
with a dynamic approach would preclude data layout decisions.



Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-07-12 Thread Jacob Carlborg via Digitalmars-d

On 2015-06-12 13:06, Dicebot wrote:

The legendary allocator package by Andrei Alexandrescu has arrived at
your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs: http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator


I just looked at Andrei's dconf talk and started to look at the source 
code how this hasMember is used. To me it looks like in most cases the 
optional methods, like deallocate, owns, expand and so on, could 
instead be required methods. Allocators that don't support these methods 
would need to have dummy implementations. But at the same time it would 
be easier for the user of the allocators, doesn't need to use all these 
static if.


The current way of using hasMember and static if seems to be a more 
complicated design.


--
/Jacob Carlborg


Re: Phobos addition formal review: std.experimental.allocator

2015-07-12 Thread Dmitry Olshansky via Digitalmars-d

On 12-Jul-2015 18:08, Jacob Carlborg wrote:

On 2015-06-12 13:06, Dicebot wrote:

The legendary allocator package by Andrei Alexandrescu has arrived at
your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs:
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator



I just looked at Andrei's dconf talk and started to look at the source
code how this hasMember is used. To me it looks like in most cases the
optional methods, like deallocate, owns, expand and so on, could
instead be required methods. Allocators that don't support these methods
would need to have dummy implementations. But at the same time it would
be easier for the user of the allocators, doesn't need to use all these
static if.


But then a Parent allocator would like to know if the child actually 
doesn't support reallocate vs say failing to reallocate. In the former 
case a lot of extra logic is simply removed at compile-time.



--
Dmitry Olshansky


Re: Phobos addition formal review: std.experimental.allocator

2015-07-10 Thread Martin Nowak via Digitalmars-d

On Friday, 12 June 2015 at 11:06:43 UTC, Dicebot wrote:
The legendary allocator package by Andrei Alexandrescu has 
arrived at your doorsteps and kindly asks to let it into Phobos


Sorry for being late, I wanted to restate an idea that could be 
crucial for optimizations.

https://github.com/D-Programming-Language/druntime/pull/1183#issuecomment-77065554

This reminds me of the fact, that the IAllocator interface 
(std.allocator) should also have a strongly pure allocate 
function. This might allow the compiler to optimize allocations 
even with a dynamic dispatch allocator, because it assumes that 
an allocation doesn't have a side-effect and always returns 
fresh unaliased memory.


Chandler Carruth was talking about this problem at the last 
CppCon.

https://www.youtube.com/watch?v=fHNmRkzxHWst=3950
https://www.youtube.com/watch?v=fHNmRkzxHWst=4037

Now putting pure onto the allocate function of IAllocator would 
be a very harsh constraint for any implementation. So maybe we 
could employ a compiler hack, marking any IAllocator.allocate 
implementation as pure.


This optimization is really important, b/c it allows the compiler 
to ellide allocations when it can compute something using a 
temporary buffer.
It'd probably require a magic free as well, so that the compiler 
knows the lifetime and sees that data isn't escaped.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-30 Thread Baz via Digitalmars-d

On Tuesday, 30 June 2015 at 06:07:14 UTC, Baz wrote:

On Friday, 26 June 2015 at 15:23:25 UTC, Alex Parrill wrote:
On Friday, 26 June 2015 at 14:56:21 UTC, Dmitry Olshansky 
wrote:

[...]


Yea, VirtualAlloc seems like a better fit. (I don't actually 
know the windows API that well)



[...]


Here's the paragraph I'm reading:

Mapped views of a file mapping object maintain internal 
references to the object, and a file mapping object does not 
close until all references to it are released. Therefore, to 
fully close a file mapping object, an application must unmap 
all mapped views of the file mapping object by calling 
UnmapViewOfFile and close the file mapping object handle by 
calling CloseHandle. These functions can be called in any 
order.


https://github.com/andralex/phobos/pull/17


By the way, the ddoc comment for mmap needs to be updated (not 
posix only).
I don't know what to write because initially i just wanted to 
build allocator under win and proposed to the mmap allocator for 
win without thinking more...


currently under win the only difference between a simple malloc 
is that the allocation happen on commitment...previously it was 
really an anonymous memory mapped file...).





Re: Phobos addition formal review: std.experimental.allocator

2015-06-30 Thread Baz via Digitalmars-d

On Friday, 26 June 2015 at 15:23:25 UTC, Alex Parrill wrote:

On Friday, 26 June 2015 at 14:56:21 UTC, Dmitry Olshansky wrote:

[...]


Yea, VirtualAlloc seems like a better fit. (I don't actually 
know the windows API that well)



[...]


Here's the paragraph I'm reading:

Mapped views of a file mapping object maintain internal 
references to the object, and a file mapping object does not 
close until all references to it are released. Therefore, to 
fully close a file mapping object, an application must unmap 
all mapped views of the file mapping object by calling 
UnmapViewOfFile and close the file mapping object handle by 
calling CloseHandle. These functions can be called in any order.


https://github.com/andralex/phobos/pull/17


Re: Phobos addition formal review: std.experimental.allocator

2015-06-30 Thread jmh530 via Digitalmars-d

On Friday, 26 June 2015 at 13:35:34 UTC, Dicebot wrote:
It is ok to use that time for any

additional comments :P


I would second the suggestion for improvement in the 
documentation. The overview linked to in the original post is 
written assuming advanced programming knowledge. My understanding 
of allocation is pretty much limited to something could be on 
stack or heap (I had to Google what an allocator was). So I would 
say it could be improved by adding some explanation of the basics 
and why to use allocators instead of new or other techniques.


I had seen this when it was originally posted two weeks ago, but 
I came back around to read it again today. What brought me to 
look it over again was that I had come across the 
std.container.array package and I didn't understand how it was 
different from the built-in array (I still don't have a very good 
understanding there, but a little better). Anyway, as I was 
searching through the Learn forum, I came across a post from 2011 
saying that std.container might change in the future based on 
Andrei's work on allocators. I take it this is the work it was 
referring to (especially after looking at the wikipedia page for 
allocators).


With that I think I only have two questions. Am I correct that 
the makeArray function is for allocating a dynamic array and not 
an std.container Array? Are there plans to refactor std.container 
with std.allocator in mind?


Re: Phobos addition formal review: std.experimental.allocator

2015-06-26 Thread Alex Parrill via Digitalmars-d
The Windows MMap allocator only keeps one HANDLE around, and 
creates a new one on each `allocate`. Thus, `deallocate` closes 
the latest handle, regardless of what it was actually passed, so 
it leaks.


If I'm reading the docs for `CreateFileMapping` right, you should 
be able to close the handle after calling `MapViewOfFile`; the 
internal data will persist until you unmap the memory region.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-26 Thread Alex Parrill via Digitalmars-d

On Friday, 26 June 2015 at 14:56:21 UTC, Dmitry Olshansky wrote:

On 26-Jun-2015 17:51, Alex Parrill wrote:
The Windows MMap allocator only keeps one HANDLE around, and 
creates a
new one on each `allocate`. Thus, `deallocate` closes the 
latest handle,

regardless of what it was actually passed, so it leaks.



Actually I don't see why Windows couldnt' just use VirtualAlloc 
w/o messing with files.


Yea, VirtualAlloc seems like a better fit. (I don't actually know 
the windows API that well)


If I'm reading the docs for `CreateFileMapping` right, you 
should be
able to close the handle after calling `MapViewOfFile`; the 
internal

data will persist until you unmap the memory region.


IIRC no you can't. I'd need to double check that though.


Here's the paragraph I'm reading:

Mapped views of a file mapping object maintain internal 
references to the object, and a file mapping object does not 
close until all references to it are released. Therefore, to 
fully close a file mapping object, an application must unmap all 
mapped views of the file mapping object by calling 
UnmapViewOfFile and close the file mapping object handle by 
calling CloseHandle. These functions can be called in any order.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-26 Thread Dmitry Olshansky via Digitalmars-d

On 26-Jun-2015 17:51, Alex Parrill wrote:

The Windows MMap allocator only keeps one HANDLE around, and creates a
new one on each `allocate`. Thus, `deallocate` closes the latest handle,
regardless of what it was actually passed, so it leaks.



Actually I don't see why Windows couldnt' just use VirtualAlloc w/o 
messing with files.



If I'm reading the docs for `CreateFileMapping` right, you should be
able to close the handle after calling `MapViewOfFile`; the internal
data will persist until you unmap the memory region.


IIRC no you can't. I'd need to double check that though.

--
Dmitry Olshansky


Re: Phobos addition formal review: std.experimental.allocator

2015-06-26 Thread Dicebot via Digitalmars-d

On Thursday, 25 June 2015 at 13:36:31 UTC, Dicebot wrote:

1 day remaining


FYI: considering 
http://forum.dlang.org/thread/mmhjqe$2mud$1...@digitalmars.com there 
will be some delay between finishing the review period and 
starting voting process. It is ok to use that time for any 
additional comments :P


Re: Phobos addition formal review: std.experimental.allocator

2015-06-25 Thread Dicebot via Digitalmars-d

1 day remaining


Re: Phobos addition formal review: std.experimental.allocator

2015-06-24 Thread Mike via Digitalmars-d
On Wednesday, 24 June 2015 at 04:00:11 UTC, Andrei Alexandrescu 
wrote:


std.allocator.allocator.IAllocator 
std.allocator.allocator.theAllocator;


Yep, ridiculous is the first thing that comes to mind.

I find it difficult to digest (ehm) the fact that the same 
community that thinks std.allocator is just not going to cut 
the mustard, simultaneously believes std.allocator.allocator 
is a good idea.


Of course you are right. It was indeed a poor suggestion.  But 
it's the only example I could find where a separate module name 
was used to declare the high-level API.  Perhaps it was even 
written before package.d existed.


The case against std.allocator isn't about the name, but about 
the fact that it doesn't do what people, apparently, expect: 
import the entire public API.


I count only 4 uses of package.d in official Phobos:
https://github.com/D-Programming-Language/phobos/blob/master/std/algorithm/package.d
https://github.com/D-Programming-Language/phobos/blob/master/std/container/package.d
https://github.com/D-Programming-Language/phobos/blob/master/std/range/package.d
https://github.com/D-Programming-Language/phobos/blob/master/std/regex/package.d

All of them seem to import the entire public API, but only 
std.algorithm.package.d is exclusively used for public imports.  
The others all have some definition of high-level API features.  
So, I don't see a precedent one way or another.  And maybe that's 
how it should be:  defined based on the intended use of the 
package.


Unfortunately, those against using package.d for the high-level 
API, did not seem to offer a suggestion for where to put your 
porcelain.  So, if you wish to accommodate them and need a name, 
consider std.allocator.api.


Mike


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 9:53 AM, extrawurst wrote:

On Tuesday, 23 June 2015 at 16:49:45 UTC, Andrei Alexandrescu wrote:

On 6/23/15 9:48 AM, extrawurst wrote:

I agree with Adam on this: Just a quick concern, I don't think a
package.d should ever have anything except imports in it
(see http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


I simply quote his following post in the mentioned thread:

The biggest benefit of breaking up the big modules is so you can access
some of it without requiring all of it. But when the part you want is in
the package.d, you can't get it independently anymore; importing that
also imports everything else, negating the reason it was split up in the
first place.


But that doesn't apply to packages that do NOT originate as big modules, 
so they have no backward compatibility issue. This is the case for 
std.allocator. I see a net pessimization for everyone involved to change 
the current packaging.


All I'm saying is we shouldn't take it noncritically that packages 
should be done one particular way.



Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Dicebot via Digitalmars-d
On Tuesday, 23 June 2015 at 16:49:45 UTC, Andrei Alexandrescu 
wrote:

On 6/23/15 9:48 AM, extrawurst wrote:
I agree with Adam on this: Just a quick concern, I don't 
think a

package.d should ever have anything except imports in it
(see 
http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


My reasoning is simple : when `package.d` only contains public 
imports it allows to both use simple `import std.allocator` for 
those who want to get started quickly and pick only necessary 
imports for those who try optimizing build times / code clarity. 
Not doing that does not change anything for those who prefer 
`import std.allocator` but makes fine tuning of imports 
impossible. Thus former approach looks either equal or superior 
for all use cases.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Adam D. Ruppe via Digitalmars-d
On Tuesday, 23 June 2015 at 16:56:55 UTC, Andrei Alexandrescu 
wrote:
But that doesn't apply to packages that do NOT originate as big 
modules, so they have no backward compatibility issue.


My thought isn't really about backward compatibility but about 
minimizing dependencies with sibling modules.


I don't want to repeat my argument too much from the other 
thread, but imagine you're writing a minimalist library that is 
meant to interact with other minimalist libraries. To interact, 
you want a shared interface and basic types. But to be 
minimalist, you want to pull as little other standard code as 
possible.



The typical user might just import std.whatever and get it all 
available. But this minimalist user only wants 
std.whatever.basic_interface. If the basic interface is shoved 
inside package.d, she can't get get to it without inadvertently 
pulling in more modules too. This can quickly grow into a web of 
dependencies where importing just an interface definition ends up 
grabbing dozens if implementations you don't want too, bloating 
compile times and binary sizes.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 2:18 AM, Dicebot wrote:

On Monday, 22 June 2015 at 22:38:19 UTC, Andrei Alexandrescu wrote:

Perhaps I misunderstood the request - currently the imports in
allocator/package.d are:

public import std.experimental.allocator.common,
std.experimental.allocator.typed; import std.algorithm, std.conv,
std.exception, std.range, std.traits, std.typecons, std.typetuple;
version(unittest) import std.random, std.stdio;

Is that okay, and if not what should change?


My concern was about the fact that symbols `IAllocator`,
`theAllocator`, `processAllocator` and bunch of others are defined
within `package.d` itself and not provided via public import. That
means that anyone willing to change default allocator or use `make`
MUST import all std.allocator modules even if nothing else is really
needed (those utilities look very independent). Which means
processing bunch of unnecessary imports - and more of those if more
modules will get added to the package.

I'd prefer to have a small dedicated module, i.e. `std.allocator.api`
 (not going to discuss names!) and do public import of it from
`std.allocator.package.d`. Makes sense?


I see. Well this raises the question whether importing std.xyz
automatically means everything under std.xyz is transitorily imported. 
Right now it's not - the more advanced/obscure building blocks are not 
automatically imported if you just import std.allocator; for those you'd 
need to import the std.allocator.building_blocks package, or individual 
modules from it like std.allocator.building_blocks.region.


This idea was proposed by Mike on 2015/05/18:


Would it be better to move the porcelain code into package.d so the
nomenclature simply becomes `import std.allocator;`?


I liked the idea that someone who's not an expert goes let me import 
std.allocator and call it a day whereas someone who wants to tweak, 
customize, etc. they'd need to be more specific.


If we define an entry point such as std.allocator.api, novices will 
have one more thing to remember, or some will still import 
std.allocator thus pulling everything without realizing it.


So I'd say let's keep simple things simple. If you want to allocate, 
import std.allocator.



Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Sönke Ludwig via Digitalmars-d

Am 23.06.2015 um 18:53 schrieb extrawurst:

On Tuesday, 23 June 2015 at 16:49:45 UTC, Andrei Alexandrescu wrote:

On 6/23/15 9:48 AM, extrawurst wrote:

I agree with Adam on this: Just a quick concern, I don't think a
package.d should ever have anything except imports in it
(see http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


I simply quote his following post in the mentioned thread:

The biggest benefit of breaking up the big modules is so you can access
some of it without requiring all of it. But when the part you want is in
the package.d, you can't get it independently anymore; importing that
also imports everything else, negating the reason it was split up in the
first place.


Not to mention https://issues.dlang.org/show_bug.cgi?id=11847


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 9:48 AM, extrawurst wrote:

I agree with Adam on this: Just a quick concern, I don't think a
package.d should ever have anything except imports in it
(see http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread extrawurst via Digitalmars-d
On Tuesday, 23 June 2015 at 15:56:15 UTC, Andrei Alexandrescu 
wrote:

On 6/23/15 2:18 AM, Dicebot wrote:
On Monday, 22 June 2015 at 22:38:19 UTC, Andrei Alexandrescu 
wrote:

Perhaps I misunderstood the request - currently the imports in
allocator/package.d are:

public import std.experimental.allocator.common,
std.experimental.allocator.typed; import std.algorithm, 
std.conv,
std.exception, std.range, std.traits, std.typecons, 
std.typetuple;

version(unittest) import std.random, std.stdio;

Is that okay, and if not what should change?


My concern was about the fact that symbols `IAllocator`,
`theAllocator`, `processAllocator` and bunch of others are 
defined
within `package.d` itself and not provided via public import. 
That
means that anyone willing to change default allocator or use 
`make`
MUST import all std.allocator modules even if nothing else is 
really

needed (those utilities look very independent). Which means
processing bunch of unnecessary imports - and more of those if 
more

modules will get added to the package.

I'd prefer to have a small dedicated module, i.e. 
`std.allocator.api`

 (not going to discuss names!) and do public import of it from
`std.allocator.package.d`. Makes sense?


I see. Well this raises the question whether importing std.xyz
automatically means everything under std.xyz is transitorily 
imported. Right now it's not - the more advanced/obscure 
building blocks are not automatically imported if you just 
import std.allocator; for those you'd need to import the 
std.allocator.building_blocks package, or individual modules 
from it like std.allocator.building_blocks.region.


This idea was proposed by Mike on 2015/05/18:

Would it be better to move the porcelain code into package.d 
so the

nomenclature simply becomes `import std.allocator;`?


I liked the idea that someone who's not an expert goes let me 
import std.allocator and call it a day whereas someone who 
wants to tweak, customize, etc. they'd need to be more specific.


If we define an entry point such as std.allocator.api, 
novices will have one more thing to remember, or some will 
still import std.allocator thus pulling everything without 
realizing it.


So I'd say let's keep simple things simple. If you want to 
allocate, import std.allocator.



Andrei


I agree with Adam on this: Just a quick concern, I don't think a 
package.d should ever have anything except imports in it
(see 
http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


for convenience the package.d could still import a bunch of 
default stuff publicly for the normal user.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread extrawurst via Digitalmars-d
On Tuesday, 23 June 2015 at 16:49:45 UTC, Andrei Alexandrescu 
wrote:

On 6/23/15 9:48 AM, extrawurst wrote:
I agree with Adam on this: Just a quick concern, I don't 
think a

package.d should ever have anything except imports in it
(see 
http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


I simply quote his following post in the mentioned thread:

The biggest benefit of breaking up the big modules is so you can 
access some of it without requiring all of it. But when the part 
you want is in the package.d, you can't get it independently 
anymore; importing that also imports everything else, negating 
the reason it was split up in the first place.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 8:56 AM, Andrei Alexandrescu wrote:

I see. Well this raises the question whether importing std.xyz
automatically means everything under std.xyz is transitorily imported.


s/transitorily/transitively/



Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 10:16 AM, Dicebot wrote:

On Tuesday, 23 June 2015 at 16:49:45 UTC, Andrei Alexandrescu wrote:

On 6/23/15 9:48 AM, extrawurst wrote:

I agree with Adam on this: Just a quick concern, I don't think a
package.d should ever have anything except imports in it
(see http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


My reasoning is simple : when `package.d` only contains public imports
it allows to both use simple `import std.allocator` for those who want
to get started quickly and pick only necessary imports for those who try
optimizing build times / code clarity. Not doing that does not change
anything for those who prefer `import std.allocator` but makes fine
tuning of imports impossible. Thus former approach looks either equal or
superior for all use cases.


The import std.allocator is already minimal - only contains the high 
level stuff. -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 10:15 AM, Adam D. Ruppe wrote:

On Tuesday, 23 June 2015 at 16:56:55 UTC, Andrei Alexandrescu wrote:

But that doesn't apply to packages that do NOT originate as big
modules, so they have no backward compatibility issue.


My thought isn't really about backward compatibility but about
minimizing dependencies with sibling modules.

I don't want to repeat my argument too much from the other thread, but
imagine you're writing a minimalist library that is meant to interact
with other minimalist libraries. To interact, you want a shared
interface and basic types. But to be minimalist, you want to pull as
little other standard code as possible.


The typical user might just import std.whatever and get it all
available. But this minimalist user only wants
std.whatever.basic_interface. If the basic interface is shoved inside
package.d, she can't get get to it without inadvertently pulling in more
modules too. This can quickly grow into a web of dependencies where
importing just an interface definition ends up grabbing dozens if
implementations you don't want too, bloating compile times and binary
sizes.


The case with std.allocator is not everything is imported in it, so no 
bloating no nothing. -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Dmitry Olshansky via Digitalmars-d

On 24-Jun-2015 00:12, Dicebot wrote:

On Tuesday, 23 June 2015 at 19:17:21 UTC, Andrei Alexandrescu wrote:

On 6/23/15 10:16 AM, Dicebot wrote:

On Tuesday, 23 June 2015 at 16:49:45 UTC, Andrei Alexandrescu wrote:

On 6/23/15 9:48 AM, extrawurst wrote:

I agree with Adam on this: Just a quick concern, I don't think a
package.d should ever have anything except imports in it
(see http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


My reasoning is simple : when `package.d` only contains public imports
it allows to both use simple `import std.allocator` for those who want
to get started quickly and pick only necessary imports for those who try
optimizing build times / code clarity. Not doing that does not change
anything for those who prefer `import std.allocator` but makes fine
tuning of imports impossible. Thus former approach looks either equal or
superior for all use cases.


The import std.allocator is already minimal - only contains the high
level stuff. -- Andrei


So you have chosen worst of both worlds - neither give power users
ability to fine tune imports nor allow casual users always go with
`import std.allocator` and be happy? :)





If anything, that will be the first package.d in Phobos (AFAIK) which
won't feature public import of _all_ package modules.


I'm not sure if that's the case with std.allocator but importing package 
IMHO should import _typical_ set of submodules.


Things that are more niche and rare (power user oriented) shouldn't 
really be in package.d


--
Dmitry Olshansky


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Tofu Ninja via Digitalmars-d

On Tuesday, 23 June 2015 at 21:12:10 UTC, Dicebot wrote:
So you have chosen worst of both worlds - neither give power 
users ability to fine tune imports nor allow casual users 
always go with `import std.allocator` and be happy? :)


If anything, that will be the first package.d in Phobos (AFAIK) 
which won't feature public import of _all_ package modules.


I agree, a minimalist package.d seems utterly pointless to me.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Dicebot via Digitalmars-d
On Tuesday, 23 June 2015 at 19:17:21 UTC, Andrei Alexandrescu 
wrote:

On 6/23/15 10:16 AM, Dicebot wrote:
On Tuesday, 23 June 2015 at 16:49:45 UTC, Andrei Alexandrescu 
wrote:

On 6/23/15 9:48 AM, extrawurst wrote:
I agree with Adam on this: Just a quick concern, I don't 
think a

package.d should ever have anything except imports in it
(see 
http://forum.dlang.org/post/qwatonmpnoyjsvzjp...@forum.dlang.org)


What is the rationale? -- Andrei


My reasoning is simple : when `package.d` only contains public 
imports
it allows to both use simple `import std.allocator` for those 
who want
to get started quickly and pick only necessary imports for 
those who try
optimizing build times / code clarity. Not doing that does not 
change
anything for those who prefer `import std.allocator` but makes 
fine
tuning of imports impossible. Thus former approach looks 
either equal or

superior for all use cases.


The import std.allocator is already minimal - only contains 
the high level stuff. -- Andrei


So you have chosen worst of both worlds - neither give power 
users ability to fine tune imports nor allow casual users always 
go with `import std.allocator` and be happy? :)


If anything, that will be the first package.d in Phobos (AFAIK) 
which won't feature public import of _all_ package modules.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Dicebot via Digitalmars-d
On Monday, 22 June 2015 at 22:38:19 UTC, Andrei Alexandrescu 
wrote:
Perhaps I misunderstood the request - currently the imports in 
allocator/package.d are:


public import std.experimental.allocator.common,
std.experimental.allocator.typed;
import std.algorithm, std.conv, std.exception, std.range, 
std.traits,

std.typecons, std.typetuple;
version(unittest) import std.random, std.stdio;

Is that okay, and if not what should change?


My concern was about the fact that symbols `IAllocator`, 
`theAllocator`, `processAllocator` and bunch of others are 
defined within `package.d` itself and not provided via public 
import. That means that anyone willing to change default 
allocator or use `make` MUST import all std.allocator modules 
even if nothing else is really needed (those utilities look very 
independent). Which means processing bunch of unnecessary imports 
- and more of those if more modules will get added to the package.


I'd prefer to have a small dedicated module, i.e. 
`std.allocator.api` (not going to discuss names!) and do public 
import of it from `std.allocator.package.d`. Makes sense?


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 6:11 PM, Mike wrote:

It seems there is already precedent with std.digest.digest
(http://dlang.org/phobos/std_digest_digest.html).  I'm sorry I wasn't
aware of this at the time.  std.allocator.porcelain couldn't stand, and
I suggested what seemed most natural to me. I've spend a number of years
in C#-land, and that of course has an affect on my biases.  But D is not
C# (thankfully).


Well it's about time we engineers stop suspending our sense of 
ridiculousness when looking at programmer names. Once some minimal sense 
and sensibility is in action, it's clear that something like 
std.digest.digest.digest is just ridiculous. That shouldn't have passed 
review, and today it shouldn't be used as a precedent.



Following the std.digest.digest precedent, there should probably be
std.allocator.allocator.  It stinks IMO (std.digiest.api and
std.allocator.api would have been much better), but the naming
discussions are starting to take their toll.


std.allocator.allocator.IAllocator std.allocator.allocator.theAllocator;

Yep, ridiculous is the first thing that comes to mind.

I find it difficult to digest (ehm) the fact that the same community 
that thinks std.allocator is just not going to cut the mustard, 
simultaneously believes std.allocator.allocator is a good idea.



Anyway, I suggest std.allocator.allocator as a compromise and a
precedent to follow in the future.  It's tolerable.

Also, I can't seem to navigate std.allocator tree in the left nav at
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html.
Please advise or fix.


Yah, noticed that too. Will look into it tomorrow.


Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread ponce via Digitalmars-d
On Tuesday, 23 June 2015 at 19:16:33 UTC, Andrei Alexandrescu 
wrote:


The case with std.allocator is not everything is imported in 
it, so no bloating no nothing. -- Andrei


My assumption with D libraries is that import std.thing; 
imports everything in the the whole package.



Not that I've a strong opinion on it either.



Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Mike via Digitalmars-d

On Tuesday, 23 June 2015 at 21:12:10 UTC, Dicebot wrote:

On Tuesday, 23 June 2015 at 19:17:21 UTC, Andrei Alexandrescu




The import std.allocator is already minimal - only contains 
the high level stuff. -- Andrei


So you have chosen worst of both worlds - neither give power 
users ability to fine tune imports nor allow casual users 
always go with `import std.allocator` and be happy? :)


If anything, that will be the first package.d in Phobos (AFAIK) 
which won't feature public import of _all_ package modules.


Well, since it was apparently my lousy suggestion that led to 
this, I guess I'm obligated to comment.


It seems there is already precedent with std.digest.digest 
(http://dlang.org/phobos/std_digest_digest.html).  I'm sorry I 
wasn't aware of this at the time.  std.allocator.porcelain 
couldn't stand, and I suggested what seemed most natural to me.  
I've spend a number of years in C#-land, and that of course has 
an affect on my biases.  But D is not C# (thankfully).


Following the std.digest.digest precedent, there should probably 
be std.allocator.allocator.  It stinks IMO (std.digiest.api and 
std.allocator.api would have been much better), but the naming 
discussions are starting to take their toll.


Anyway, I suggest std.allocator.allocator as a compromise and a 
precedent to follow in the future.  It's tolerable.


Also, I can't seem to navigate std.allocator tree in the left nav 
at 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html.  Please advise or fix.


Mike




Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Steven Schveighoffer via Digitalmars-d

On 6/23/15 6:18 PM, Andrei Alexandrescu wrote:

On 6/23/15 3:17 PM, Steven Schveighoffer wrote:

we need to redo


no


Yeah, so then it becomes import std.somepackage means import all the 
modules in that package, except for std.allocator. But that's fine, if 
we want that type of inconsistency, we can just RTFM the newbies.


-Steve


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Dicebot via Digitalmars-d
Ok, if you feel so strongly about it, let's not waste time in 
arguing. You are not obliged to agree to any of reviewer comments 
so as long as everyone is clear about their opinion, the eventual 
voting will decide. I am simply pointing out things that catch my 
attention.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 2:12 PM, Dicebot wrote:

So you have chosen worst of both worlds - neither give power users
ability to fine tune imports nor allow casual users always go with
`import std.allocator` and be happy? :)


There is functionality in std.allocator to get anyone started who 
doesn't want to sit down and define their own allocator.


People who want to do that can import std.allocator.building_blocks 
which is a package fully including all that's needed.



If anything, that will be the first package.d in Phobos (AFAIK) which
won't feature public import of _all_ package modules.


I'm not afraid of creating precedent if that's the best way to go. 
Again: I have the impression we're blocked into an assumption we didn't 
take critically until now.



Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 2:29 PM, Dmitry Olshansky wrote:

I'm not sure if that's the case with std.allocator but importing package
IMHO should import _typical_ set of submodules.

Things that are more niche and rare (power user oriented) shouldn't
really be in package.d


Yah, that attitude describes std.allocator well. -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 2:14 PM, Tofu Ninja wrote:

On Tuesday, 23 June 2015 at 21:12:10 UTC, Dicebot wrote:

So you have chosen worst of both worlds - neither give power users
ability to fine tune imports nor allow casual users always go with
`import std.allocator` and be happy? :)

If anything, that will be the first package.d in Phobos (AFAIK) which
won't feature public import of _all_ package modules.


I agree, a minimalist package.d seems utterly pointless to me.


It's not minimalist. -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Andrei Alexandrescu via Digitalmars-d

On 6/23/15 3:17 PM, Steven Schveighoffer wrote:

we need to redo


no


Re: Phobos addition formal review: std.experimental.allocator

2015-06-23 Thread Steven Schveighoffer via Digitalmars-d

On 6/23/15 6:07 PM, Andrei Alexandrescu wrote:

On 6/23/15 2:12 PM, Dicebot wrote:

So you have chosen worst of both worlds - neither give power users
ability to fine tune imports nor allow casual users always go with
`import std.allocator` and be happy? :)


There is functionality in std.allocator to get anyone started who
doesn't want to sit down and define their own allocator.

People who want to do that can import std.allocator.building_blocks
which is a package fully including all that's needed.


If anything, that will be the first package.d in Phobos (AFAIK) which
won't feature public import of _all_ package modules.


I'm not afraid of creating precedent if that's the best way to go.
Again: I have the impression we're blocked into an assumption we didn't
take critically until now.


What happened basically was:

1. There's too much crap in some modules, it's hard to maintain, hard to 
process.
2. Let's split it up! Oh, but some people want to be able to import 
everything a la java's import java.io.*, and existing code!!!

3. package.d is the solution, just import that and it's the same thing!

I personally think that if we want to define package.d as importing all 
the submodules, then we should stick to that. If we want to go another 
direction, we need to redo all the other splitting of modules we have 
done so far, as that is the pattern.


I'd recommend std.allocator.basic instead of std.allocator for a basic 
direction. If it doesn't make sense to import ALL of std.allocator ever, 
then drop package.d.


But you don't have to listen to me :)

-Steve


Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Andrei Alexandrescu via Digitalmars-d

On 6/21/15 4:47 AM, Dicebot wrote:

4. There are no higher level usage examples and/or guidelines about how
this is supposed to fit in user applications. Intention behind the
library may be familiar to users coming from C++ but target D audience
is much more than that. Having std.allocator.showcase is nice but it is
still a bit too theoretical.


Done: 
https://github.com/D-Programming-Language/phobos/commit/fd7689ef1369e55252d2f6cfa5baddd5260aeb13


Will be coming forth with 5 and 6.

Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Dicebot via Digitalmars-d
On Monday, 22 June 2015 at 19:51:50 UTC, Andrei Alexandrescu 
wrote:
2. `IAllocator` is defined inside `package.d` file. That means 
that it
is impossible to use interface without import ALL of allocator 
modules


Fixed, now interested users need to import 
std.experimental.allocator.building_blocks.



3. Same concern is about
https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/package.d#L218-L228
- unless you actually import all stuff via package.d, those 
configured

allocators are not available.


Fixed per above.


Is it? I still see those symbols defined in package.d , 
14ccc3a02f3dd332cb435abaf3c35cb8847797c0 does not seem to have 
affected that.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Andrei Alexandrescu via Digitalmars-d

On 6/21/15 4:47 AM, Dicebot wrote:

5.
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_stats_collector.html
has no overview documentation at all


https://github.com/D-Programming-Language/phobos/commit/ef6de891197db6d497df11c9350781eef38df196


Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Andrei Alexandrescu via Digitalmars-d

On 6/22/15 2:40 PM, Dicebot wrote:

On Monday, 22 June 2015 at 19:51:50 UTC, Andrei Alexandrescu wrote:

2. `IAllocator` is defined inside `package.d` file. That means that it
is impossible to use interface without import ALL of allocator modules


Fixed, now interested users need to import
std.experimental.allocator.building_blocks.


3. Same concern is about
https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/package.d#L218-L228

- unless you actually import all stuff via package.d, those configured
allocators are not available.


Fixed per above.


Is it? I still see those symbols defined in package.d ,
14ccc3a02f3dd332cb435abaf3c35cb8847797c0 does not seem to have affected
that.


Perhaps I misunderstood the request - currently the imports in 
allocator/package.d are:


public import std.experimental.allocator.common,
std.experimental.allocator.typed;
import std.algorithm, std.conv, std.exception, std.range, std.traits,
std.typecons, std.typetuple;
version(unittest) import std.random, std.stdio;

Is that okay, and if not what should change?


Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Andrei Alexandrescu via Digitalmars-d

On 6/21/15 4:47 AM, Dicebot wrote:

6. Usage of ternary is not always clear / justified. In `IAllocator` it
is explained and makes sense but there are things like
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_bitmapped_block.html
(Ternary empty() - Returns true iff no memory is currently allocated
with this allocator). I am still not sure why it is used there instead
of simple boolean.


Founds a bunch of issues with the docs indeed; switching the static 
interface from bool to Ternary (for the sake of unification with 
IAllocator) was a last-minute thing.


https://github.com/D-Programming-Language/phobos/commit/16f5a5631cf1f2eeea3779785c3ea17682b8ff45


Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Andrei Alexandrescu via Digitalmars-d

On 6/13/15 4:16 PM, ZombineDev wrote:

On Saturday, 13 June 2015 at 15:48:31 UTC, Andrei Alexandrescu wrote:

On 6/13/15 3:14 AM, Dicebot wrote:

Andrei, have you considered creating additional std.allocator.impl
package and moving actual allocators there? Or, probably, the other way
around with std.allocator.core

Existing flat hierarchy does not hint about internal structure in any
way.


It's good documentation, not directories, that helps understanding
internal structure. There are 23 files in std/experimental/allocator,
which seems manageable. I think we're good as we are.

Andrei


I also think putting some of the files in folder will make things
cleaner and easier to understand.

These files:
std.experimental.allocator.affix_allocator,
std.experimental.allocator.allocator_list,
std.experimental.allocator.bucketizer,
std.experimental.allocator.fallback_allocator,
std.experimental.allocator.free_list,
std.experimental.allocator.free_tree,
std.experimental.allocator.gc_allocator,
std.experimental.allocator.bitmapped_block,
std.experimental.allocator.kernighan_ritchie,
std.experimental.allocator.mallocator,
std.experimental.allocator.mmap_allocator,
std.experimental.allocator.null_allocator,
std.experimental.allocator.quantizer,
std.experimental.allocator.region,
std.experimental.allocator.segregator,
std.experimental.allocator.stats_collector;

are great candidates for a std.experimental.allocator.building_blocks
folder.


Moved a bunch of these into building_blocks:

https://github.com/andralex/phobos/commit/14ccc3a02f3dd332cb435abaf3c35cb8847797c0

However, I kept gc_allocator, mallocator, and mmap_allocator outside of 
it as core allocator that doesn't depend on any other.



Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Matthias Bentrup via Digitalmars-d

Can I use these allocators in @nogc code too ?



Re: Phobos addition formal review: std.experimental.allocator

2015-06-22 Thread Andrei Alexandrescu via Digitalmars-d

On 6/21/15 4:47 AM, Dicebot wrote:

1. I have already mentioned that there is neither module structure
overview in `package.d` nor actual module structure. This is still the
case for
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html


Improved: 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html



2. `IAllocator` is defined inside `package.d` file. That means that it
is impossible to use interface without import ALL of allocator modules


Fixed, now interested users need to import 
std.experimental.allocator.building_blocks.



3. Same concern is about
https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/package.d#L218-L228
- unless you actually import all stuff via package.d, those configured
allocators are not available.


Fixed per above.


4. There are no higher level usage examples and/or guidelines about how
this is supposed to fit in user applications. Intention behind the
library may be familiar to users coming from C++ but target D audience
is much more than that. Having std.allocator.showcase is nice but it is
still a bit too theoretical.


Coming soon.


5.
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_stats_collector.html
has no overview documentation at all


Coming soon.


6. Usage of ternary is not always clear / justified. In `IAllocator` it
is explained and makes sense but there are things like
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_bitmapped_block.html
(Ternary empty() - Returns true iff no memory is currently allocated
with this allocator). I am still not sure why it is used there instead
of simple boolean.


Coming soon.


Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-21 Thread Dicebot via Digitalmars-d
Ok, as there has not been much attention here in last days, I 
will put a short summary of my own.


In general, I believe this is extremely high quality proposal and 
Andrei stands up to his reputation. The very design seems to fit 
with D idiomatics and it may change completely how people think 
about interaction with allocator library. I like that is focuses 
on robust API for building allocators instead of more magic to 
use those. That said, reviewing actual implementation quality is 
impossible until I have a chance to try it in real large scale 
project and I will not be trying to do that, assuming that Andrei 
is incapable of writing something completely terrible even if he 
tried to.


Pretty much all of my concerns are about documentation, API and 
clarity of intention. Quality of implementation won't matter if 
developers won't have a clear understanding on how to use it and 
existing proposals feels overwhelming unless one is willing to 
commit quite some time to research it.


Some notes:

1. I have already mentioned that there is neither module 
structure overview in `package.d` nor actual module structure. 
This is still the case for 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
2. `IAllocator` is defined inside `package.d` file. That means 
that it is impossible to use interface without import ALL of 
allocator modules
3. Same concern is about 
https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/package.d#L218-L228 - unless you actually import all stuff via package.d, those configured allocators are not available.
4. There are no higher level usage examples and/or guidelines 
about how this is supposed to fit in user applications. Intention 
behind the library may be familiar to users coming from C++ but 
target D audience is much more than that. Having 
std.allocator.showcase is nice but it is still a bit too 
theoretical.
5. 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_stats_collector.html has no overview documentation at all
6. Usage of ternary is not always clear / justified. In 
`IAllocator` it is explained and makes sense but there are things 
like 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_bitmapped_block.html (Ternary empty() - Returns true iff no memory is currently allocated with this allocator). I am still not sure why it is used there instead of simple boolean.


Overall opinion : I would surely vote for inclusion of this 
proposal in Phobos but in current shape it is not something I'd 
recommend to try to beginner/intermediate level D user.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-21 Thread Andrei Alexandrescu via Digitalmars-d

On 6/21/15 4:47 AM, Dicebot wrote:

1. I have already mentioned that there is neither module structure
overview in `package.d` nor actual module structure. This is still the
case for
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
2. `IAllocator` is defined inside `package.d` file. That means that it
is impossible to use interface without import ALL of allocator modules
3. Same concern is about
https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/package.d#L218-L228
- unless you actually import all stuff via package.d, those configured
allocators are not available.
4. There are no higher level usage examples and/or guidelines about how
this is supposed to fit in user applications. Intention behind the
library may be familiar to users coming from C++ but target D audience
is much more than that. Having std.allocator.showcase is nice but it is
still a bit too theoretical.
5.
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_stats_collector.html
has no overview documentation at all
6. Usage of ternary is not always clear / justified. In `IAllocator` it
is explained and makes sense but there are things like
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_bitmapped_block.html
(Ternary empty() - Returns true iff no memory is currently allocated
with this allocator). I am still not sure why it is used there instead
of simple boolean.

Overall opinion : I would surely vote for inclusion of this proposal in
Phobos but in current shape it is not something I'd recommend to try to
beginner/intermediate level D user.


Thanks for the feedback. I'll get to work on this straight away. -- Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-20 Thread bitwise via Digitalmars-d
On Tue, 16 Jun 2015 16:29:08 -0400, Andrei Alexandrescu  
seewebsiteforem...@erdani.org wrote:



On Saturday, 13 June 2015 at 19:08:26 UTC, Jacob Carlborg wrote:

On 2015-06-12 13:06, Dicebot wrote:

The legendary allocator package by Andrei Alexandrescu has arrived at
your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs:  
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html

Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator


I think IAllocator, theAllocator and it are really bad names. I  
recommend renaming those symbols to:


IAllocator - Allocator
theAllocator - currentAllocator or tlsAllocator
it - allocator or instance. Even better if a static opDispatch could  
be used to forward all methods to the instance.



https://github.com/D-Programming-Language/phobos/commit/319f3297418c515a6d2e52e6e52d0f3f5895f587  
changes .it to .instance for all allocators. -- Andrei


Why not .that? ;)

  Bit


Re: Phobos addition formal review: std.experimental.allocator

2015-06-19 Thread Dicebot via Digitalmars-d

Bringing back to first page.




Re: Phobos addition formal review: std.experimental.allocator

2015-06-17 Thread Jacob Carlborg via Digitalmars-d

On 2015-06-16 22:29, Andrei Alexandrescu wrote:


https://github.com/D-Programming-Language/phobos/commit/319f3297418c515a6d2e52e6e52d0f3f5895f587
changes .it to .instance for all allocators. -- Andrei


Awesome, thanks.

--
/Jacob Carlborg


Re: Phobos addition formal review: std.experimental.allocator

2015-06-16 Thread Andrei Alexandrescu via Digitalmars-d

On Saturday, 13 June 2015 at 19:08:26 UTC, Jacob Carlborg wrote:

On 2015-06-12 13:06, Dicebot wrote:
The legendary allocator package by Andrei Alexandrescu has 
arrived at

your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs: 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html

Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator


I think IAllocator, theAllocator and it are really bad 
names. I recommend renaming those symbols to:


IAllocator - Allocator
theAllocator - currentAllocator or tlsAllocator
it - allocator or instance. Even better if a static 
opDispatch could be used to forward all methods to the 
instance.



https://github.com/D-Programming-Language/phobos/commit/319f3297418c515a6d2e52e6e52d0f3f5895f587
 changes .it to .instance for all allocators. -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-15 Thread Brian Schott via Digitalmars-d

On Sunday, 14 June 2015 at 22:47:59 UTC, Brian Schott wrote:
Not yet, but while looking for one I found that this code 
triggers an assertion in Region.expand()


Running the above code with GCAllocator substituted for 
NullAllocator causes an InvalidMemoryOperationError after all 
100 iterations of the loop have completed.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-14 Thread Brian Schott via Digitalmars-d
On Sunday, 14 June 2015 at 00:24:51 UTC, Andrei Alexandrescu 
wrote:

So we have:

* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


Andrei


How about this:

AllocatorList.allocate() calls AllocatorList.owns(), but only if 
you don't compile with -release. Check the assert statement. 
AllocatorList.owns() is non-const, so the for loops of these two 
functions start rearranging the root pointers and end up in an 
infinite loop in debug builds.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-14 Thread Andrei Alexandrescu via Digitalmars-d

On 6/14/15 4:00 AM, Brian Schott wrote:

On Sunday, 14 June 2015 at 00:24:51 UTC, Andrei Alexandrescu wrote:

So we have:

* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


Andrei


How about this:

AllocatorList.allocate() calls AllocatorList.owns(), but only if you
don't compile with -release. Check the assert statement.
AllocatorList.owns() is non-const, so the for loops of these two
functions start rearranging the root pointers and end up in an infinite
loop in debug builds.


Interesting. Do you have a repro for this? Thanks! -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-14 Thread Jacob Carlborg via Digitalmars-d

On 2015-06-14 02:24, Andrei Alexandrescu wrote:


* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


These are things that are easy to see right away, without looking deep 
inside the code.


You can interpret this as:

1. Either your implementation is already good enough

2. Or people haven't started to look at the implementation yet and are 
commenting on the things that they is right away


Count me on the request to change the directory structure :)

--
/Jacob Carlborg


Re: Phobos addition formal review: std.experimental.allocator

2015-06-14 Thread Dicebot via Digitalmars-d
On Sunday, 14 June 2015 at 00:24:51 UTC, Andrei Alexandrescu 
wrote:

So we have:

* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


That is to be expected and intended for formal Phobos review. 
Implementation is not of much interest - it can be fixed at any 
point. Most important thing is to ensure that API feels right, 
documentation feels clear and people are in general comfortable 
with using proposed modules as they are.


I will do more in-depth review but it will _all_ be about API and 
docs and naming.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-14 Thread HaraldZealot via Digitalmars-d


So we have:

* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


Andrei


Yesterday I have found an error in documentation and have left a 
comment about it on github PR.


And I only start to read the documentation, so I think there will 
be plenty small things to polish.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-14 Thread Andrei Alexandrescu via Digitalmars-d

On 6/13/15 11:49 PM, Dicebot wrote:

On Sunday, 14 June 2015 at 00:24:51 UTC, Andrei Alexandrescu wrote:

So we have:

* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


That is to be expected and intended for formal Phobos review.
Implementation is not of much interest - it can be fixed at any point.
Most important thing is to ensure that API feels right, documentation
feels clear and people are in general comfortable with using proposed
modules as they are.

I will do more in-depth review but it will _all_ be about API and docs
and naming.


Suggestions for better names are welcome as addenda, and I will act on 
some, but they're no substitute for competent reviews.


We need as a community to learn how to do good reviews. Anyone can put a 
finger on a name of a thing and say they like another name better. 
ANYONE. Real review of a library is figuring out how well the proposed 
library's abstractions fulfill its charter and intended use cases.



Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-14 Thread Brian Schott via Digitalmars-d
On Sunday, 14 June 2015 at 14:30:00 UTC, Andrei Alexandrescu 
wrote:

Interesting. Do you have a repro for this? Thanks! -- Andrei


Not yet, but while looking for one I found that this code 
triggers an assertion in Region.expand()

```
module test;

import std.experimental.allocator;
import std.stdio;

private alias AllocatorType = CAllocatorImpl!(AllocatorList!(
n = Region!Mallocator(1024 * 4), NullAllocator));

struct Big {
ubyte[1024] bytes;
}

void main(string[] args){
auto a = new AllocatorType;
foreach (i; 0 .. 100) {
a.make!Big();
writeln(i);
}
}
```


Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread Andrei Alexandrescu via Digitalmars-d

On 6/13/15 4:16 PM, ZombineDev wrote:

On Saturday, 13 June 2015 at 15:48:31 UTC, Andrei Alexandrescu wrote:

On 6/13/15 3:14 AM, Dicebot wrote:

Andrei, have you considered creating additional std.allocator.impl
package and moving actual allocators there? Or, probably, the other way
around with std.allocator.core

Existing flat hierarchy does not hint about internal structure in any
way.


It's good documentation, not directories, that helps understanding
internal structure. There are 23 files in std/experimental/allocator,
which seems manageable. I think we're good as we are.

Andrei


I also think putting some of the files in folder will make things
cleaner and easier to understand.

These files:
std.experimental.allocator.affix_allocator,
std.experimental.allocator.allocator_list,
std.experimental.allocator.bucketizer,
std.experimental.allocator.fallback_allocator,
std.experimental.allocator.free_list,
std.experimental.allocator.free_tree,
std.experimental.allocator.gc_allocator,
std.experimental.allocator.bitmapped_block,
std.experimental.allocator.kernighan_ritchie,
std.experimental.allocator.mallocator,
std.experimental.allocator.mmap_allocator,
std.experimental.allocator.null_allocator,
std.experimental.allocator.quantizer,
std.experimental.allocator.region,
std.experimental.allocator.segregator,
std.experimental.allocator.stats_collector;

are great candidates for a std.experimental.allocator.building_blocks
folder.


So we have:

* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread ZombineDev via Digitalmars-d
On Saturday, 13 June 2015 at 15:48:31 UTC, Andrei Alexandrescu 
wrote:

On 6/13/15 3:14 AM, Dicebot wrote:
Andrei, have you considered creating additional 
std.allocator.impl
package and moving actual allocators there? Or, probably, the 
other way

around with std.allocator.core

Existing flat hierarchy does not hint about internal structure 
in any way.


It's good documentation, not directories, that helps 
understanding internal structure. There are 23 files in 
std/experimental/allocator, which seems manageable. I think 
we're good as we are.


Andrei


I also think putting some of the files in folder will make things 
cleaner and easier to understand.


These files:
std.experimental.allocator.affix_allocator,
std.experimental.allocator.allocator_list,
std.experimental.allocator.bucketizer,
std.experimental.allocator.fallback_allocator,
std.experimental.allocator.free_list,
std.experimental.allocator.free_tree,
std.experimental.allocator.gc_allocator,
std.experimental.allocator.bitmapped_block,
std.experimental.allocator.kernighan_ritchie,
std.experimental.allocator.mallocator,
std.experimental.allocator.mmap_allocator,
std.experimental.allocator.null_allocator,
std.experimental.allocator.quantizer,
std.experimental.allocator.region,
std.experimental.allocator.segregator,
std.experimental.allocator.stats_collector;

are great candidates for a 
std.experimental.allocator.building_blocks folder.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread weaselcat via Digitalmars-d
On Sunday, 14 June 2015 at 00:24:51 UTC, Andrei Alexandrescu 
wrote:

On 6/13/15 4:16 PM, ZombineDev wrote:
On Saturday, 13 June 2015 at 15:48:31 UTC, Andrei Alexandrescu 
wrote:

On 6/13/15 3:14 AM, Dicebot wrote:
Andrei, have you considered creating additional 
std.allocator.impl
package and moving actual allocators there? Or, probably, 
the other way

around with std.allocator.core

Existing flat hierarchy does not hint about internal 
structure in any

way.


It's good documentation, not directories, that helps 
understanding
internal structure. There are 23 files in 
std/experimental/allocator,

which seems manageable. I think we're good as we are.

Andrei


I also think putting some of the files in folder will make 
things

cleaner and easier to understand.

These files:
std.experimental.allocator.affix_allocator,
std.experimental.allocator.allocator_list,
std.experimental.allocator.bucketizer,
std.experimental.allocator.fallback_allocator,
std.experimental.allocator.free_list,
std.experimental.allocator.free_tree,
std.experimental.allocator.gc_allocator,
std.experimental.allocator.bitmapped_block,
std.experimental.allocator.kernighan_ritchie,
std.experimental.allocator.mallocator,
std.experimental.allocator.mmap_allocator,
std.experimental.allocator.null_allocator,
std.experimental.allocator.quantizer,
std.experimental.allocator.region,
std.experimental.allocator.segregator,
std.experimental.allocator.stats_collector;

are great candidates for a 
std.experimental.allocator.building_blocks

folder.


So we have:

* 1 request to change names;
* 3 requests to wank around the directory structure;
* 0 of everything else.

Sigh.


Andrei


can I make a request to just get it the hell in std.experimental 
for 2.068?


Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread Andrei Alexandrescu via Digitalmars-d

On 6/13/15 3:14 AM, Dicebot wrote:

Andrei, have you considered creating additional std.allocator.impl
package and moving actual allocators there? Or, probably, the other way
around with std.allocator.core

Existing flat hierarchy does not hint about internal structure in any way.


It's good documentation, not directories, that helps understanding 
internal structure. There are 23 files in std/experimental/allocator, 
which seems manageable. I think we're good as we are.


Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread Dicebot via Digitalmars-d
On Saturday, 13 June 2015 at 15:48:31 UTC, Andrei Alexandrescu 
wrote:

On 6/13/15 3:14 AM, Dicebot wrote:
Andrei, have you considered creating additional 
std.allocator.impl
package and moving actual allocators there? Or, probably, the 
other way

around with std.allocator.core

Existing flat hierarchy does not hint about internal structure 
in any way.


It's good documentation, not directories, that helps 
understanding internal structure. There are 23 files in 
std/experimental/allocator, which seems manageable. I think 
we're good as we are.


Andrei


I haven't seen overview in documentation either


Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread Andrei Alexandrescu via Digitalmars-d

On 6/13/15 10:24 AM, Dicebot wrote:

On Saturday, 13 June 2015 at 15:48:31 UTC, Andrei Alexandrescu wrote:

On 6/13/15 3:14 AM, Dicebot wrote:

Andrei, have you considered creating additional std.allocator.impl
package and moving actual allocators there? Or, probably, the other way
around with std.allocator.core

Existing flat hierarchy does not hint about internal structure in any
way.


It's good documentation, not directories, that helps understanding
internal structure. There are 23 files in std/experimental/allocator,
which seems manageable. I think we're good as we are.

Andrei


I haven't seen overview in documentation either


Yah, that should go in package.d. It's reasonable to mark that as an 
acceptance requirement even for experimental. Will get into it soon. -- 
Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread Dicebot via Digitalmars-d
Andrei, have you considered creating additional 
std.allocator.impl package and moving actual allocators there? 
Or, probably, the other way around with std.allocator.core


Existing flat hierarchy does not hint about internal structure in 
any way.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread Jacob Carlborg via Digitalmars-d

On 2015-06-12 13:06, Dicebot wrote:

The legendary allocator package by Andrei Alexandrescu has arrived at
your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs: http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator


I think IAllocator, theAllocator and it are really bad names. I 
recommend renaming those symbols to:


IAllocator - Allocator
theAllocator - currentAllocator or tlsAllocator
it - allocator or instance. Even better if a static opDispatch could 
be used to forward all methods to the instance.


--
/Jacob Carlborg


Re: Phobos addition formal review: std.experimental.allocator

2015-06-13 Thread Tofu Ninja via Digitalmars-d
On Saturday, 13 June 2015 at 15:48:31 UTC, Andrei Alexandrescu 
wrote:

On 6/13/15 3:14 AM, Dicebot wrote:
Andrei, have you considered creating additional 
std.allocator.impl
package and moving actual allocators there? Or, probably, the 
other way

around with std.allocator.core

Existing flat hierarchy does not hint about internal structure 
in any way.


It's good documentation, not directories, that helps 
understanding internal structure. There are 23 files in 
std/experimental/allocator, which seems manageable. I think 
we're good as we are.


Andrei


Personally, I disagree, the flat hierarchy was the first thing I 
noticed and I thought the same thing as Dicebot.


And its 23 now, but what about when new allocators get added. I 
don't think there is really a cost to moving it to a new folder, 
just makes things clearer. Any ways isn't the flat hierarchy 
something people have been complaining about Phobos in general?


Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Dicebot via Digitalmars-d
Also wanted to apologize for authors of any other Phobos 
proposals - I did intend to step down from review manager role 
but this specific package is of huge personal interest to me, 
thus the exception has been made.


Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Andrea Fontana via Digitalmars-d

On Friday, 12 June 2015 at 11:06:43 UTC, Dicebot wrote:
The legendary allocator package by Andrei Alexandrescu has 
arrived at your doorsteps and kindly asks to let it into Phobos


http://wiki.dlang.org/Review/std.experimental.allocator

Docs: 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code: 
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator


This proposal will undergo the review/inclusion process similar 
to std.experimental.logger :


1. 2 week review/discussion period
2. if proposal author feels confident, 2 week voting period for 
accepting into sts.experimental
3. once enough field trial feedback has been accumulated, vote 
for moving into std mainline during the upcoming release beta 
period


If reviewing find some fundamental issues or voting will fail, 
the whole process will repeats again per proposal authors 
request.


Please start destruction, review period ends on 26.06 (23.59 +0 
Greenwich)


Great work :)

It would be nice if someone could write some tests/benchmarks in 
order to show for each allocator where it works well over others.






Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Baz via Digitalmars-d
On Friday, 12 June 2015 at 19:19:55 UTC, Andrei Alexandrescu 
wrote:

On 6/12/15 11:23 AM, Baz wrote:

On Friday, 12 June 2015 at 11:09:01 UTC, Dicebot wrote:
Small tip for reviewers: there are quite many modules in 
proposed
package but majority is actual allocator implementation. I'd 
suggest

to start investigating sources/documentation starting from
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
and
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_building_blocks.html
while using
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_showcase.html
as reference for highlight examples.


while building the package as a static lic library, i've found 
that
_showcase.d_ is not usable under Windows because MmapAllocator 
is Posix

only:

https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/showcase.d#L66

https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/mmap_allocator.d#L14


I've asked this a while ago as well - could anyone with a 
Windows rig contribute a MmapAllocator for Windows? Thanks! -- 
Andrei


I have done it 
(https://gist.github.com/BBasile/e382be91dcc18e4d2358),

but if i run the tests of the showcase i get:

---
...\region.d(84): Error: shared method 
std.experimental.allocator.mmap_allocator.MmapAllocator.allocate 
is not callable using a non-shared object
...\showcase.d(73): Error: template instance 
std.experimental.allocator.region.Region!(MmapAllocator, 8u, 
cast(Flag)false) error instantiating
...\allocator_list.d(76): Error: struct Factory does not overload 
()
...\showcase.d(79): Error: template instance 
std.experimental.allocator.allocator_list.AllocatorList!(Factory, 
NullAllocator) error instantiating
...\region.d(84,29): Error: shared method 
std.experimental.allocator.mmap_allocator.MmapAllocator.allocate 
is not callable using a non-shared object
...\showcase.d(73,20): Error: template instance 
std.experimental.allocator.region.Region!(MmapAllocator, 8u, 
cast(Flag)false) error instantiating
...\allocator_list.d(76,42): Error: struct Factory does not 
overload ()
...\showcase.d(79,12): Error: template instance 
std.experimental.allocator.allocator_list.AllocatorList!(Factory, 
NullAllocator) error instantiating

C:\...\allocator\showcase.d has not been compiled
---

Should i continue and propose a PR ?




Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Andrei Alexandrescu via Digitalmars-d

On 6/12/15 11:23 AM, Baz wrote:

On Friday, 12 June 2015 at 11:09:01 UTC, Dicebot wrote:

Small tip for reviewers: there are quite many modules in proposed
package but majority is actual allocator implementation. I'd suggest
to start investigating sources/documentation starting from
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
and
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_building_blocks.html
while using
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_showcase.html
as reference for highlight examples.


while building the package as a static lic library, i've found that
_showcase.d_ is not usable under Windows because MmapAllocator is Posix
only:

https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/showcase.d#L66

https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/mmap_allocator.d#L14


I've asked this a while ago as well - could anyone with a Windows rig 
contribute a MmapAllocator for Windows? Thanks! -- Andrei




Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Andrei Alexandrescu via Digitalmars-d

On 6/12/15 4:07 PM, Tofu Ninja wrote:

Are there any plans to have new and delete call out to theAllocator or
processAllocator?


In the future we may rig things that way. -- Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Tofu Ninja via Digitalmars-d
On Friday, 12 June 2015 at 15:54:27 UTC, Andrei Alexandrescu 
wrote:

On 6/12/15 8:54 AM, Andrei Alexandrescu wrote:
* A dynamicaly-typed layer that allows the user to swap 
allocators at
runtime. This is embodied in IAllocator, CAllocatorImpl, 
theAllocator,

and processAllocator.


Forgot to mention - the entry point for this layer is also 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html.


Andrei



Are there any plans to have new and delete call out to 
theAllocator or processAllocator?


Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Dicebot via Digitalmars-d
Small tip for reviewers: there are quite many modules in proposed 
package but majority is actual allocator implementation. I'd 
suggest to start investigating sources/documentation starting 
from 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html 
and 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_building_blocks.html 
while using 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_showcase.html 
as reference for highlight examples.


Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Dicebot via Digitalmars-d
The legendary allocator package by Andrei Alexandrescu has 
arrived at your doorsteps and kindly asks to let it into Phobos


http://wiki.dlang.org/Review/std.experimental.allocator

Docs: 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code: 
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator


This proposal will undergo the review/inclusion process similar 
to std.experimental.logger :


1. 2 week review/discussion period
2. if proposal author feels confident, 2 week voting period for 
accepting into sts.experimental
3. once enough field trial feedback has been accumulated, vote 
for moving into std mainline during the upcoming release beta 
period


If reviewing find some fundamental issues or voting will fail, 
the whole process will repeats again per proposal authors request.


Please start destruction, review period ends on 26.06 (23.59 +0 
Greenwich)


Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Andrei Alexandrescu via Digitalmars-d

On 6/12/15 4:08 AM, Dicebot wrote:

Small tip for reviewers: there are quite many modules in proposed
package but majority is actual allocator implementation. I'd suggest to
start investigating sources/documentation starting from
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
and
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_building_blocks.html
while using
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_showcase.html
as reference for highlight examples.


A few more words on that:

Think of std.experimental.allocator as a three-layered cake:

* An untyped layer, dealing exclusively in void[], and where all action 
is happening. That's where work is getting done, and also where assembly 
of various custom allocators happens. Best entry point for that is 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_building_blocks.html, 
which describes this layer's design and links to all untyped components.


* A statically-typed layer, which takes types from the user and gives 
back typed memory. There are two good entry points here: 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html 
contains generic routines for creating and destroying typed objects 
using any untyped allocator: make, dispose, etc. There is also assembly 
at this level, i.e. deciding to use different heaps for shared vs. 
unshared data: 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_typed.html 
(this is particularly beautiful or awful, depending).


* A dynamicaly-typed layer that allows the user to swap allocators at 
runtime. This is embodied in IAllocator, CAllocatorImpl, theAllocator, 
and processAllocator.



Thanks in advance for reviewing this!

Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Andrei Alexandrescu via Digitalmars-d

On 6/12/15 8:54 AM, Andrei Alexandrescu wrote:

* A dynamicaly-typed layer that allows the user to swap allocators at
runtime. This is embodied in IAllocator, CAllocatorImpl, theAllocator,
and processAllocator.


Forgot to mention - the entry point for this layer is also 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html.


Andrei


Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Andrei Alexandrescu via Digitalmars-d

On 6/12/15 7:31 AM, Jacob Carlborg wrote:

On 2015-06-12 13:06, Dicebot wrote:

The legendary allocator package by Andrei Alexandrescu has arrived at
your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs:
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator



As I said in the other thread:

* Andrei's ODBC code seems to be in the same branch
* Some code is commented in std.math and std.traits
* What is std.typed_allocator? It doesn't seem to have anything related
to allocators, some leftover code?


Sorry about that. I now created a pull request with that stuff taken 
care of:


https://github.com/D-Programming-Language/phobos/pull/3405


Andrei



Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Jacob Carlborg via Digitalmars-d

On 2015-06-12 13:06, Dicebot wrote:

The legendary allocator package by Andrei Alexandrescu has arrived at
your doorsteps and kindly asks to let it into Phobos

http://wiki.dlang.org/Review/std.experimental.allocator

Docs: http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html
Code:
https://github.com/andralex/phobos/tree/allocator/std/experimental/allocator


As I said in the other thread:

* Andrei's ODBC code seems to be in the same branch
* Some code is commented in std.math and std.traits
* What is std.typed_allocator? It doesn't seem to have anything related 
to allocators, some leftover code?


--
/Jacob Carlborg


Re: Phobos addition formal review: std.experimental.allocator

2015-06-12 Thread Baz via Digitalmars-d

On Friday, 12 June 2015 at 11:09:01 UTC, Dicebot wrote:
Small tip for reviewers: there are quite many modules in 
proposed package but majority is actual allocator 
implementation. I'd suggest to start investigating 
sources/documentation starting from 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator.html 
and 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_building_blocks.html 
while using 
http://erdani.com/d/phobos-prerelease/std_experimental_allocator_showcase.html 
as reference for highlight examples.


while building the package as a static lic library, i've found 
that
_showcase.d_ is not usable under Windows because MmapAllocator is 
Posix only:


https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/showcase.d#L66
https://github.com/andralex/phobos/blob/allocator/std/experimental/allocator/mmap_allocator.d#L14