On Sunday, 21 September 2014 at 03:39:24 UTC, Walter Bright wrote:
I think it's a well thought out proposal. Thanks for doing this!
A couple thoughts:
1. const can be both a storage class and a type constructor.
Scope is only a storage class. The scope(int) syntax implies
scope is a type constructor, too.
const int* a; // const used as storage class
const(int*) b; // const used as type constructor
The type constructor syntax should be disallowed for const.
(... disallowed for _scope_, I assume)
I originally intended it to be part of the type. Ivan Timokhin
pointed out severe problems with that [1], so I removed it from
the proposal. The syntax is a remainder of that.
But before I remove it too, I have a question: Will it still be
possible to use the storage class syntax for members of
aggregates?
struct S {
scope!myAllocator int* p;
}
2. I think there is quite a bit of overlap between scope and
ref. Essentially, ref does everything scope does, except deal
with classes. I'm not terribly comfortable with such a large
overlap, it implies something is wrong. I don't have an answer
at the moment.
I also see the overlap, but there are also large differences to
the point that I cannot see how the two concepts could be
unified. For one, `ref` with classes (and reference types in
general) is troublesome, and would introduce a double indirection
for borrowing, when a simple copy of the reference would be
sufficient. Then, `scope` could also for non-reference types.
File handles come to mind, which are often integers, and just
need to be copied.
[1]
http://forum.dlang.org/thread/[email protected]?page=3#post-lusirm:2421d9:241:40digitalmars.com