Sharing in D
Steven Schveighoffer
schveiguy at yahoo.com
Fri Aug 1 09:08:52 PDT 2008
"Sean Kelly" wrote
> == Quote from Steven Schveighoffer article
>> "Walter Bright" wrote
>> > Steven Schveighoffer wrote:
>> >> "Walter Bright" wrote
>> >>> Nearly all global data is assumed to be and treated as if it were
>> >>> unshared. So making unshared the default is the right solution. And
>> >>> frankly, if you're using a lot of global variables, you might want to
>> >>> reevaluate what you're doing. Lots of global variables is the 80's
>> >>> style
>> >>> of programming :-)
>> >> I have no idea where you came up with this. To me global means
>> >> shared.
>> >> Global means the world can see it, meaning that it's shared between
>> >> all.
>> >> Even VB.net uses 'Shared' as the keyword to mean 'global'
>> >
>> > The idea is that encapsulation is better, and having something shared
>> > between everyone violates encapsulation. When you have a global
>> > variable
>> > 'int x' that everyone can read and write to, and there's a bug, you
>> > have
>> > the whole program to search for that bug. The principle of
>> > encapsulation
>> > is that each chunk of data is visible only to the code that needs to
>> > see
>> > it, and no more.
>> So if I write:
>> shared int x;
>> As a global variable, how does this help encapsulation? In the current
>> model, if you need shared data, you use global variables. If you don't
>> need
>> shared data, use member or stack variables. My point is that what you
>> will
>> have done is just made the person who wants a global variable write
>> 'shared'
>> in front of it. I don't see how this helps him protect the variable at
>> all.
>> It just seems like you are enforcing something that already can be
>> enforced.
>> > (Programming languages started out with everything being global data,
>> > and
>> > has moved away from that ever since.)
>> I'm not advocating using global variables over stack or member variables.
>> All I'm saying is that this 'shared/unshared' model doesn't seem to me
>> like
>> it will eliminate the need for threading constructs, or even help with
>> it.
>
> I'm hoping that 'shared' will force programmers to think about what
> they're
> doing a bit more. A typical multithreaded app should have extremely
> little
> shared data. One thing I'm not sure of, though, is if I write a single-
> threaded app, will I need to label anything shared? Functionally I don't,
> since having everything thread-local is exactly what I need, but I'm not
> sure if the compiler will yell at me anyway. I'm guessing it will, which
> would be a bit annoying, but it would "future proof" the app for adding
> multithreading later, so perhaps it's okay.
I'm thinking more in the case of functions. If I have a function foo, and I
want to pass my shared data version to it, I need to re-implement foo with
the parameters as being shared. Imagine a function with several parameters,
in which you want to pass a combination of shared/unshared. That's 2^n
variations you have to write.
I think at the very least, for this to be palatable, there needs to be
another modifier that unifies shared and unshared. Similar to how const
unifies mutable and invariant.
-Steve
More information about the Digitalmars-d
mailing list