Am 25.09.2013 20:27, schrieb Johannes Pfau:
Am Wed, 25 Sep 2013 17:22:28 +0200
schrieb Benjamin Thaut <[email protected]>:

Am 25.09.2013 00:39, schrieb Andrei Alexandrescu:

We're banning that syntax of new.

Andrei

I always love it when people just plain ignore all the arguments I
made ...


I think there's a misunderstanding here. new(...) already was a valid
syntax in D1, I think Andrei is referring to that:

http://www.digitalmars.com/d/1.0/class.html#allocators

And we really should get rid of that.

The nested class/context pointer argument is a pretty strong one. Of
course we could introduce builtins to deal with that but there's not
much benefit to that.

Having the compiler rewrite

"new(MallocAllocator) MyClass(a,b,c)"
to
"void[] __buf = MallocAllocator.it.allocate(MyClass.instancesize);"
"__construct!MyClass(__buf, a, b, c);" //Has to handle context ptr

seems like a good solution. It probably has to support both allocator
types(for allocators without state) and allocator instances.


Well I didn't actually know that a similar syntax existed in D1. I would be fine with a rewrite rule too. Anything that hides the syntactic unglyness of using a templated library method would be fine. We just have to make sure that the rewrite rule also correctly handles the implict conversion of literals. We might also want to allow:

MallocAllocator.new MyClass(a,b,c)

Kind Regards
Benjamin Thaut

Reply via email to