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

Reply via email to