Phobos addition formal review: std.experimental.allocator
extrawurst via Digitalmars-d
digitalmars-d at puremagic.com
Tue Jun 23 09:48:13 PDT 2015
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/qwatonmpnoyjsvzjpyjl@forum.dlang.org)
for convenience the package.d could still import a bunch of
default stuff publicly for the "normal" user.
More information about the Digitalmars-d
mailing list